[英]generic stored procedure in oracle
我想編寫一個接受表名作為參數的PLSQL存儲過程。 該表是源表。 現在在我的過程中,我想操作該表的字段。 EX:我想將此源表的記錄插入到另一個名為XYZ_<source table name>
目標表中。 源表和目標表的列名相同。 但是目標表中可能會有一些額外的字段。 我該怎么做? 列名的順序不同。
您將必須動態地構建INSERT語句。
create or replace procedure gen_insert
(p_src_table in user_tables.table_name%type
, p_no_of_rows out pls_integer)
is
col_str varchar2(16000);
begin
for rec in ( select column_name
, column_id
from user_tab_columns
where table_name = p_src_table
order by column_id )
loop
if rec.column_id != 1 then
col_str := col_str || ',' || rec.column_name;
else
col_str := rec.column_name;
end if:
end loop;
execute immediate 'insert into xyz_' || p_src_table || '('
|| col_str || ')'
|| ' select ' || col_str
|| ' from ' || p_src_table;
p_no_of_rows := sql%rowcount;
end;
/
顯然,您可能需要包括一些錯誤處理和其他改進。
編輯
編輯完您的問題后,我看到您對命名目標表有特殊的要求,而SO格式卻掩蓋了該目標表。
您可以使用動態SQL執行此操作。 這是有關Oracle Dynamic SQL的基本信息的鏈接
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.