如果我有這樣的 pl/sql 陳述句,這個問題會讓我發瘋
stmt:= 'INSERT INTO myTable (blah, blah, blah, blah) values(blah, blah, blah, ''SELECT id FROM myTable where rownum < 100000 AND stop=F)';'',blah,blah,blah)';
如何使 stop=F 變為 stop='F' 并在頂部添加逗號,以便在獲取正確的行時將其用作查詢?
此時查詢將是
SELECT id FROM myTable where rownum < 100000 AND stop=F;
但應該是
SELECT id FROM myTable where rownum < 100000 AND stop='F';
謝謝;
我知道這可能真的很愚蠢,但我不知道是什么,我嘗試過:
''SELECT id FROM myTable where rownum < 100000 AND stop=''F'')';''
''SELECT id FROM myTable where rownum < 100000 AND stop='''F''')';''
但似乎沒有任何作業我總是在 sql developer 中得到一個缺少逗號的錯誤;
真的很感謝大家!
uj5u.com熱心網友回復:
你很接近這些例子,你想要的是:
select 'SELECT id FROM myTable where rownum < 100000 AND stop=''F'');'
from dual
您只需要一個單引號來開始/結束您的字串。雙引號將在該字串中插入引號。
您之間還有一個額外的單引號,)并且;過早地結束了您的字串。
uj5u.com熱心網友回復:
使用引號創建文本文字的正確方法是使用Q-quoting,您不需要重復引號并且可以按原樣使用文本:
select q'$ select 'text literal as is' from something$' as str from dual union all select q'$string with repetition of two '', three ''', four '''' and more quotes$' as str from dual| 字串 | | :------------------------------------------------ -------------------- | | 從某事中選擇“文本文字原樣”| | 重復兩個 ''、三個 '''、四個 '''' 和更多引號的字串 |
db<>在這里擺弄
uj5u.com熱心網友回復:
使用系結變數而不是嘗試將子查詢嵌入到陳述句中:
DECLARE
stmt VARCHAR2(4000) := 'INSERT INTO myTable (col1, col2, col3, col4)
VALUES (:1, :2, :3, :4)';
blah VARCHAR2(20) := 'blah';
BEGIN
EXECUTE IMMEDIATE stmt
USING blah,
blah,
'SELECT id FROM myTable where rownum < 100000 AND stop=''F'')',
blah;
END;
/
或者,沒有動態 SQL 并使用 PL/SQL 變數:
DECLARE
blah VARCHAR2(20) := 'blah';
qry VARHCAR2(200) := 'SELECT id FROM myTable where rownum < 100000 AND stop=''F'')';
BEGIN
INSERT INTO myTable (
col1, col2, col3, col4
) VALUES (
blah, blah, qry, blah
);
END;
/
uj5u.com熱心網友回復:
由于您希望將其作為動態陳述句(無論是否必要),您可以使用嵌套的替代參考語法:
stmt:= q'^INSERT INTO myTable (id, stmt, dt)^'
|| q'^ values (1, q'[SELECT id FROM myTable where rownum < 100000 AND stop='F');]', sysdate)^';
陳述句的外部部分^用作參考分隔符,而內部陳述句(您嘗試作為列值插入的陳述句)正在使用[]. 當然,您可以使用任何有效字符。
這會產生:
INSERT INTO myTable (id, stmt, dt) values (1, q'[SELECT id FROM myTable where rownum < 100000 AND stop='F');]', sysdate)
它用作動態陳述句,并插入:
SELECT id FROM myTable where rownum < 100000 AND stop='F');
db<>小提琴
使用系結變數可能更有意義,即使是一次性操作。內部陳述句仍然可以構造為它自己的變數,使用替代參考。
順便說一句,如果打算在某個時候執行插入的陳述句,您可能不希望它有一個尾隨分號。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/478823.html
下一篇:根據某人出生的月份進行過濾
