簡體   English   中英

oracle中的通用存儲過程

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM