Oracle PL/SQL连接
我有一个程序,在条目中有两个参数 在VARCHAR2中创建分区yearSource,在VARCHAR2中创建分区yearDestination 当我想插入与另一个字符串连接的yearSource时,表中不会插入任何内容 我声明变量yearAA,它取yearSource,并将其与'AA'连接起来 yearAA varchar230:=yearSource | | AA' 要插入它,我使用: 立即执行“插入MOUADTES2018值”| | yearAA | | 结果:未插入任何内容Oracle PL/SQL连接,oracle,plsql,concatenation,execute-immediate,Oracle,Plsql,Concatenation,Execute Immediate,我有一个程序,在条目中有两个参数 在VARCHAR2中创建分区yearSource,在VARCHAR2中创建分区yearDestination 当我想插入与另一个字符串连接的yearSource时,表中不会插入任何内容 我声明变量yearAA,它取yearSource,并将其与'AA'连接起来 yearAA varchar230:=yearSource | | AA' 要插入它,我使用: 立即执行“插入MOUADTES2018值”| | yearAA | | 结果:未插入任何内容 它显示以下消息
它显示以下消息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;
此外,我认为您不需要立即执行,因此您可以执行以下操作:
insert into MOUADTEST2018 values(yearAA);
您必须引用该值。事实上,如果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;
此外,我认为您不需要立即执行,因此您可以执行以下操作:
insert into MOUADTEST2018 values(yearAA);