我有执行选择的程序:
PROCEDURE Test (colValue IN VARCHAR2)
IS
vINS VARCHAR2(32000) := 'select * from abc.table where col10 = colValue';
BEGIN
EXECUTE IMMEDIATE vINS;
END;
但我不确定参数colValue是否在 Select 中正确使用,
也许应该像:=colValue?
您可以连接变量 ( || )。
编辑:正如 mathguy 所指出的,由于您正在使用一个VARCHAR2
变量,您需要用额外的引号将其括起来。显然,对于数字变量,这不是必需的。
PROCEDURE Test (colValue IN VARCHAR2)
IS
vINS VARCHAR2(32000) := 'select * from abc.table where col10 = ''' || colValue ||'''';
BEGIN
EXECUTE IMMEDIATE vINS;
END;
事实证明,在您的情况下使用绑定变量非常有效。但是,如果您动态使用 TABLE 名称、COLUMN 名称,则必须坚持连接,因为
表名和列名不能作为绑定变量传递
vINS VARCHAR2(32000) := 'select * from abc.table where col10 = :var';
EXECUTE IMMEDIATE vINS USING colValue;
但是,EXECUTE IMMEDIATE
如果您不将结果存储到变量或集合中,则在 中运行 select 语句是没有用的。您可以使用REF CURSOR
out 变量,打印结果。
PROCEDURE Test (colValue IN VARCHAR2, vINS OUT SYS_REFCURSOR)
IS
BEGIN
OPEN vINS FOR select * from abc.table where col10 = colValue;
END;
VARIABLE x REFCURSOR;
EXECUTE Test ('Value',:x);
PRINT x;
如果您在 Oracle 12c 中工作,则可以使用 DBMS_SQL.return_result
PROCEDURE Test (colValue IN VARCHAR2 )
IS
l_cursor SYS_REFCURSOR;
BEGIN
OPEN vINS FOR select * from abc.table where col10 = colValue;
DBMS_SQL.return_result (l_cursor);
END;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句