| ||||||||||
| 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. ?- _SqlCmd = 'SELECT ENAME,DEPNO,HIREDATE,SALARY FROM EMP WHERE ENAME=:name OR (DEPNO = :dep AND SALARY >= :sal)', sql declare(c3,_SqlCmd,N1,N2,RC). N1 = 3 N2 = 4 RC = 0 このSQL SELECTコマンドは、入力として3個のバインド変数、出力として4個の選択変数を持っています。
?- sql_inout(c3,In,Out). In = [name,dep,sal] Out = [ename,depno,hiredate,salary] バインド変数と選択変数の名前は、述語sql_input/3で得ることが出来ます。
?- BindSpec = [sal=29999.99,dep=20,name='SCOTT'], sql_descr_in(c3,BindSpec). yes SELECTコマンドのWHERE節を指定しました。
?- sql_open(c1,RC). RC = 0 SELECTコマンドをRDBMSで実行しました。
?- TypeSpec = [depno=integer,hiredate=date,salary=double], sql_descr_out(c1,TypeSpec). yes アプリケーションのコラム検索用の「フォーマット」を指定しました。デフォルトのタイプは`atom'です。
?- sql_fetch(c1,Tuple,Warnings,RC). Tuple = ['SMITH',30,date(87,12,7),29500.50] Warnings = [0,0,0,0] RC = 1 データの最初のレコードを取り出しました。
?- sql_fetch_n(c1,N,TupleList,IndTupleList,RC). N = 5 TupleList = 'SCOTT',20,'',61098.0 , ... IndTupleList = 0,0,-1,0 , ... RC = 5 sql_fetch_n/5はN個までのデータタプルを取り出します。もしN(第2引数)を具体化せずにsql_fetch_n/5を呼びだしたときは、見つかったデータタプルをすべて取り出し、N(とRC)にその数をセットします。 Nが具体化されているとき、これによって取り出されるデータタプル数の最大値を指定します。RC(>=0, <= N)は、実際に見つかったデータタプルの数を与えます。 'SCOTT'のレコードにはHIREDATEが与えられていないので、NULL値が返され、対応するインジケータは-1にセットされます。 SQLコマンドの再構文解析をせずに、sql_descr_in/2を使って選択基準を変更し、引続き以下のようにデータベース照会を行なうことが出来ます。 ?- sql_descr_in(c1, [ ... ] ), sql_open(c1,0), sql_descr_out(c1, [ ... ] ), Max = 4, repeat, sql_fetch_n(c1,Max,Tuples,_,RC), perform_data(RC,Tuples), RC < Max, !, ... ?- sql_close(c1,0).
アプリケーションが一度に一つのデータ要素だけを検索するようにしたいときは、次のようにするとよいでしょう。 ?- sql_descr_in(c1, [ ... ] ), sql_open(c1,0), sql_descr_out(c1, [ ... ] ), repeat, sql_fetch_buf(c1,RC), ( RC = 1, ... sql_get_value(c1,ename,atom,Name,Ind1), sql_get_value(c1,salary,double,Salary,Ind2) , ... fail ; RC = 0, ! ). ?- sql_close(c1,0). | ||||||||||
|
| 戻る> |
|