database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
ㆍSybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Sybase Q&A 1133 게시물 읽기
No. 1133
프로시저에서 에러좀 봐주세요..
작성자
강명성
작성일
2005-04-11 16:17ⓒ
2005-04-11 16:24ⓜ
조회수
4,599

ASE 12.5를 사용중입니다.

CREATE PROCEDURE kms.forum_select_list
(
@boardNo numeric(9) = NULL,
@Page_No int = NULL,
@List_Rows int = NULL,
@field varchar = null,
@keyword varchar = null
)
as
declare @Last_Row numeric(9),
@First_Row numeric(9),
@D_SQL varchar(255),
@D_AND varchar(100),
@D_ORD varchar(100)

create table #SELECT_TMP
(
Count_No numeric(9) identity not null primary key,
DATANO numeric(9),
)
//이부분에서 에러가 발생
select @D_SQL = " insert #SELECT_TMP(DATANO) select DATANO from BOARD_DATA where BOARDNO = "+@boardNo+"
select @D_ORD = " order by DATANO desc "

if datalength(@field) > 0
begin
select @D_AND = " and "+@field+" = '%"+@keyword+"%' "
select @D_SQL = @D_SQL + @D_AND + @D_ORD
end
else
begin
select @D_SQL = @D_SQL + @D_ORD
end

exec(@D_SQL)

.........................................................

에러내용 => The idenfifier that starts with "' insert #SELECT_TMP(DATANO)' is too long, Maximum length is 28.

어째서 길이 제한이 28인지 모르겠네요. 위에서 선언을 할때 varchar(255)라고 했는데요.

아직 사이베이스 초보라 문법을 잘 모릅니다.

도움을 기다리겠습니다..(__)

이 글에 대한 댓글이 총 2건 있습니다.

위의 코드를 그대로 복사해서 12.5에서 돌려봤지만 말씀하신 Error는

 

나지 않더군요. Error를 겪으셨던 정확한 코드가 아닌 것 같습니다.

 

다만, 아래와 같이 해 보니 일단 프로시저 생성은 되더군요.

 

CREATE PROCEDURE forum_select_list
(
@boardNo numeric(9) = NULL,
@Page_No int = NULL,
@List_Rows int = NULL,
@field varchar = null,
@keyword varchar = null
)
as
declare @Last_Row numeric(9),
@First_Row numeric(9),
@D_SQL varchar(255),
@D_AND varchar(100),
@D_ORD varchar(100)

create table #SELECT_TMP
(
Count_No numeric(9) identity not null primary key,
DATANO numeric(9),
)

select @D_SQL = " insert #SELECT_TMP(DATANO) select DATANO from BOARD_DATA where BOARDNO = "+convert(varchar,@boardNo)
select @D_ORD = " order by DATANO desc "

if datalength(@field) > 0
begin
select @D_AND = " and "+@field+" = '%"+@keyword+"%' "
select @D_SQL = @D_SQL + @D_AND + @D_ORD
end
else
begin
select @D_SQL = @D_SQL + @D_ORD
end

exec(@D_SQL)

 

그리고 말씀하신 Error는 quotation을 double quotation을 쓸 때

 

나기도 하는 것 같은데 single quotation으로 바꾸시고 해 보시는

 

것도 방법일 것 같습니다. 건투를 빕니다.

kmjean님이 2005-04-11 23:40에 작성한 댓글입니다. Edit

답변 감사합니다. 저도 어제 밤 늦게까지 고민을 하다가 성공을 했습니다. 이유인즉 제가 사용하고 있는 쿼리 툴에 있었습니다.

Aqua Data Studio 4.0.1을 사용하고 있는데요. 제가 볼땐 이 툴의

버그인듯합니다. 공짜툴이다보니..ㅠㅠ

제 소스에도 약간의 문제는 있었지만 생성도 잘되고 잘 작동 하더군요.

Sybase에서 Toad같은 툴이 없다는게 많이 아쉽네요.

 

아.. 제가 해본결과 double quotation이 맞습니다. 문자열 사이를 감싸구요. 답변해주신대로 문자열이 아닐경우 convert를 해줘야 하더군요.

if else 사이에 begin end를 안해주면 아무래도 오류 확률이 많은듯합니다.

나름대로 조금은 정리가 되었네요. 

강명성님이 2005-04-12 14:11에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
1136메세지 내용이 무슨 내용인지 좀 알려주세요 [1]
이상혁
2005-04-14
3197
1135윈도우용asiq에서 load table시 파일에 액세스할 수없다고 오류가 뜹니다.. [2]
김승래
2005-04-13
4124
1134ASA 에서는 sp_명령이 안 먹나요?
초보
2005-04-12
3710
1133프로시저에서 에러좀 봐주세요.. [2]
강명성
2005-04-11
4599
1132이 로그는 무슨 에러인지요 [2]
이상혁
2005-04-08
4916
1131숫자를 문자로 바꿀시... [2]
zzz
2005-04-08
4813
1130asiq 를 unix에 설치시 [1]
배움이
2005-04-07
3669
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.018초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다