pl / sql需要在''之间放一个IN参数?

时间:2017-08-10 19:55:49

标签: sql oracle plsql

我准备了这样的存储过程(它更复杂,但概念是我需要一个动态SQL):

PROCEDURE PROCTEST(
    P_TEST                         IN     VARCHAR2,
    P_RESULT                      OUT PCK1.CURSOR
);

我要做的就是使用值(让我们说'mytest')进行选择。

MYSELECT:='SELECT * FROM MYTABLETEST WHERE MYCOL='||P_RESULT||;

问题是我收到了这个错误:

  

ORA-00911:无效字符

因为如果我打印我的选择,我得到SELECT * FROM MYTABLETEST WHERE MYCOL=mytest而不是我需要的东西:

SELECT * FROM MYTABLETEST WHERE MYCOL='mytest'

1 个答案:

答案 0 :(得分:0)

@FerdinandGaspar的答案的变体如下,可能更容易辨认:

SQL_TEMPLATE := q'[ SELECT * FROM MYTABLETEST WHERE MYCOL = '{PARAM}' ]';
MYSELECT := Replace(sql_template, '{PARAM}', p_result);

值得一提的是,这种插值方法容易受到SQL injection攻击。如果参数的数量是已知的,最好的方法是在SQL语句中使用参数(有时称为"绑定变量"),并将参数值作为EXECUTE IMMEDIATE语句的一部分传递,如下所示: / p>

MYSELECT := 'SELECT * FROM MYTABLETEST WHERE MYCOL = :param';
Execute Immediate myselect Using p_result;