PL/SQLでの処理について
キーの異なる2つのトランザクションテーブルA,Bに
マスタCの値を引っ張ってきて各A,B埋める処理を、テーブル名を引数にPL/SQLのプロシージャにしたいのですが、良い方法はありますか?
以下のイメージです。
<TABLE A>
KEY_A C_CD C_VALUE
-----+----+-------
1 3
2 3
3 1
<TABLE B>
KEY_B C_CD C_VALUE
-----+----+-------
1 3
2 3
3 1
<TABLE C>
C_CD C_VALUE
----+--------
1 A
2 B
3 C
SQL>EXECUTE foo('A');
<TABLE A>
KEY_A C_CD C_VALUE
-----+----+-------
1 3 C
2 3 C
3 1 A
SQL>EXECUTE foo('B');
<TABLE B>
KEY_B C_CD C_VALUE
-----+----+-------
1 3 C
2 3 C
3 1 A
<処理イメージ>
CREATE OR REPLACE PROCEDURE FOO(TNAME VARCHA2)
IS
c_cd NUMBER;
C1 INTEGER;
SQL1 VARCHAR2(2000);
I INTEGER;
BEGIN
SQL1 := 'SELECT c_cd FROM ' || tname;
C1 := DBMS_SQL.OPEN_CURSOR;
DBMS_SQL.PARSE(C1, SQL1, DBMS_SQL.V7);
DBMS_SQL.DEFINE_COLUMN(C1, 1, c_cd);
LOOP
IF DBMS_SQL.FETCH_ROWS(C1) > 0 THEN
DBMS_SQL.COLUMN_VALUE(C1, 1, c_cd);
UPDATE tname set value = c_cd;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
↑ここの部分をうまくかけないでしょうか?
ELSE
EXIT;
END IF;
END LOOP;
end
/
お礼
回答ありがとうございました。