MINERVA superseeded IF/Prolog.
Please see
http://www.ifcomputer.co.jp/MINERVA
for details.
We discontinued to sell IF/Prolog Dec 31. 2003.
For current customers, we continue to provide
professional support for IF/Prolog until Dec 31, 2008.
sql_declare(+Cursor,+SqlCmd,-NoIn,-NoOut,-RC)
アトムで与えられたSQLコマンド文字列は構文解析され、Cursorと対応付けられます。
NoInにはSqlCmd中のバインド変数の数が返され、NoOutにはSELECTリスト変数の数が返されます。
RC=0は、成功を意味し、RC < 0は、SQLエラーを意味します。(sql_errmsg/1を参照)
SqlCmd中のSQLキーワードは、大文字、小文字のいずれでも書くことができます。
バインド変数名の前には、コロン`:'(ORACLEの場合)か`?'(INFORMIXとINGRESの場合)をつけなければなりません。
selectリスト変数は、検索されたテーブルのコラム、あるいは、min(<column>),<column>+1のようなコラムから作った式でなければなりません。
バインド変数やselectリスト変数の名前については、sql_inout/2の項を参照して下さい。
sql_declare('immediate',SqlCmd,_,_,RC)はsql_execute(SqlCmd,RC)と同等で、翻訳後すぐにSQLコマンドを実行します。この時、バインド変数もselectリスト変数も存在することはできません。
例: ORACLE
?- _SqlCmd = 'SELECT ename,dep FROM EMP where dep=20',
sql_declare(c2,_SqlCmd,NoIn,NoOut,RC).
NoIn = 0
NoOut = 2
RC = 0
?- _SqlCmd = 'select * from emp where ename = :name ',
sql_declare(c3,_SqlCmd,NoIn,NoOut,RC).
NoIn = 1
NoOut = 6
RC = 0
?- _SqlCmd = 'insert into emp2 (ename,dep) values (:x,:y)',
sql_declare(c4,_SqlCmd,NoIn,NoOut,RC).
NoIn = 2
NoOut = 0
RC = 0
例: INFORMIX
?- _SqlCmd = 'SELECT ename,dep FROM EMP where dep=20',
sql_declare(c2,_SqlCmd,NoIn,NoOut,RC).
NoIn = 0
NoOut = 2
RC = 0
?- _SqlCmd = 'select * from emp where ename = ?',
sql_declare(c3,_SqlCmd,NoIn,NoOut,RC).
NoIn = 1
NoOut = 6
RC = 0
?- _SqlCmd = 'insert into emp2 (ename,dep) values (?,?)',
sql_declare(c4,_SqlCmd,NoIn,NoOut,RC).
NoIn = 2
NoOut = 0
RC = 0
|