• 締切済み

【SQLite】 sqlファイルに引数を渡したい

バッチでoracleでいう sqlplus scott/tiger@orcl @test.sql "%1" のようなことをSQLiteでやりたいのですが、可能でしょうか? ※ sqlite3.exe Sample.db < test.sql "%1" みたいなことです。

みんなの回答

  • mpro-gram
  • ベストアンサー率74% (170/228)
回答No.1

SQLite のコマンドライン用はもってないので、確認してませんが、ドキュメントを読む限りでは、引数は データベース名 と sql文用文字列 の2つのみでは? http://www.sqlite.org/cli.html < でコマンド記述ファイルを受け取るのは、shellからの入力切り替え機能として受け取っているので、それ以降の記述は無視されるかと思われます。後方に書くとすればshellのパイプ処理記述なので、sqlite3への引数にならないでしょう。 て、結論的には、バッチ内で、テンポラリファイルに、コマンド記述ファイルからの文字列と追加文字列を記述してからテンポラリファイルを入力ファイルとしてsqlite3.exe に送り込めば出来なくはないかな? sql文字列全体の括りに "" を使う必要があるので、sql文内部の文字列には '' のみ使用、識別子には [] を使う必要があります。エスケープ処理はできないので。 -- ex windows バッチファイル記述 @echo off copy /Y %2 temp.sql set tempo_sql=%3 echo %tempo_sql:"=% >> temp.sql sqlite3 %1 < temp.sql rem 以降の行で一応 テンポラリー変数やファイル削除の後始末 del temp.sql set tempo_sql= -- ここまでを sqltest.bat で保存とする -- 実行例(条件:sqltest.bat と test_command.sql が同一ディレクトリーにあり、 sqlite3 が起動できること) >sqltest ex.db test_command.sql "select * from sqlite_master where [type]='table';"

関連するQ&A

  • sqlplusで引数渡しを行い、sql内でさらにその引数の一部の使用法

    sqlplusで引数渡しを行い、sql内でさらにその引数の一部の使用法 Oracle:10.2.0.1.0 Windows:XP 例えば sqlplus test/test @hoge.sql 2010 10M にて実行しますが(年・月の意味の引数をわたしています) hoge.sqlのCD1_xの数値1が引数の一部10を取得できるようにSQLに埋め込みたいと考えています。年と月で抽出するパターンが12カ月分ありまして、このCSV作成時に10Mというデータも埋め込みが必要なため、引数を単純に10にはしたくはないのです。 良い方法がありましたらお教えして頂きたくどうぞ宜しくお願いいたします。 <TESTテーブルのレイアウト> CD1_1~CD1_6、CD2_1~CD2_6、・・・CD12_1~CD12_6の12カ月分の項目があります。 <バッチファイルにて引数を指定し実行する> sqlplus test/test @hoge.sql %1 %2 <呼び出すhoge.sqlの内容> spool c:\test\data_&1&2.csv select PRODUCT_ID||','|| '&1'||','|| '&2'||','|| CD1_1||','|| <-- ここはCD1_1ではなくてCDx_1的な。xは引数の一部にしたいのです。 CD1_2||','|| CD1_3||','|| CD1_4||','|| CD1_5||','|| CD1_6 from TEST; spool off exit

  • (PHP 4.4.8) sqlite_open関数の引数を相対パスにしたいのですが上手くいきません。

    PHP 4.4.8 SQLite Library 2.8.14 の環境で、 sqlite_open関数の引数を相対パスにしたいのですが上手くいきません。 (例)create_db.php <?php $db = sqlite_open("../db_test"); //←ここでエラーが出ます。 $query = "CREATE TABLE tbl_test(id,aaa,bbb)"; $result = sqlite_query($db,$query); sqlite_close($db); ?> ネットで調べた所、sqlite_open()は引数に「相対パス(or絶対パス)」を入れることは可能であり、 かつ、「../db_test」が無い場合、作られる仕組みということです。 エラー表示: Warning: sqlite_open() [function.sqlite-open]: unable to open database (...以下略) ちなみに、上記のコードにおいて、 「../db_test」ではなく、「db_test」として同じことをすると、上手くいきます。 つまり、スクリプトファイル(create_db.php)と同階層にファイルを作成することはできるのです。 $db = sqlite_open("db_test");   //← ○:ファイル作成成功 $db = sqlite_open("../db_test"); //← ×:ファイル作成失敗 どなたかご助言をよろしくお願い致します。

    • ベストアンサー
    • PHP
  • SQLファイル内のSQL実行ログ取得

    すいません、教えてください。 以下のようなCMDバッチを作成しました。 TEST.cmd------------ sqlplus -s ID/PASS@DB @MAIN.sql 'SUB1.sql' 'SUB2.sql' > MAIN.log echo %ERRORLEVEL% MAIN.sql------------ @&1 @&2 commit; quit; これを実行した場合、MAIN.sqlの最後のコマンドquit;の 実行結果を返してきているのでしょうか? SUB1.sql、SUB2.sqlで失敗していても%ERRORLEVEL%で0が返ってきます。 MAIN内のそれぞれのsqlの実行結果ログを取得することは可能でしょうか? SUB.sqlの内容はいずれも単純なMERGE文です。 識者の方がいればご教示いただきたく存じます。 よろしくお願いいたします。

  • SQLiteのデータベースについて

    PHP初心者です。以下のSQLiteより作成するデータベースについて教えてください。 $DB = sqlite_open('db1.db'); $sql="create table tables(id integer ,name,texts)"; $result=sqlite_query($db,$SQL); 上記、プログラムにより、同ディレクトリに、db1.dbが作成されますが、このデータベース情報はどのようにして、閲覧するのでしょうか(MS-ACCESS、SQLのように簡単に閲覧できないのか)。主キーやテーブルの名前またはフィールドの名前の変更、データ一覧閲覧などどのようにするのでしょうか。 環境は、Windows環境で、PHP4を使用しております。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • SQL(SQLite)である範囲のデータのみを取り出す

    SQL(SQLite)である範囲のデータのみを取り出す 実行環境はPerl5.8.9 + DBI-1.60.7、DBはSQLite です。 あるSELECT文によって十分多い(例えば100件以上の)データが取り出せるとして、 そのうち例えば41~50件目の10件だけを取り出したい場合、 どのようにするのが良いのでしょうか。 自分が思いつくのは、SELECT文をprepare,executeした後にfetchrow_arrayで 1~40件目を空読みしてから目的の10件を読み込むというやり方ですが、 もしSQL文だけで目的のデータのみ取り出せるやり方があれば教えてください。

  • SQL*Plus内でPL/SQL、SQLを実行するシェルスクリプトを書

    SQL*Plus内でPL/SQL、SQLを実行するシェルスクリプトを書いています。 イメージ sqlplus scott/tiger << EOF   declare     aaa number;   begin     -- *1     select col1 into aaa from test1;   end;   /   -- *2   define a=1   define b=1   @test.sql EOF ここで*1にて例えば複数行が返ってくるなどのエラーが 発生した場合、*2以降のSQLを実行せずにSQL*Plusから抜けたいのですが どのようにすればよいかわかりますでしょうか。 whenever sqlerror exit 255 などはPL/SQL内の論理エラーはハンドリングしてくれないようです。 よろしくお願いします。 それかdefineや@マーク指定によるsqlファイルの取り込みを PL/SQLの中で実行できる方法を教えていただく方法でも 当方が実施したいことはできるのでそれでもかまいません。

  • SQL*Plusの実行結果にSQL文も残したいです

    SQL*Plusをスクリプトファイルを使って実行した際、実行SQLの出力はできないものでしょうか? 以下のようにスクリプトファイルを使ってSQL*Plusを実行し、その結果をログファイルへ 残しています。この時ログファイルには、実行結果は出力されるのですが、実行SQLは 出力されないようです。なんとかして実行SQLと、実行結果を作業ログとして残したいと 考えているのですが、何かよい方法はないものでしょうか? [ama@rh01 test]$ sqlplus scott/tiger@orcl @test01.sql > test01.log ■環境 Red Hat Linux 4 Oracle10g ■以下test01.sqlの中身です。 ---ここから-------------- create table ex01 ( c1 number, c2 varchar2(10), c3 varchar2(40) ); insert into ex01(c1,c2,c3) values(1,'AA1','BBB1'); select * from ex01; update ex01 set c2='aa1' where c1 =1; select * from ex01; exit; ---ここまで-------------- ■以下ログファイルの中身です。 ---ここから------------------ [ama@rh01 test]$ cat test01.log 省略 With the Partitioning, OLAP and Data Mining options に接続されました。                       ←ここにcreate文を出力したいです。 表が作成されました。                       ←ここにinsert文を出力したいです。 1行が作成されました。                       ←ここにselect文を出力したいです。 C1       C2   C3 ---------- ---------- ---------------------------------------- 1        AA1   BBB1                       ←ここにupdate文を出力したいです。 1行が更新されました。                       ←ここにselect文を出力したいです。 C1      C2 C3 ---------- ---------- ---------------------------------------- 1 aa1 BBB1 Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production With the Partitioning, OLAP and Data Mining optionsとの接続が切断されました。 [ama@rh01 test]$ -------------------ここまで--------------- どなたか良いアドバイスいただけたらと思います。 どうぞよろしくお願いします。

  • SQLiteについて

    SQLiteのサンプルに、以下のような記述がありましたが extends(派生クラス) ということは元の基本クラスの記述があるということなのでしょうか? https://www.php.net/manual/ja/sqlite3.open.php /** * SQLite3 クラスを継承して __construct を変更し、 * open メソッドで DB を初期化します */ class MyDB extends SQLite3 {

    • ベストアンサー
    • MySQL
  • Oracleのデータベースに接続できない。

    OS : WindowsXP SP2 Perl : ActivePerl 5.8.8 DBD : DBD-Oracle1.17 DB : Oracle9i PerlでOracleのDBサーバに接続ができません。 ソースは以下の通りです。 ================================================================================ #!perl -w use DBI; $dbh = DBI->connect('dbi:Oracle:test', 'scott/tiger') or die "An error occured : $@"; $dbh->disconnect; exit 0; ================================================================================ 上記コードを実行すると、connectの行でdieします。 ================================================================================ D:\test>perl ttoracle.pl DBI connect('test','scott/tiger',...) failed: ORA-12705: Cannot access NLS data files or invalid environment specified (DBD ERROR: OCISessionBegin) at ttoracle.pl line 5 An error occured : at ttoracle.pl line 5. ================================================================================ Oracleのサーバーはローカルにあり、ポートもデフォルトの設定です。 試しに、 $dbh = DBI->connect('dbi:Oracle:test@localhost:1521', 'scott/tiger') or die "An error occured : $@"; としましたが、結果は同じでした。 また、エラーの内容的に環境変数かと思いORACLE_HOMEを環境変数にセットしてみましたが、これもまた、結果は同じでした。 DBの接続については、sqlplusコマンドからであれば問題なく接続できます。 (コマンド:sqlplus scott/tiger@test) やはり、環境変数まわりの設定が問題でしょうか? よろしくお願いします。

  • PLSQL キーボード入力値を引数で渡す方法

    OracleのPL/SQLで promptコマンドを使用して キーボードから日付の入力を受け付けるプログラムがあり、 SQLplusから実行しています。 このプログラムをキーボードからではなく バッチやスクリプトから日付を指定して実行する方法がわかりません。 わかる方がいれば教えてください。 PL/SQLのプログラム自体は変更をしないという要件の為 バッチやスクリプトから引数として渡せないか検討しています。