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 1572 게시물 읽기
No. 1572
[급] count 를 변수로 받아들이기 -- 간단한 부분입니다..도와주세요.
작성자
초보
작성일
2006-06-26 10:32ⓒ
2006-06-26 10:33ⓜ
조회수
5,858

C로 프로그래밍 하다가 테이블이름이 변하기 때문에 다이나믹SQL로

실행되도록 만들었더니 안되네요..

------------1. 이렇게 하면 됨---------------------------------------

EXEC SQL
SELECT COUNT(*)
into :db_count
from A0000001589_RBC_TMP;

ctx->all_file_cnt = db_count;

printf("## LOAD 된 주민번호 건수1 : [%d]\n", ctx->all_file_cnt );

--------------------------------------------------------------

 

 

--------------2. 이렇게 하면 안됨 -------------------------------

memset( sqlcmd_0, 0x00, sizeof( sqlcmd_0 ));
sprintf( sqlcmd_0, "SELECT COUNT(*) \n"
" into :db_count \n"
" from A%s_RBC_TMP; \n",ctx->batch_id);

printf (" 카운트 QUERY =[%s]", sqlcmd_0);

EXEC SQL PREPARE ST1 FROM :sqlcmd_0;
EXEC SQL EXECUTE ST1;

if ( DB_ERRORNUM != 0 ) {
PEC_HSTERR( PEC_LN, PEC_ECODE9, "= A%s_RBC_TMP 를 카운트 하는데 실패하였습니다.[%d][%s]", ctx->batch_id, DB_ERRORNUM, DB_ERRORSTR );
goto ERR_PROC;
}
ctx->all_file_cnt = db_count;

----------------------------------------------------------------------

 

2번째 부분에서

[-33620274][cs_objects: cslib user api layer:
external error: 26000 Invalid SQL statement identifier.]

 

이렇게 에러가 떨어지네요 ㅠㅠ 쿼리가 들어가 있는 sqlcmd_0 를 출력해본 결과

첫번째와 동일하게 나오는데도 안됩니다.

 

고수님들 좀 도와주시면 감사하겠습니다.

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

이런건데요...

 

 

declare @name varchar(10)

select @name="AAA"

exec (select count(*) from @name)

 

이건 실행하실때..Incorrect syntax near '@name'.

 

이런 메세지가 나옵니다...

 

 

그래서

declare @name varchar(10)

declare @query varchar(255)

select @name="AAA"

select @query='select count(*) from '+@name

exec (@query)

 

이렇게 합니다..~~맞는 답인지 모르겠네요..

 

지연님이 2006-06-26 10:46에 작성한 댓글입니다. Edit

지연님 답글 감사드립니다.

 

하지만 , 제가 한 방식도 테이블 이름을 변수로 주지 않고

쿼리 안에는 텍스트로 들어가게 한 것이니깐 지연님 방식대로

한 것으로 보이는데요..

최총 실행한 SQL문은

 

SELECT COUNT(*)
  into :db_count
  from A0000001592_RBC_TMP;

 

이렇게 됩니다.

 

위의 문장을 SQL EXEC로 하면 잘 되는데

 

EXEC SQL PREPARE ST1 FROM :sqlcmd_0;
EXEC SQL EXECUTE ST1;

 

이렇게 하면 안된다는거.. ㅠㅠ 왜그럴까욤 >.<

초보님이 2006-06-26 11:42에 작성한 댓글입니다. Edit

답변이 모지라는 군요.....

 

여기 참조해보세요

http://infocenter.sybase.com/help/topic/com.sybase.help.ocs_12.5.1.esqlc/html/esqlc/X96546.htm

지연님이 2006-06-26 12:57에 작성한 댓글입니다. Edit

지연님 정말 감사합니다. 님이 알려주신 곳에서 해결책을 찾았습니다.

 

다이나믹 SQL을 쓸 경우에는

EXEC SQL EXECUTE ST1 INTO :변수명 으로 써야 하네요.

 

바보처럼 계속

 

SELECT COUNT(*)
into :db_count
from A0000001589_RBC_TMP;

 

만 고집하고 있었습니다. ㅠㅠ

 

초보님이 2006-06-26 13:46에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
1576ibatis사용해보신분~ 한글문제가좀 있습니다. ~_~;; [2]
이규선
2006-06-29
5896
1575[질문]SP에서 print문에 대한 질문
허남훈
2006-06-28
4295
1573[질문] Stored Procedure상에서 로그 남기기 [2]
허남훈
2006-06-27
4828
1572[급] count 를 변수로 받아들이기 -- 간단한 부분입니다..도와주세요. [4]
초보
2006-06-26
5858
1571[질문]오라클의 쿼리를 sybase로... [1]
MI
2006-06-23
5384
1570SQL derived table 이 뭔가요 ? [1]
까먹지마
2006-06-23
3603
1569dbcc logprint(...) [3]
까먹지마
2006-06-21
3799
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.018초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다