【问题标题】:string variable in where clause with dynamic pl/sql带有动态 pl/sql 的 where 子句中的字符串变量
【发布时间】:2014-09-17 02:08:55
【问题描述】:

我有这个代码:

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 is not valid。当我用实际的字符串 GXIndex 替换变量时,代码就可以工作了。它也适用于数字作为变量,但不适用于字符串。这是为什么?

【问题讨论】:

标签: sql plsql execute-immediate


【解决方案1】:

连接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--

【讨论】:

    【解决方案2】:

    这个:

      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 是一个整数,我认为是。

    【讨论】:

      猜你喜欢
      • 2013-06-14
      • 1970-01-01
      • 2020-04-16
      • 2021-08-31
      • 1970-01-01
      • 1970-01-01
      • 2010-12-15
      • 2011-12-10
      • 2013-03-19
      相关资源
      最近更新 更多