質問

私はただプロローグを学んでいます。今後の課題があります。 Prolog ODBCインターフェイスを使用して、mysqlやMSSQLなどのデータベースにデータを挿入する必要があります。次のようないくつかの例の述語があることを知っています/ p>

open_wordnet :-
    odbc_connect('WordNet', _,
                 [ user(jan),
                   password(xxx),
                   alias(wordnet),
                   open(once)
                 ]).

これらの述語を正確に使用する方法がわからず、実際の例を示しています。誰でも、これらを正確に使用して、PrologからMySSQLやMSSQLなどのデータベースにデータを挿入する方法を教えてください。誰でもProLOGで同じことを達成するための正確な要件を教えてもらえますか?

ヘルプや情報をいただければ幸いです。

ありがとう。

役に立ちましたか?

解決

@ThomasHおよび@StarWind Softwareのご回答ありがとうございます。あなたが指摘したのと同じコードを使用して、解決策を見つけることができました。さて、ここに完全な画像があります。 Prologからデータベースへの接続の明確な画像を必要とする人々が非常に多くいると確信しています。

注:

  1. swi-prolog内から任意のデータベースに接続できます。 Oracle 10gとMySQL 5を使用しました。
  2. まず、こちら

  3. パッケージ 'ODBCProlog.dll'および 'OracleProlog.dll'には2つの主要な 'dll'ファイルがあります

    次に、これは上記と同じサンプルコードです。セクションを説明します

プロローグのMYSQL接続



:- use_module(oracle).
go :-
    db_open('mysql5', 'root', 'admin'),    
    db_import('EMP'('EMPID', 'EMPNAME'), emp),
    %%db_flag(show_query, _, off),

    db_query(emp(EMPID, EMPNAME), emp(EMPID, EMPNAME)),
    %% Run the query.
    get_result,
    %% Modify the database.
    %%emp_ins(109, 1, 221),
    %%test_del(109, 1, 221),
    %% Commit changes.
    db_transaction(commit),
    db_close.

%% Retrieve all records over backtracking.
get_result:-
    emp(EMPID, EMPNAME),
    write_ln([EMPID, EMPNAME]),
    fail.
get_result.

今説明部分:

db_open( 'mysql5'、 'root'、 'admin')、

最初の部分 'mysql5' mysqlのdsn名。 nmotをシステムにインストールしている場合は、MySQL Webサイトからダウンロードできます。次はユーザー名とパスワードです。

db_flag(show_query、_、off)、

SQLステートメントを出力に出力します。コメントすると、SQLクエリを出力できなくなります。

db_import( 'EMP'( 'EMPID'、 'EMPNAME')、emp)、

ここで、「EMP」はデータベース内の実際のテーブル名で、「emp」はそのエイリアスです。 この方法で作成しないと、機能しません。

db_query(emp(EMPID、EMPNAME)、emp(EMPID、EMPNAME))、

次に、データベースを検索するために、上記の呼び出し「db_query」は2つの引数を取ります。 JOINステートメントのように、これを使用して2つのテーブルを照会できます。 1つのテーブルを検索するだけの場合、この呼び出しでは2つの引数が必要になるため、同じクエリを2回実行する必要があります。

データベースのコメント解除に何かを挿入する必要がありますか

emp_ins(109、1、221)、

この規則は、データベースへの挿入呼び出しであることをプロローグが理解しているエイリアス名に_insを追加しているだけです。

同様に

emp_del(109、1、221)、

残りは自明だと思います。

今、次の部分は、Oracleデータベースに接続する必要がある場合、変更される唯一のステートメントは次のとおりです。



:- use_module(odbc).

残りはほぼ同じです。覚えておかなければならないことの1つは、データベースを指定するときにoracle INSTANCE名を使用する必要があるということです。 通常、Oracle 10gでは、インスタンス名は 'orcl' であり、Oracle Expressエディションの規則は次のとおりです。

'your full computer name:port/XE','username','password'

データベースに接続して、このコードブロックで結果を表示できます

これがお役に立てば幸いです。

他のヒント

このメールには古い例が埋め込まれています会話のリスト(「test_1」を探します)。私はそれを使ったことはありませんが、 se_greenslades はODBCデータベースのインスタンス名だと思います。ローカル設定で自分のものを調べる必要があります。その後、挿入と更新を行うために(odbc_prepare ?!の)通常のSQLステートメントを使用すると思います。すでにリンクしているSWIドキュメントを確認し、基本的なODBCの使用法についてインターネットを検索します(SWIインターフェイスはかなり標準的だと思います)。

" ProLOG"とはどういう意味ですか?

この例はどうですか:

:- use_module(oracle).

go :-
    db_open('Your Database Name', 'scott', 'tiger'),
    db_import('DEPT'('DEPTNO', 'DNAME', 'LOC'), dept),
    db_import('EMP'('EMPNO', 'ENAME', 'JOB', 'MGR', 'HIREDATE', 'SAL', 'COMM', 'DEPTNO'), emp),
    %% Uncomment it, if you do not want to see SQL statements.
    %% db_flag(show_query, _, off),
    db_query(empinfo(EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO, DNAME, LOC),
        (   emp(EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO),
            dept(DEPTNO, DNAME, LOC)
        )
    ),
    get_result,
    db_close.

get_result:-
    empinfo(EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO, DNAME, LOC),
    write_ln([EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO, DNAME, LOC]),
    fail.
get_result.

ここから取得: http://www.geocities.com/SiliconValley /Bit/1116/PrologSQLex01.html

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top