• 締切済み

【PL/SQL】FROM区に変数を使う方法

はじめまして。 通常FROM区には抽出するテーブル名を列挙すると思いますが、 ここにテーブル名の変わりに変数名(レコードの配列)などを使うことは可能でしょうか? やりたいことは、最初にプログラム内で頻繁に使用するクエリ結果を保存しておき、その後保存しておいた結果をプログラムのいろいろなクエリで使用します。 諸事情により一時表などは使えません。 よろしくお願いします。

  • Oracle
  • 回答数1
  • ありがとう数2

みんなの回答

  • hiro_sun
  • ベストアンサー率27% (14/51)
回答No.1

単純にFROM句に書いてもエラーになるので、動的SQLでやる方法ですかね。 SQL文を文字列として格納する変数を用意して、その文字列にFROM句が入ってる文字列を連結します。 その文字列をEXECUTE IMMEDIATEで実行すればできると思います。 配列の場合は、配列のどの要素がしっかりと明記してください。 例) VAR_TEST VARCHAR2(10); VAR_SQL VARCHAR2(1000); VAR_TEST := 'TABLE_A'; VAR_SQL := NULL; VAR_SQL := 'SELECT * FROM ' || VAR_TEST; EXECUTE IMMEDIATE(VAR_SQL); このままだと、SELECT文を実行するだけなので、INSERT文などに応用するなどしてみてください。 カーソルを動的にする場合はちょっとめんどくさいです。 その場合は、「カーソル 動的」などで検索してみてください。 頑張ってください。

関連するQ&A

  • SQL文に変数を埋め込む場合の方法

    //config.php //$table = "TableName"; 1:require "config.php"; 2:$sql = "SELECT " . $fld . " AS genre, 3: COUNT(*) AS cnt FROM TableName GROUP BY " . 4:$fld; $res = mysql_query($sql, $conn) or die("Data抽出エラー"); 上記のソースを 2:$sql = "SELECT " . $fld . " AS genre, 3: COUNT(*) AS cnt FROM " . $table . " GROUP BY " . $fld; 4: $res = mysql_query($sql, $conn) or die("Data抽出エラー"); この様にして、config.phpより、テーブル名を変数として読み込みたいのですが、エラーになってしまいます。 3行目をどのように記述すればよいのでしょうか?

    • ベストアンサー
    • PHP
  • SQLの性能

    クエリアナライザで実行すると30秒くらいかかるようなSQLがあるのですが、修正の余地について教えてください。 抽出元となるテーブルのレコード数が多くても、クエリの書き方やインデックスの張り方で速くなるのは知っていますが、限界はないのでしょうか? 単純に抽出元となるテーブルのレコード数が多いことが原因なのか、クエリやインデックスが原因なのかを判断する方法を教えてください。

  • ACCESSのクエリ、SQLに変数を使うのに??

    いつもお世話になっております。 ACCESS初心者です。行き詰ったため質問いたします。 どうか、ご教授お願いします。 アクセスのInsertクエリ実行時に変数を持たせたいです。 VBAコードにて、配列で格納している社員IDを1件ずつループして SyainCDにいれます。そこでSyainCDに値が入るたび、 SyainCDをWhere条件として、InsertSQLを実行したいです。 ■CODE■ SyainCD = SyainId(i) ※コード上ではSyainCDにきちんと値が 入ってきていることは確認済です。 また、SagyoYMD()というユーザ関数を用いて 作業日を取得する関数は正常に取得できます。 関数ではなく、コードの中の変数をSQLに組み込むことは 不可能なのでしょうか?? 実行するとエラーではなく、ダイアログでSyainCD を入力要求 が表示されてしまいます。。。。 ■実行クエリ INSERT INTO wrk_マスタテーブル SELECT * FROM [SELECT qry_ユニオンリンクテーブル.社員CD, qry_ユニオンリンクテーブル.作業日, Q_部署テーブル.部署名 FROM (Q_部署テーブル INNER JOIN ユニオンリンクテーブル ON Q_部署テーブル.社員CD = qry_ユニオンリンクテーブル.社員CD) ]. AS マスタテーブル WHERE マスタテーブル.社員CD = SyainCD AND マスタテーブル.作業日 = SagyoYMD(); よろしくお願いします。

  • AccessのクエリでvbLfのみ抽出するには

    Access2010のクエリー(SQL)で vbLfかvbCrLfが含まれているレコードを抽出するには、 SELECT [テーブル1].* FROM テーブル1 WHERE [テーブル1].フィールド1 Like "*" & Chr(10) & "*"; vbLfが含まれているレコードは抽出せず、 vbCrLfが含まれているレコードだけを抽出するには、 SELECT [テーブル1].* FROM テーブル1 WHERE [テーブル1].フィールド1 Like "*" & Chr(13) & Chr(10) & "*"; でよいと思いますが、 vbCrLfが含まれているレコードは抽出せず、 vbLfが含まれているレコードだけを抽出するには、 どのように記述すればよいのでしょうか。 よろしくお願いします。

  • アクセスVBA テーブル名を変数とするクエリ実行・エクスポート

    テーブル X(フィールド1~30)を対象とするクエリ Yがあります。 クエリ Yは、フィールド1の値が BBBであるレコードの、フィールド3、5、7を抽出します。 クエリ Yの実行結果をエクセルファイル Zにエクスポートします。 Xと同一の構成である X1~X10という複数のテーブルから一つを選択して、クエリYを実行し て、エクセルファイル Zにエクスポートしたいのですが、VBAでは、どのように記述するのでしょうか? フォーム Fのテキストボックス Tに入力して、テーブルを指定(変数)したいのです。 上記が可能な場合、続けて Zにエクスポートすることはできるのでしょうか? エクスポート用のテーブルを一時的に作成しなければならないのでしょうか? 説明下手で申し訳ございません。お手数ですが、ご教示ください。よろしくお願いします。

  • 抽出した行数を変数に入れたい(オラクルSQL)

    SELECTで抽出した行数を変数に格納したいのですが、上手くいきません。 SQLにあまり経験がなく、ネットで調べながら実践しております。 例えば以下の簡単なSQLを作ったとして、 ---------------------------------------------------- SELECT a,b,c,d,e,f FROM table WHERE c=10 AND e=20; ---------------------------------------------------- ここで抽出した行数を取得し、それを変数に入れたいと思っております。 というのも、後々、抽出したデータの行数を表示したい場合に SELECT COUNT(*) FROM table WHERE c=10 AND e=20; というSQLをその都度入力していては非効率だと思ったからです。 そこで抽出する際に行数を取得し、それを変数に格納して、 行数を表示する処理が今後必要になった際に、その変数を表示すれば良いと考えました。 ですがネットで変数のことを調べた際に VARやDEFINE等のコマンドを見つけましたが、SQLを実行しても上手くいきません。 最初に記載したSQLに、どのような構文を入れたら良いのでしょうか。

  • SQL文で

    DBはアクセス97を使用しております。 メールTo_Fromクエリ Key From FromDomain To ToDomain      To2    ToDomain2  1 name1 abc.co.jp   To1 abc.co.jp  2 name2 abc.co.jp   To2 customer.com  Toname4 jogai_2com  3 name3 abc.co.jp   To3 jogai_3.com 除外ドメインリストテーブル jogai_1.co.jp jogai_2.net jogai_3.com 上記のような『メールTo_From』クエリの「ToDomain、ToDomain2・・・」から 除外ドメインリストテーブルにひとつでも該当するものは含まない レコードを抽出したいと思ってます。 何か良いSQL文はありませんでしょうか?

  • Accessのフォームヘッターに表示されるレコード件数を表示させることは可能でしょうか?

    Access2003を使用しています。 お客様からの問い合わせを記録しているテーブルがあります。テーブル名:T対応記録 それを月単位で表示できるフォームを作りました。フォーム名:F対応履歴_月単位抽出 (レコードソースはT対応記録から作ったクエリです。パラメータクエリで発生日でyyyy/mm形式で抽出できるようにしました。) 詳細には抽出月のレコードが表示されます。 そのフォームヘッターに、抽出レコードの総件数を表示させたいのですが、可能でしょうか? レコードセレクタは非表示にしたく、そうするとレコード件数も表示されなくなってしまうので、その変わりにフォームヘッターに表示をさせたいのです。 どなたかご存知の方がいらっしゃいましたらご教示いただきますようお願いいたします。

  • SQLで複数テーブルの変数を1つにまとめる方法

    MySQL 5.5を使用しています。 以下のテーブルA、B(同じ構造でIDは重複しない)において A ID | ポイント 1 | 10 3 | 20 5 | 5 6 | 5 B ID | ポイント 2 | 20 4 | 20 7 | 5 select ID,hoge from A,B; とすると、 A.ID | B.ID | A.hoge | B.hoge 1 |. | 10 |. . | 2 |. | 20 3 |. | 20 |. . | 4 |. | 20 5 |. | 5 |. 6 |. | 5 |. . | 7 |. | 5 という結果が得られますが、これを ID2| foo 1 | 10 2 | 20 3 | 20 4 | 20 5 | 5 6 | 5 7 | 5 という形に同一の変数にまとめるにはどうすればいいでしょうか。 select A.ID as ID2, B.ID as ID2 from A,B; のようにasを使用して1つの変数を作成しようとしましたが、別の変数として 認識されていまいました。

    • ベストアンサー
    • MySQL
  • PL/SQLのエイリアス名

    PL/SQLのSELECT文で列を抽出する際に、エイリアス名として 不等号(<もしくは>)を含む名前を指定したいのですが、可能でしょうか? 例えば、テーブルTEMPから列Aを抽出し、エイリアス名として <A> を 指定するとします。以下のように実行しましたが、いずれも正常実行されませんでした。 SELECT A <A> FROM TEMP SELECT A '<A>' FROM TEMP SELECT A \<A\> FROM TEMP 何か良い方法をご存知であれば、教えて頂けると有り難いです。