Oracle Plsql动态选择作为参数

时间:2017-10-26 18:03:38

标签: oracle dynamic plsql bind

我有一个procedure A,它将select语句作为参数,但我希望我的select是动态的。

Proc A (query);


Proc B is
Declare
-- try 1 using variables
q varchar2(200):= 'select xy from table where col =' || var ;

-- try 2 using bind
q varchar2(200):= 'select xy from table where col = :v' ;

Begin

-- here i want to be able to define a variable based on certain conditions and my string q will take the variable.

A(q);

End;

这可能吗? 有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

CREATE OR REPLACE PROCEDURE Proc_A (in_query varchar)
IS
BEGIN
  execute immediate in_query;
END;
/

CREATE OR REPLACE PROCEDURE Proc_B 
IS
  col_val varchar2(60) := 'Lady Gaga';
  q varchar2(200):= 'select * from test_table where char_col =''' || col_val || '''';
Begin
  Proc_A(q);
End;
/

begin
  Proc_B;
end;

但显然对于选择你需要拿起结果集。 DML(插入/删除/ ...)将按照描述工作。