OMG小马是完全正确的,
,但这里只是用不同的方式做同样的事情
Var X Refcursor;
Begin
Open :X For
Select 1 Num, 'b' Co
From Dual
Union
Select 2 Num, 'c' Co
From Dual;
end;
/
print x;
时注意你在Oracle中做任何事情就像打开游标,或者你不需要在BEGIN/END之内,你不能简单地做:
Var X Refcursor;
Open X For
Select 1 Num, 'b' Co
From Dual
Union
Select 2 Num, 'c' Co
From Dual;
这不行!你必须在BEGIN/END块内封闭打开的游标(无论是一个anonomous块或程序...)
Create or replace Procedure Ccc(X Out sys_Refcursor)
As
begin
Open X For
Select 1 Num, 'b' Co
From Dual
Union
Select 2 Num, 'c' Co
From Dual;
End Ccc;
/
Var X Refcursor;
Begin
Ccc(:X);
End;
/
print x;
注意:X在anonomous块的开始/结束是告诉SQL引擎您正在使用在块外部创建的变量。在packages/procs中是没有必要的。
你[冒着注射攻击的危险](http://xkcd.com/327/)... – 2010-07-27 19:04:34
冒着生命危险,我的眼睛。诱人。 – 2010-07-27 21:18:18
@OMGPonies,@AdamMusch - 如果可以将整个字符串传递给'v_sql',SQL注入只是一个风险。在程序中组装SQL查询是完全安全的。 – APC 2010-07-28 05:18:31