質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PL/SQL

PL/SQL (Procedural Language/Structured Query Language) はOracle CorporationによるSQL(非手続き型言語)を手続き型言語に拡張させるために開発されたプログラミング言語です。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

2回答

1941閲覧

SELECT結果を変数に代入し、SELECT文のフィールドに入れて実行したい

144384

総合スコア0

PL/SQL

PL/SQL (Procedural Language/Structured Query Language) はOracle CorporationによるSQL(非手続き型言語)を手続き型言語に拡張させるために開発されたプログラミング言語です。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

1クリップ

投稿2022/07/27 15:12

以下のようなカラム名に都道府県名、それぞれのレコードに各都道府県の市区町村が入っているテーブルがあるとします。

都道府県TBL |北海道|青森県|秋田県|岩手県|山形県|・・中略・・|鹿児島県|沖縄県|  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ |札幌市|八戸市|秋田市|盛岡市|山形市|・・・・・・|鹿児島市|那覇市| |   |   |   |   |   |・・・・・・|    |   |

この中から「~県」のデータのみ取得したいのですが、ベタ打ちすると以下のようなSELECT文を書くことになると思いますが、多くのカラム名を書くことになり、
時間もかかりますし、コーディングミスすることもありそうなので別の方法を探しました。

SELECT 青森県,秋田県,岩手県,・・(中略)・・,鹿児島県,沖縄県 FROM 都道府県TBL;

調べたら先にカラム名を取得しカーソル変数に代入する手法が使えそうなことを知り、以下のように書くと
「PLS-00428: INTO句はこのSELECT文に入ります。」のエラーが出ました。

Declare Cursor City_cur Is Select column_name From all_tab_columns Where TABLE_NAME = '都道府県TBL' And column_name like '%県'; City_name City_cur%rowtype; Begin Open City_cur; Loop Fetch City_cur into City_name; Exit when City_cur%notfound; Select City_name.column_name From 都道府県TBL; End Loop; Close City_cur; End;

エラーの原因はLoop内のSelect文だとは思うのですが、どれだけ調べても解決しませんでした。
そもそもSELECT文のフィールドにカーソル変数を使うことはできるのでしょうか?

補足情報(FW/ツールのバージョンなど)

SQL Developerを使用しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sazi

2022/07/27 15:39 編集

> この中から「~県」のデータのみ取得したい 条件はどのようにするつもりですか? 出来なくはないけど、RDBを全然活かせていないので、先ずそのようなテーブルをデザインするのは間違いだと断言しておきます。 きちんと正規化しましょう。
guest

回答2

0

まず、テーブルはきちんと正規化しましょう。
都道府県テーブル

カーソルの使い方も間違っているのでは?
明示カーソル例1
明示カーソル例2

投稿2022/07/27 21:55

Orlofsky

総合スコア16415

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

PL/SQLについては詳しくないですが、プロシージャで処理するか
定形処理ならビューをつくっておけばコーディングミスのリスクは減らせると思います

投稿2022/07/28 05:44

yambejp

総合スコア114583

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問