[英]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.