在嵌套查询中使用变量执行立即

时间:2014-10-29 15:00:03

标签: sql

对于大多数人来说,这可能是一个简单的查询。

我想在写入执行立即数时在嵌套查询中使用变量,但不知何故,它会在嵌套查询中的变量上每次都抛出一个错误。

create or replace PROCEDURE p_decrement_id(
    in_table         VARCHAR2,
    in_seg_nme VARCHAR2)
AS
  version      VARCHAR2(5) := 'v1.0';
BEGIN

EXECUTE IMMEDIATE 'UPDATE '|| in_table || '
SET X_VERSION_ID  =  X_VERSION_ID   - 1
where DATE_1 = (SELECT DATE_2 FROM CYCLE_DATES
                WHERE SEG_NME = ' ||in_seg_nme||')';

  COMMIT;
END p_decrement_id;

执行我使用:

set serveroutput on
call p_decrement_id('TEST_DECREMENT', 'TEST');

另外,我需要在查询中放置一个常量值 即

SELECT DATE_2 FROM CYCLE_DATES
WHERE SEG_NME = ' ||in_seg_nme||'
and indicator = 'Y'

请指导。

提前谢谢大家

1 个答案:

答案 0 :(得分:0)

最好使用USING将params绑定到查询

EXECUTE IMMEDIATE 'UPDATE '|| in_table || '
SET X_VERSION_ID  =  X_VERSION_ID   - 1
where DATE_1 = (SELECT DATE_2 FROM CYCLE_DATES
                WHERE SEG_NME = :1 and indicator = ''Y'')' using in_seg_nme;

如果不使用,您可以尝试这样做(因为它需要')

EXECUTE IMMEDIATE 'UPDATE '|| in_table || '
SET X_VERSION_ID  =  X_VERSION_ID   - 1
where DATE_1 = (SELECT DATE_2 FROM CYCLE_DATES
                WHERE SEG_NME = ''' ||in_seg_nme||''' and indicator = ''Y'')';

(两个随之发生的萎缩是撇号的逃逸序列)