dポイントプレゼントキャンペーン実施中!

PL/SQLの質問

お世話になっております。
下記の様なテーブル「試験項目マスタ」と「クラスマスタ」が二つ有り、
オラクルのPL/SQL(ストアドプロシージャ)で、
「試験項目マスタ」の登録IDと「クラスマスタ」の登録IDが同じ場合、
2A列以降に丸印を付けていきたいのですが(説明が難しく、省略してい
ますが、つまり下記の「結果」様にしたいのです。)、
どの様な記述をすれば良いのか分からず困っています。
どなたかご親切な方、ご教授頂きたく宜しくお願い致します。

      記

「試験項目マスタ」
登録ID大項目中項目小項目 2A  2B  2C  2D  2E  2F  2G  2H  2I  2J 2L
0001学科試験 国語   古文
0002学科試験 数学I
0003学科試験 数学
0004学科試験 化学
0005学科試験 世界史
0006学科試験 日本史
0007学科試験 英語   英会話
0008学科試験 体育   サッカー
0009学科試験 音楽   合唱
0010学科試験 技術


「クラスマスタ」
登録IDクラス
00012A
00012C
00012D
00012F
00012H
00012J
00022B
00022E
00022G
00022I
00022L
 ・   ・
 ・   ・
 ・   ・

 ↓ 結果


登録ID  大項目 中項目 小項目 2A  2B  2C  2D  2E  2F  2G  2H  2I  2J
0001  学科試験 国語   古文  ○      ○   ○      ○      ○     ○
0002  学科試験 数学I            ○         ○       ○      ○
0003  学科試験 数学
・    ・    ・
・    ・    ・
・    ・    ・
・    ・    ・

A 回答 (1件)

クラスマスタの登録IDクラスが試験項目マスタの登録ID(4桁)+試験項目マスタの更新カラム名(2桁)である前提で、



declare
 cursor c1 is
 select 試験項目マスタ.登録ID
    ,substr(クラスマスタ.登録IDクラス,5,2) 更新カラム
 from 試験項目マスタ
  inner join クラスマスタ
  on 試験項目マスタ.登録ID = substr(クラスマスタ.登録IDクラス,1,4)
 order by 試験項目マスタ.登録ID
 ;
 
 w_sql varchar2(4000);
begin
 for r1 in c1 loop
  w_sql := 'update 試験項目マスタ ';
  w_sql := w_sql := 'set ' || r1.更新カラム ||' = ''○''';
  w_sql := w_sql := 'where 試験項目マスタ.登録ID = ' || r1.登録ID;
  execute immediate w_sql;
 end loop;
 commit;
end;
/

とかでどうですか?
update文を登録ID毎に実行したい気もしますが、とりあえずイメージだけでも。
    • good
    • 0
この回答へのお礼

ありがとうございます。
大変参考になりました。

お礼日時:2010/09/24 22:53

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す