
こんばんわ!
PL/SQLの超初心者なのですが、以下ように「aaa」という変数に一つ目のselect文の結果を代入して、二つ目のselect文のテーブルにその名前を当てはめたいだけなのです。
DECLAER
aaa VARCHAR2(30)
BEGIN
select max(TABLE_NAME) into aaa from ALL_TABLES Like '***';
select * from aaa
END;
ところが、結果は「表またはビューが存在しません」となります。
このような使い方はできないのでしょうか?
どなたかご教示いただけませんでしょうか?宜しくお願いします。
No.4ベストアンサー
- 回答日時:
>column aaa_ren new_value vaaa NOPRINT
先にバインド変数の:aaaにテーブル名を入れたので、
それをsqlplusの置換変数のvaaaに入れるために行っている
ことで、「列aaa_renの内容をvaaaにセットします」と宣言しています。
>select :aaa aaa_ren from dual;
そのあとで:aaaの列名をaaa_renとしてselect文を実行すると、selectが実行され、その結果がvaaaに入ります。
Oracleの場合は、from句がないとselect文は実行できないので、
テーブルでなく変数などをselectしたい場合は、「from dual」とつけるのが普通です(select sysdate from dualなどと同じ)。
>select * from &vaaa
めでたくvaaaにテーブル名が入ったので、その内容を使ってselect文を実行します(置換変数は&付で記載します)。
念のため10gで確認してから書いたので、別に例じゃないですよ。
そのままやれば動くとおもいますけどね。
No.3
- 回答日時:
とりあえずPL/SQLの無名ブロック内で単純にSELECTを書いてもダメというのは理解しましたよね。
(PL/SQL内でのSELECT文は変数に値を入れるために使うので、「INTO句はこのSELECT文に入ります」というエラーメッセージがでます)
なので、目的が単にsqlplusでSELECTするだけなら、この方法でできなくはない、という前提で書きます。
とりあえず変数は3種類あると思ってください。
1)PL/SQLの変数 (DECLAREで定義するもの)
2)PL/SQLでもsqlplusでも使える変数(バインド変数)
3)sqlplusでしか使えない変数(置換変数)
で、今回のケースは1)はつかっていないです。
SELECT * FROM (変数)とできるのは、3)だけです。
ただし、ここに直接テーブル名をセットできないので、PL/SQLの無名ブロック内で一度バインド変数:aaaに入れて、これをSQLPlusの置換変数&vaaaに渡しています。
こういう書き方にすればよかったですかね。
SQL>variable aaa varchar(30)
SQL>BEGIN
2 SELECT select max(TABLE_NAME) into :aaa from ALL_TABLES Like '***';
3 END;
4 /
PL/SQLプロシージャが正常に完了しました。
SQL>column aaa_ren new_value vaaa NOPRINT
SQL>select :aaa aaa_ren from dual;
SQL>select * from &vaaa;
この回答への補足
ご回答ありがとうございます!
「PL/SQLプロシージャが正常に完了しました。」までは正常にいきましたが、
↓ここからが理解できません。
SQL>column aaa_ren new_value vaaa NOPRINT
columnとnew_valueは調べれましたが、「aaa_ren」と「vaaaa」は何でしょうか?別の変数名ですか?適当に別の変数名を指定してみましたが、「不明なcolumnオプションです。」が出てきます。
SQL>select :aaa aaa_ren from dual;
↑「dual」を指定するのでしょうか?これは単なる例なのでしょうか?
知識不足で大変申し訳ありませんがご教授お願い致します。
No.2
- 回答日時:
sqlplusでできればいいんですか?
sqlplusの置換変数を使う方法なら、できなくはないです。
variable aaa varchar(30)
BEGIN
SELECT select max(TABLE_NAME) into :aaa from ALL_TABLES Like '***';
END;
/
column aaa_r new_value vaaa NOPRINT
select :aaa aaa_r from dual;
select * from &vaaa;
この回答への補足
ご回答ありがとうございます。
ただスミマセンが私のレベルが低くて申し訳ないのですが、よく理解できません。どれがテーブルの変数でどれが置換変数なのでしょうか?
No.1
- 回答日時:
今回のエラーは、テーブル名を変数として扱うことはできないことが原因なので、動的クエリにしないとエラーは解消しません。
EXECUTE IMMEDIATE 'select * from ' || aaa;
上記に変えればエラーはでませんが、結果は返りません。
そもそもPL/SQLの無名ブロック内でSELECT文を実行して結果を表示させるという考え方自体を改める必要があると思いますよ。
(SQL ServerのTransact-SQLとは違いますので)
結果はカーソルを使って、DBMS_OUTPUT.PUT_LINEで表示させるのが一般的だと思います。
この回答への補足
ご回答ありがとうございます。
では一つ目のSelect文で返ってきた結果のテーブルを別のSelect文で使用したい場合はどのような方法がありますでしょうか?
ご存知でしたらご教示いただけませんでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHP MySql ページング 2 2022/09/20 06:38
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
- Oracle sqlで質問です。 aテーブルとbテーブルがあり、下記のsqlで取得したidとnameに一致しないレ 1 2022/04/20 20:34
- MySQL SQLです。下記の問合せを行うクエリを、PhpMyAdminで作成して実行せよ。 「昨年の各月の総降 1 2023/07/01 00:32
- MySQL SQLです。こんな感じですか?あってますか? うまくいきません教えてくださいお願いします 1 2023/07/08 15:27
- MySQL 書籍の内容はまともでしょうか? 1 2023/01/22 03:07
- MySQL うまくいきません教えてくださいお願いしますSQLです。クエリ構文です。 1 2023/07/07 12:39
- PostgreSQL postgreSQL カラムの全ての値を取得したい 3 2022/10/07 12:33
- Oracle SQL update方法 2 2022/06/22 14:07
- PHP 重複を防ぐ記述について教えて下さい。 3 2023/04/03 14:35
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
レコードが選択されないときの...
-
あるカラムのMAX値+1をINSERTし...
-
GROUP BYを行った後に結合した...
-
ファイル書込みで一行もしくは...
-
Oracleでの文字列連結サイズの上限
-
Recordset.FindFirstについて
-
MERGE文を単体テーブルに対して...
-
DataGridViewの、選択されてい...
-
使うべきでない文字。
-
決定性有限オートマトン
-
select insertで複数テーブルか...
-
最新の日付とその金額をクエリ...
-
Accessで別テーブルの値をフォ...
-
レコードが存在しなかった場合
-
固有レコード識別子の選択とは
-
エクセル関数 文字(ハイフン...
-
OracleのSQL*PLUSで、デー...
-
SELECTの結果で同一行を複数回...
-
GROUP BYを使ったSELECT文の総...
-
Date型にNULLをセットしたい V...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
あるカラムのMAX値+1をINSERTし...
-
レコードが選択されないときの...
-
ループの仕方
-
複数行を1行にするSQL
-
DB2の行指定検索SQLについて
-
SQLPLUSにて演算子を使う方法と...
-
テーブル結合について、下記SQL...
-
sqlのwhereで指定した条件の前...
-
Oracle 9iで英字を含まないレコ...
-
外部結合に条件をつけたい
-
sumやcount関数について
-
PL/SQLの基礎的な質問ですが・・
-
OracleSqlで『RORNUM...
-
ORACLEのSQLで
-
複数条件に当てはまる行の抽出...
-
同一データの抽出の方法について
-
SQLのとり方を知りたいです。
-
Oracle8iでSQL文の引数について
-
SQL:外部結合について
-
SELECT文でINを使わずに検索したい
おすすめ情報