Pro* C/C++ 참고 URL


1 Pro* C/C++ #

Oracle 에서 제공하는 Embaded SQL을 의미
pc 확장자의 파일에 Embaded SQL 구문을 포함하여 C/C++ 문법으로 코딩하여 proc 라는 프리컴파일러로 컴파일하면 c/cpp 파일을 생성한다 해당 파일을 컴파일러로 컴파일해서 클라이언트 프로그램에서 Oracle 로 접속한다.

Pro* C 에서 쿼리문에 영향을 받은 row수를 얻는방법

Rows-Processed Count

The number of rows processed by the most recently executed SQL statement is
returned in the SQLCA variable sqlca.sqlerrd[2], which you can check
explicitly.
Strictly speaking, this variable is not for error reporting, but it can help you avoid
mistakes. For example, suppose you expect to delete about ten rows from a table.
After the deletion, you check sqlca.sqlerrd[2] and find that 75 rows were
processed. To be safe, you might want to roll back the deletion and examine your
WHERE-clause search condition.

결론은 sqlca.sqlerrd[2]
쩝… Pro C 책을 한권 사던지 해야지 이런 간단한 내용 찾는데 어버버버 하면서 시간을 너무 낭비하는군.

Pro* C/C++ WHENEVER 지시자에 대해서

step1:
EXEC SQL WHENEVER SQLERROR STOP;
EXEC SQL CONNECT:username IDENTIFIEDBY:password;

gotostep3;

step2:
EXEC SQL WHENEVER SQLERROR CONTINUE;
EXEC SQL UPDATE emp SET sal = sal*1.10;

step3:
EXEC SQL DROP INDEX emp_index;

이런 식으로 WHENEVER 지시자가 있을때 첫번째 지시자는 CONNECT에 영향을 미치고 두번째는 UPDATE 와 DROP에 영향을 미친다고 한다. 이른바 스코프가 logical 이 아니고 positional 이라고 한다.

흐으음…. 알수없군…

일반적으로 SELECT 구문에서 모든 row를 while 문을 돌리면서 읽어올때는 이렇게

EXEC SQL WHENEVER NOT FOUND DO break;
for(;;)
{
EXECSQLFETCH…
}
EXEC SQL CLOSE my_cursor;

그리고 위의 코드 사이에 또다른 실행문이 있는 경우에는 따로 WHENEVER 지시어를 사용. 요렇게. (INSERT문도 결과적으로 INSERT 된 ROW가 하나도 없을 때는 NOT FOUND 가 나온다고 한다.)

EXEC SQL WHENEVER NOT FOUND DO break;
for(;;)
{
EXEC SQL FETCH…
EXEC SQL WHENEVER NOT FOUND CONTINUE;
EXEC SQL INSERT INTO…
}
EXEC SQL CLOSE my_cursor;

Pro* C/C++ 자료 좋은것

환경 설정에 대해서 깔끔하게 정리되어 있는 문서
UNIX 계열, Window 모두 Pro* C/C++을 사용하기 위한 환경 설정과 샘플파일에 대한 설명이 잘 되어 있다.
097988.pdf

Pro* C/C++ 레퍼런스
Oracle 사이트에서 찾은건대 꽤나 찾기 힘들더만… Precompliler 로 찾아야 나오는걸 계속 Pro C 같은 걸로 찾고 있었다 -_-;;;
930719.pdf