Oracle PL/SQL连接

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 | | 结果:未插入任何内容 它显示以下消息

我有一个程序,在条目中有两个参数 在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);