PL/SQL 串联

PL/SQL Concatenation

我有一个程序,其中有两个参数 CREATE_PARTITION(年源在 VARCHAR2 中,年目标在 VARCHAR2 中)

当我想插入与另一个字符串连接的 yearSource 时,table

中没有插入任何内容

我声明了采用 yearSource 的变量 yearAA 并将其与 'AA'

连接起来

yearAA varchar2(30) := yearSource||'AA';

插入它我使用:

立即执行'INSERT INTO MOUADTEST2018 VALUES('||yearAA||')';

结果:未插入任何内容 并显示此消息 ORA-00984:此处不允许列

您必须引用该值。实际上,如果 yearAA2018AA,您的代码将被解释为:

execute immediate 'INSERT INTO MOUADTEST2018 VALUES(2018AA)';

它试图 运行

INSERT INTO MOUADTEST2018 VALUES(2018AA)

这会引发错误,因为 2018AA 不在引号中,因此 Oracle 认为它必须是标识符(如列名)。

您可以将代码更改为

execute immediate 'INSERT INTO MOUADTEST2018 VALUES('''||yearAA||''')';

但这不是最佳做法,因为它允许 SQL 注入。相反,使用绑定变量。

execute immediate 'INSERT INTO MOUADTEST2018 VALUES(:1)' using yearAA;

另外,我认为你不需要execute immediate,所以你可以这样做:

insert into MOUADTEST2018 values(yearAA);