对于大多数人来说,这可能是一个简单的查询。
我想在写入执行立即数时在嵌套查询中使用变量,但不知何故,它会在嵌套查询中的变量上每次都抛出一个错误。
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'
请指导。
提前谢谢大家
答案 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'')';
(两个随之发生的萎缩是撇号的逃逸序列)