如何在查询中使用过程参数

时间:2009-02-28 12:47:24

标签: sql oracle merge upsert

如何使用查询来访问同一过程中的过程参数
例如:参见此程序

procedure game(left in tab.left%type,right in tab.right%type,...)  
is  
--some local variables  
begin  
merge into tgt_table
using subquery --(here is what i need to use the parameters)  
on some condition  
when matched then  
update the tgt table  
when not matched then  
insert the table;  
end game; 

在上面的过程和merge语句中,我需要一个查询,使得它使用参数值作为表引用,并使用这些值根据给定的条件更新或插入表中。

请帮帮我。提前致谢

2 个答案:

答案 0 :(得分:1)

如果参数定义了要使用的表,则需要使用动态SQL,例如:

procedure game(left in tab.left%type,right in tab.right%type,...)  
is  
    --some local variables  
    l_sql long;
begin  
    l_sql := 'merge into tgt_table'
             || ' using ' || left
             || ' on some condition'  
             || ' when matched then'  
             || ' update ' || right
             || ' when not matched then'  
             || ' insert the table';  
    execute immediate l_sql;
end game;

但是,您还有很多工作要做,因为条件,更新和插入子句都需要根据使用的表进行更改。我不相信这种采购事实上会特别有用。

答案 1 :(得分:0)