Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在嵌套查询中使用变量执行即时命令_Sql - Fatal编程技术网

Sql 在嵌套查询中使用变量执行即时命令

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

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

我想在编写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'')';