0

簡単な質問 - 動的クエリを作成して 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。それらを追加しようとしましたが、正しくコンパイルされません。

簡単な質問の助けはありますか?ありがとう!

4

2 に答える 2

8

文字列内に表示する単一引用符を二重にします。

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

ただし、文字列を SQL 式に直接埋め込むと、悪用への近道になることを忘れないでください。

于 2013-06-04T15:28:45.780 に答える
1

これらの 2 つのスニペットを試してください

    DECLARE @sqlCommand varchar(1000)
    DECLARE @columnList varchar(75)
    DECLARE @city varchar(75)
    SET @columnList = 'CustomerID, ContactName, City'
    SET @city = '''ロンドン'''
    SET @sqlCommand = 'SELECT ' + @columnList + ' FROM customers WHERE City = ' + @city
    出力 @sqlCommand
    --EXEC (@sqlCommand)


    DECLARE @sqlCommand nvarchar(1000)
    DECLARE @columnList varchar(75)
    DECLARE @city varchar(75)
    SET @columnList = 'CustomerID, ContactName, City'
    SET @city = 'ロンドン'
    SET @sqlCommand = 'SELECT ' + @columnList + ' FROM customers WHERE City = @city'
    出力 @sqlCommand
    --EXECUTE sp_executesql @sqlCommand, N'@city nvarchar(75)', @city = @city

于 2013-06-04T15:28:21.577 に答える