Sql 在嵌套查询中使用变量执行即时命令
对于大多数人来说,这可能是一个简单的查询 我想在编写execute immediate时在嵌套查询中使用一个变量,但不知何故,它每次都会在嵌套查询中的变量上抛出一个错误Sql 在嵌套查询中使用变量执行即时命令,sql,Sql,对于大多数人来说,这可能是一个简单的查询 我想在编写execute immediate时在嵌套查询中使用一个变量,但不知何故,它每次都会在嵌套查询中的变量上抛出一个错误 create or replace PROCEDURE p_decrement_id( in_table VARCHAR2, in_seg_nme VARCHAR2) AS version VARCHAR2(5) := 'v1.0'; BEGIN EXECUTE IMMEDIATE
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');
另外,我需要在查询中输入一个常量值
i、 e
请导游
提前感谢大家最好使用将参数绑定到查询
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;
如果不使用,您可以尝试以下方法(因为您需要的是VARCHAR2):
(两个后续撇号是撇号的转义序列)非常感谢您的多同步。它就像一个符咒。感谢你的帮助,并指引我走向错误的方向。
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'')';