简单问题 - 如果我正在尝试构建动态查询并在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
周围没有单引号。我已经尝试添加它们,但我没有做任何正确的编译。
对一个简单问题的任何帮助? 谢谢!
答案 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