こんにちは私のプロジェクトでは、別のリンクデータベースからデータをコピーして新しいステージングテーブルを作成しています。私はテーブルSTG_ABC_EMPTABLE、STG_ABC_DEPTTABLE、..........などの名前を付けましたが、私が引っ張っているソースDBはemployee_EMP、department_DEPTのような名前になっています。私はそれをそのままテーブルを挿入し、挿入時にいくつかの列を追加するPL/SQLブロックを作成しようとしています。私はすべてのソーステーブルをループして余分な列を追加してターゲットにデータを挿入することができるステートメントを思いつくことはできません。また、私のテーブルは、各テーブルの2つの余分な列を持つソーステーブルから作成されます。また、STG_ABC_EMPTABLEにemployee_EMP、STG_ABC_DEPTTABLEにdepartment_DEPTを挿入する方法もわかりません。ここには私が思いついたものがありますが、それを完了しようとしていました。別のリンクデータベースで複数のテーブルを使用して複数のテーブルにデータを挿入しよう
set SERVEROUTPUT ON;
DECLARE
cursor c1 IS
select distinct A.table_name as table_name_S,B.table_name as table_name_T from [email protected]_link A inner join (select distinct table_name from all_tab_columns where table_name like 'STG_%') B
ON A.table_name LIKE '%' || substr(B.table_name,9,3) || '' where A.owner in('source');
v_count number;
time_rec timestamp;
c_source_GC varchar2(28) := 'XYZ';
BEGIN
v_count:=0;
for items in c1
LOOP
Execute immediate 'insert into '|| items.table_name_T ||
'(select ' || items.table_name_S || '.*,'
|| c_source_GC || ' as SOURCE_SYSTEM,
current_timestamp as DATE_LOADED_TIMESTAMP
from gntc.' || items.table_name_S ||'@db_link)';
v_count:= sql%Rowcount;
dbms_output.put_line('Number of rows inserted '||v_count||' into '|| items.table_name_T);
END LOOP;
commit;
end;
コードはまったく動作していますが、エラー/誤った動作は何ですか? –
@TedFilippidisカーソルを使用してコードを更新しました。「ORA-00904:「XYZ」:無効な識別子 ORA-06512:行13」 – Auguster
動的SQLの構文エラーについては、生成されたSQL文ブロック内でローカルの 'exec_sql'プロシージャを定義し、生成されたSQLをそれに渡します。どちらもデバッガに優しいものです。 –