• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:テーブルの列名をデータとして設定しておき取得する)

テーブルの列名をデータとして設定しておき値を取得する方法

このQ&Aのポイント
  • テーブルAとテーブルBのキーを指定して、テーブルAの列名を元にテーブルBから値を取得する方法について紹介します。
  • テーブルAにはテーブルBの列名がデータとして登録されており、テーブルBには値が格納されています。
  • テーブルAとテーブルBを結合して、1回のSQLで値を取得する方法も紹介します。

質問者が選んだベストアンサー

  • ベストアンサー
  • dda167
  • ベストアンサー率76% (55/72)
回答No.3

え~と・・・時間ができたので(笑)SQL版をば -- keyの設定(SQL*Plusでの実行を想定) VARIABLE v_key NUMBER EXECUTE :v_key := 1 -- なんか…無理矢理だな~、DB設計が悪いんだよな(笑)版 SELECT MAX(CASE WHEN A.fno = 1 THEN B.fvalue END) AS field1, MAX(CASE WHEN A.fno = 2 THEN B.fvalue END) AS field2, MAX(CASE WHEN A.fno = 3 THEN B.fvalue END) AS field3 FROM ( SELECT 1 AS fno, field1 AS fname FROM テーブルA WHERE key = :v_key UNION ALL SELECT 2 AS fno, field2 AS fname FROM テーブルA WHERE key = :v_key UNION ALL SELECT 3 AS fno, field3 AS fname FROM テーブルA WHERE key = :v_key ) A, ( SELECT 'item1' AS fname, item1 AS fvalue FROM テーブルB WHERE key = :v_key UNION ALL SELECT 'item2' AS fname, item2 AS fvalue FROM テーブルB WHERE key = :v_key UNION ALL SELECT 'item3' AS fname, item3 AS fvalue FROM テーブルB WHERE key = :v_key UNION ALL SELECT 'item4' AS fname, item4 AS fvalue FROM テーブルB WHERE key = :v_key UNION ALL SELECT 'item5' AS fname, item5 AS fvalue FROM テーブルB WHERE key = :v_key ) B WHERE A.fname = B.fname / 「動的SQL」をオススメします。

evaag777
質問者

お礼

お返事が遅くなりました。 解決しました。 どうも、ありがとうございます。

その他の回答 (2)

  • dda167
  • ベストアンサー率76% (55/72)
回答No.2

イメージですか? set serveroutput on DECLARE v_recA テーブルA%ROWTYPE; V_sql VARCHAR2(1000); v_ret1 NUMBER; v_ret2 NUMBER; v_ret3 NUMBER; BEGIN v_sql := 'SELECT * FROM テーブルA WHERE key = :key'; EXECUTE IMMEDIATE v_sql INTO v_recA USING 1; v_sql := 'SELECT '||v_recA.field1||','||v_recA.field2||','||v_recA.field3||' FROM テーブルB WHERE key = :key'; EXECUTE IMMEDIATE v_sql INTO v_ret1, v_ret2, v_ret3 USING 1; DBMS_OUTPUT.PUT_LINE(v_ret1||','||v_ret2||','||v_ret3); END; / 「動的SQL」について詳しいことを知りたければ「ORACLE 動的SQL」でGOOGLE先生に訊いてください。 無理をしてSQLでできないこともないと思いますが (パズルとしては面白いかもしれませんが、時間がないので…) 「動的SQL」を使うほうが素直で無難だと思います(初心者ならなおさら)。

  • dda167
  • ベストアンサー率76% (55/72)
回答No.1

「動的SQL」を使うのはヤダ! ってことですか?

evaag777
質問者

補足

初心者ですみません。 動的SQLで列名自体を変える事も可能って事でしょうか? たとえば、どういうイメージになりますでしょうか?

関連するQ&A