[英]PL/SQL Dynamic Where Clause - Single Quote Around Dynamic String?
[英]string variable in where clause with dynamic pl/sql
我有以下代碼:
declare
instr varchar2(20);
num_no number;
begin
select AR_ID, ID
into instr, num_no
from quelle_match
where ID = 1;
execute immediate 'CREATE or replace VIEW interm2 AS
SELECT AR_ID, kurs,
((TO_CHAR(to_date(di.kursdatum,''dd.mm.yyyy''),''YYYYMMDD''))+ (TO_CHAR(to_date(di.verfall,''dd.mm.yyyy''),''YYYYMMDD''))) AS dumdate
FROM daten_import di
where di.AR_ID = '||instr||'';
-- where di.AR_ID = ''GXIndex''';
end ;
我收到錯誤b / c instr無效。 當我用實際的字符串GXIndex替換變量時,代碼起作用。 它也可以使用數字作為變量,但不能使用字符串。 這是為什么?
這個:
execute immediate 'CREATE or replace VIEW interm2 AS
SELECT AR_ID, kurs,
((TO_CHAR(to_date(di.kursdatum,''dd.mm.yyyy''),''YYYYMMDD''))+ (TO_CHAR(to_date(di.verfall,''dd.mm.yyyy''),''YYYYMMDD''))) AS dumdate
FROM daten_import di
where di.AR_ID = '||instr||'';
應該:
execute immediate 'CREATE or replace VIEW interm2 AS
SELECT AR_ID, kurs,
((TO_CHAR(to_date(di.kursdatum,''dd.mm.yyyy''),''YYYYMMDD''))+ (TO_CHAR(to_date(di.verfall,''dd.mm.yyyy''),''YYYYMMDD''))) AS dumdate
FROM daten_import di
where di.AR_ID = '||instr;
如果instr
是一個整數,我認為是。
您連接instr
的方式存在問題。 為了清楚起見,讓我簡化您的問題:
EXECUTE IMMEDIATE
'CREATE OR REPLACE VIEW interm2 AS
SELECT ar_id FROM daten_import di
WHERE di.ar_id = ' || instr;
instr
是一個字符串。 您需要在其周圍加上引號。
EXECUTE IMMEDIATE
'CREATE OR REPLACE VIEW interm2 AS
SELECT ar_id FROM daten_import di
WHERE di.ar_id = ''' || instr || '''';
-- ^^ ^^
-- || ||
-- -- escaped quotes--
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.