글
PROC 에서 9I SYNTAX (CASE WHEN , WAIT XX, JOINS) 사용시 PCC-S-02201 발생
=====================================================================
Problem Description
-------------------
9i 에 새롭게 소개된 다음과 같은 sql 문장들은 pro*c programs 에서는
사용하지 못하고 다음과 PCC-S-02201 에러를 발생하게 됩니다.
이것은 9i Pro*C parser 가 새로운 9i sql syntax features 를 인식하지
못하기 때문입니다.
다음과 같은 경우가 있습니다.
1)
-------
EXEC SQL DECLARE c1 CURSOR FOR
select job,SUM(CASE WHEN job='CLERK' then sal else sal*10 end) from
emp group by job;
-------
$ proc iname=programname.pc
PCC-S-02201, Encountered the symbol "WHEN" when expecting one of the
following:( ) * + - / . @ | at, day, hour, minute, month, second, year,
2)
-------
EXEC SQL DECLARE c1 CURSOR FOR
EXEC SQL select ename from emp for update of ename WAIT 60;
-------
$ proc iname=programname.pc
PCC-S-02201, Encountered the symbol "wait" when expecting one of
the following: ...
3)
-------
EXEC SQL DECLARE c1 CURSOR FOR
select empno, ename , dname from emp_new e LEFT OUTER JOIN dept_new d
on (e.deptno = d.deptno); /* or other forms of Join (RIGHT, FULL OUTER)*/
-------
$ proc iname=programname.pc
PCC-S-02201, Encountered the symbol "LEFT" when expecting one of the
following:
; , for, union, connect, group, having, intersect, minus,
order, start, where, with,
Solution Description
--------------------
2가지 방법으로 해결할 수 있습니다.
1- dynamic sql methods 를 사용하는 방법
다음 예제는 dynamic sql method 3 를 사용하고 있습니다.
($ORACLE_HOME/precomp/demo/proc 안에 있는
다른 pro*c dynamic sql samples 을 참고 하시기 바랍니다:
sample6.pc sample7.pc sample8.pc )
-------------------
/* in your pc program */
VARCHAR dynstmt[80];
...
...
...
void main() {
...
...
strcpy((char *)dynstmt.arr, "select job,SUM(CASE WHEN job='CLERK' then
sal else sal*10 end) from emp group by job");
dynstmt.len = (unsigned short)strlen((char *)dynstmt.arr);
EXEC SQL PREPARE S FROM :dynstmt;
EXEC SQL DECLARE C CURSOR FOR S;
...
...
...
}
-------------------
2- patchset 9.0.1.3 을 하시거나 9.2.0.1 이상으로 upgrade 하는 방법이 있습니다.
Reference Documents
출처 :
'Oracle' 카테고리의 다른 글
오라클 ProC 작성 프로그램 (0) | 2007.01.21 |
---|---|
ProC에서 Error 처리하기(SQLSTAT,SQLCODE,SQLCA) (0) | 2007.01.21 |
PROC 에서 외부 환경변수를 받아 들이는 방법 (0) | 2007.01.21 |
Dynamic SQL의 사용 (0) | 2007.01.21 |
SQL문 기본 (0) | 2007.01.21 |
RECENT COMMENT