C++BuilderでOracle 10gの埋め込みSQLを使ってみた
2chム板の「C++Builder相談室 Part17」にC++BuilderでOracle Pro*Cを使う猛者がいたので、試しにやってみた。
1.準備
$(ORACLEHOME)\precomp\LIB\にあるorasql10.libをCOFF2OMFを使ってC++Builderでリンクできるようにする。
coff2omf orasql10.lib orasql10omf.lib
2.ソースのコンパイル
サンプルソース(File1.pc)は以下の通り。
//--------------------------------------------------------------------------- #include人によっては、きんもーっ☆って思うかもしれないけど、これが埋め込みSQLって奴ね。#include #pragma hdrstop //--------------------------------------------------------------------------- EXEC SQL INCLUDE SQLCA; EXEC SQL BEGIN DECLARE SECTION; static const char* user = "SCOTT"; static const char* passwd = "TIGER"; static const char* host = "ORCL"; EXEC SQL END DECLARE SECTION; #pragma argsused int main(int argc, char* argv[]) { EXEC SQL BEGIN DECLARE SECTION; long empno; char ename[20]; EXEC SQL END DECLARE SECTION; EXEC SQL CONNECT :user IDENTIFIED BY :passwd USING :host; EXEC SQL DECLARE CURSOR1 CURSOR FOR SELECT EMPNO, ENAME FROM EMP ORDER BY EMPNO; EXEC SQL OPEN CURSOR1; EXEC SQL WHENEVER NOT FOUND DO BREAK; while (1) { EXEC SQL FETCH CURSOR1 INTO :empno, :ename; printf("EMPNO = %d, ENAME = %s\n", empno, ename); } EXEC SQL CLOSE CURSOR1; return 0; } //---------------------------------------------------------------------------
Oracleお馴染みのscottユーザーのEMP表を出力してみる。
3.コンパイル&リンク
まず、埋め込みSQLが記述されているソースコードをC/C++コンパイラでコンパイルできるようにする。
やり方は、コマンドプロンプトから直接とか、ビルドイベントとかでも出来るので省略。
コマンドプロンプトからだと、以下のようにproc.exeを実行する。場所は$(ORACLE_HOME)\binの下。
proc code=cpp cpp_suffix=cpp File1.pcそうするとFile1.cppというファイルが生成されるので、こいつをコンパイル。
リンクには、1で作成したライブラリが必要なので、プロジェクトに追加しておくこと。
実際に実行した結果はこんな感じ。
EMPNO = 7369, ENAME = SMITH EMPNO = 7499, ENAME = ALLEN EMPNO = 7521, ENAME = WARD EMPNO = 7566, ENAME = JONES EMPNO = 7654, ENAME = MARTIN EMPNO = 7698, ENAME = BLAKE EMPNO = 7782, ENAME = CLARK EMPNO = 7788, ENAME = SCOTT EMPNO = 7839, ENAME = KING EMPNO = 7844, ENAME = TURNER EMPNO = 7876, ENAME = ADAMS EMPNO = 7900, ENAME = JAMES EMPNO = 7902, ENAME = FORD EMPNO = 7934, ENAME = MILLER