我有一个在条目中有两个参数的过程 CREATE_PARTITION( 年份来源在 VARCHAR2 , 年份目的地在 VARCHAR2 (
当我想插入与另一个字符串连接的年份时,表中没有插入任何内容
我声明变量 yearAA 它采用 yearSource,并将其与"AA"连接
起来yearAA varchar2(30( := yearSource||'AA';
要插入它,我使用:
立即执行 ' 插入到MOUADTEST2018值('||年AA||'(';
结果:未插入任何内容 它显示此消息ORA-00984:此处不允许列
你必须引用值。实际上,如果yearAA
2018AA
,您的代码将被解释为:
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);