2013-02-15 4 views
2

환경 SELECT MAX (ORA_ROWSCN)를 실행할 수 없습니다 : HP-UX 11.x의 C++ (PROC & ACC 컴파일러) 오라클 10g)를임베디드 SQL에서

내 C++ 임베디드 SQL 코드

에서 다음 명령을 실행할 수 없습니다입니다

EXEC SQL SELECT MAX(ORA_ROWSCN) INTO :scn_timestamp 
FROM table_name ; 

변경 사항은 기존 파일입니다. 발췌 보여주는 자동화 된 빌드 스크립트에서되는 다음과 같은 컴파일러 오류 :

다음과 같이 기본 옵션 값 파일 /data/tsd_oracle/hpux/10.2.0.2/precomp/admin/pcscfg.cfg의

/data/tsd_oracle/hpux/10.2.0.2/bin/proc +z ireclen=200 ORECLEN=200 LRECLEN=208 code=cpp cpp_suffix=C lines=yes sqlcheck=semantics maxopencursors=10 parse=PARTIAL unsafe_null=yes mode=oracle dbms=V8 sys_include='(/opt/aCC,/opt/aCC/include/iostream,/opt/aCC/include/rw,/usr/include)' include=/data/tsd_oracle/hpux/10.2.0.2/precomp/public include=/usr/include include=/opt/aCC/include include=/opt/aCC/include/SC iname=FILENAME.PC; 

Pro*C/C++: Release 10.2.0.2.0 - Production on Fri Feb 15 12:48:35 2013 

Copyright (c) 1982, 2005, Oracle. All rights reserved. 

System default option values taken from: /data/tsd_oracle/hpux/10.2.0.2/precomp/admin/pcscfg.cfg 

Error at line 81, column 5 in file FILENAME.PC 
EXEC SQL SELECT MAX(ora_rowscn) INTO :scn_timestamp 
....1 
PLS-S-00201, identifier 'ORA_ROWSCN' must be declared 
Error at line 81, column 5 in file FILENAME.PC 
EXEC SQL SELECT MAX(ora_rowscn) INTO :scn_timestamp 
....1 
PLS-S-00000, SQL Statement ignored 
Semantic error at line 81, column 5, file FILENAME.PC: 
EXEC SQL SELECT MAX(ora_rowscn) INTO :scn_timestamp 
....1 
PCC-S-02346, PL/SQL found semantic errors 
*** Error code 1 
clearmake: Error: Build script failed for "FILENAME.C" 

내용은

sys_include=(/data/tsd_oracle/hpux/10.2.0.2/precomp/public,/usr/include) 
ltype=short 
define=ORASTDARG 

나는 또한 내가 ORA_ROWSCN 열이 존재하지 않는다고 말하는 오류가 발생하는 등

EXEC SQL SELECT MAX(A.ORA_ROWSCN) INTO :scn_timestamp 
FROM table_name A; 

으로 해당 명령의 변화를 시도했습니다.

이 SQL 쿼리가 SQLPlus 콘솔에서 작동하는지 확인했습니다. 임베디드 될 때 이것이 작동하지 않는 이유는 무엇입니까?

--------------------------- 해결 방법 ------------------ ------------- 도미닉의 제안을 바탕으로

그래도 성공적으로 내가이 해결 방법으로 행복 해요 다음

EXEC SQL PREPARE timestamp_stmt FROM 'SELECT MAX(A.ora_rowscn) FROM table_name A'; 
EXEC SQL DECLARE timestamp_cur CURSOR FOR timestamp_stmt; 
EXEC SQL OPEN timestamp_cur;  
EXEC SQL FETCH timestamp_cur INTO :scn_timestamp; 
EXEC SQL CLOSE timestamp_cur; 

를 사용하여 내가 원하는 것을 검색 할 수 있었다 나는 아직도 그것이 일반적으로 작동하지 않는 이유를 궁금해. 나는 또한 이전에 커서를 사용해 보았으며 "식별자 'ORA_ROWSCN'을 선언해야한다는 동일한 오류가있었습니다. 어쨌든

, 감사 도미닉

+0

는 당신이 작동하는지 확인하기 위해 프로 * C 컴파일러에서 숨길 동적 SQL 블록을 포장 봤어?'뭔가를 사용하여 즉 포함 된 char 배열입니다 EXEC SQL PREPARE sql_stmt FROM :select_stmt; 같은 것을 사용

즉, 'EXEC SQL PREPARE sql_stmt FROM : select_stmt;'select_stmt'는'table_name a에서 max (a.ora_rowscn)를 선택 하시겠습니까? '라는'char' 배열입니까? –

+0

도미니크에게 그 제안은 완벽하게 – user2074402

+0

아. 당신이 그것을 받아 들일 수 있도록 대답으로 설정했습니다. –

답변

0

당신이 작동하는지 확인하기 위해 프로 * C 컴파일러에서 숨길 동적 SQL 블록을 포장 봤어? select_stmt이 select max(a.ora_rowscn) from table_name a