PL / SQL Dynamic Where子句 - 围绕动态字符串的单引号?

时间:2013-06-04 15:24:41

标签: sql oracle plsql

简单问题 - 如果我正在尝试构建动态查询并在PL / SQL存储过程中运行它,如何将变量括在单引号中以便正确调用它?

例如:

我首先声明一个变量来保存游标的列值。我还声明了一个变量来保存动态查询:

vTest VARCHAR(200);
l_cur_string VARCHAR2(128);

定义光标后,我像这样循环遍历:

For entry in c1
LOOP
vTest:= entry.variable;

 l_cur_string := 'SELECT ex1, ex2FROM exTable WHERE col1= || vTest;
END LOOP;

当然,当我打印出动态查询时,vTest周围没有单引号。我已经尝试添加它们,但我没有做任何正确的编译。

对一个简单问题的任何帮助? 谢谢!

2 个答案:

答案 0 :(得分:7)

将要在字符串中显示的单引号加倍:

l_cur_string := 'SELECT ex1, ex2FROM exTable WHERE col1= '''|| vTest || '''';

但请记住,直接在SQL表达式中嵌入字符串是一种利用漏洞的快速途径。

答案 1 :(得分:1)

试试这2个片段


    DECLARE @sqlCommand varchar(1000)
    DECLARE @columnList varchar(75)
    DECLARE @city varchar(75)
    SET @columnList = 'CustomerID, ContactName, City'
    SET @city = '''London'''
    SET @sqlCommand = 'SELECT ' + @columnList + ' FROM customers WHERE City = ' + @city
    print @sqlCommand
    --EXEC (@sqlCommand)


    DECLARE @sqlCommand nvarchar(1000)
    DECLARE @columnList varchar(75)
    DECLARE @city varchar(75)
    SET @columnList = 'CustomerID, ContactName, City'
    SET @city = 'London'
    SET @sqlCommand = 'SELECT ' + @columnList + ' FROM customers WHERE City = @city'
    print @sqlCommand
    --EXECUTE sp_executesql @sqlCommand, N'@city nvarchar(75)', @city = @city