LinuxでshellからSQLを実行して、実行した結果をCSV出力したいです。
外部からtest.scvを読み込む
test.csvの中身は下記のような感じです
select fruit.ID,fruit.NAME,PRICE.PRICE from fruit JOIN PRICE ON fruit.ID = PRICE.ID;
select fruit.ID,fruit.NAME,PRICE.PRICE from fruit JOIN PRICE ON fruit.ID = PRICE.ID ORDER BY fruit.ID DESC;
select PRICE.ID,PRICE.PRICE,CODE.p_code from PRICE JOIN CODE ON PRICE.ID = CODE.ID;
これを一行読み込んで(select fruit.ID,fruit.NAME,PRICE.PRICE from fruit JOIN PRICE ON fruit.ID = PRICE.ID;)
oracleにログイン
sqlplus /nolog
conn ユーザ名/pass
読み込んだ行のSQL実行して実行結果をcsvに出力、ここまでが一行目の流れです。
このようにtest.csvに書き込まれているSQLの分だけ実行して新しくcsv出力したいと思っています。
どのようにしたら実現できるのかコマンド等を教えていただけるとありがたいです。よろしくお願いします。
追記:
現状
少し変わるのですが、
test.csvの中身
name(csv出力する際のファイル名),select fruit.ID,fruit.NAME,PRICE.PRICE from fruit JOIN PRICE ON fruit.ID = PRICE.ID;
name(csv出力する際のファイル名),select fruit.ID,fruit.NAME,PRICE.PRICE from fruit JOIN PRICE ON fruit.ID = PRICE.ID ORDER BY fruit.ID DESC;
name(csv出力する際のファイル名),select PRICE.ID,PRICE.PRICE,CODE.p_code from PRICE JOIN CODE ON PRICE.ID = CODE.ID;
一行抽出 name(csv出力する際のファイル名),select fruit.ID,fruit.NAME,PRICE.PRICE from fruit JOIN PRICE ON fruit.ID = PRICE.ID;
(まずここができない)
nameとSQLをそれぞれ変数に入れて
name=name(csv出力する際のファイル名)
sql=select fruit.ID,fruit.NAME,PRICE.PRICE from fruit JOIN PRICE ON fruit.ID = PRICE.ID;
oracleにログインした後、@$sql でSQLを実行
出力する際にnameでファイル名を指定 最初に戻り次の行の処理みたいな流れを考えてます
追記②
皆さん回答ありがとうございました
いろいろと試して解決しました 時間があるときに解決方法を記載します
回答2件
あなたの回答
tips
プレビュー