コマンド ラインでデータベース接続にスクリプトを渡すには、次の手順を実行します。
dbaccess [databasename] file.sql
また
dbaccess filename.sql
(ファイルDATABASE
の先頭にステートメントが含まれている場合。)
そのファイルの処理中にデータを挿入するには、ファイルに次のようなものが含まれていることを確認してください。
CREATE TEMP TABLE foo (bar INT, baz CHAR(10));
LOAD FROM "foodata.unl" DELIMITER "|"
INSERT INTO foo;
SELECT ...
元の回答に更新
SQLをシェルスクリプトに埋め込むには、「ヒアドキュメント」アプローチを使用できます。これは、あなたがほのめかしていると思います:
#!/bin/ksh
echo "Starting"
dbaccess << EOSQL
DATABASE foo;
CREATE TEMP TABLE foobar (foo INT, bar CHAR(10));
LOAD FROM "foobar.unl" DELIMITER "|"
INSERT INTO foobar;
SELECT ...
UPDATE ...
EOSQL
echo "Finished"
必要に応じて、スクリプトまたは環境変数を使用して、その SQL の動作を調整できるようになりました...
SELECT * FROM foobar WHERE bar > $VALUE;
where$VALUE
は実行時にシェルによって補間され、ハードコードされているかのように Informix データベースに供給されます。
サブシェルプロセスを埋め込むことで、SQL 全体を注入することもできます...
dbaccess << EOSQL
DATABASE foo;
CREATE TEMP TABLE ...
`cat $PATH_TO/some_more_sql_in_an_external_file.sql`
UPDATE ...
EOSQL
そして、それでさえ dbaccess プロセスによって、ヒア ドキュメントの一部であるかのように扱われます (しかし、これはまれであり、率直に言ってかなり奇妙なことです)。
ただし、クエリに影響を与えるためにクエリを一時停止または中断したり、一時テーブルの内容を調べたり、何らかの方法で変更したりできるかどうかを尋ねている場合、答えはノーです。できません。
覚えておく価値のあるもう1つのトリック。環境変数DBACCNOIGN
をゼロ以外の値に設定すると、ヒア ドキュメントの SQL 処理でエラーが発生すると、処理のチェーン全体が強制的に中止されます。dbaccess のデフォルトの動作は、エラーを報告して次のステートメントに移動することです。
それが役立つことを願っています。