移動
次へ 前へ
上へ 最上
参考
ダイナミックSQL DELETEコマンド
ダイナミックSQL INSERTコマンド
ダイナミックSQL SELECTコマンド
イフコンピュータ > IF/Prolog > マニュアル > IF/Prolog V4.1 マニュアル > IF/Prolog Interfaces > SQLインタフェースマニュアル > サンプル > ダイナミックSQL SELECTコマンド

ダイナミックSQL SELECTコマンド

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).

続く..
IF/Prolog by Siemens
言語
English
Japanese
German
サーバー
USA
Japan
サイトマップ
索引
目次
全体目次
全体索引
印刷向き
imode
PDA
探索
document: http://www.ifcomputer.co.jp/IFProlog/Manuals/v4.1/advanced_feature/sql/examp/select/home_jp.html
published 2008/8/25 update 1995/11/7 (c) 1996-2006 IF Computer Japan
IF Computer 〒113-0022 Tel 03-5814-3352 start (AT) ifcomputer.com
Customer Support 東京都文京区千駄木5-28-2   http://www.ifcomputer.co.jp
冒頭へ managed with ubiCMS