嗨,我在尝试将 INPUT 参数插入错误表时收到此错误
CREATE OR REPLACE PROCEDURE consolidate_SI(
primary_SI IN NUMBER,
secondary_SI IN NUMBER )
IS
v_primary_si number;
v_secondary_si number;
Begin
v_primary_si:= primary_si;
EXECUTE IMMEDIATE 'insert into error_log ( identifier, error_message) values
(''Successfully updated'',v_primary_si)';
execute immediate 'commit';
End;
我在运行时收到以下错误
ORA-00984:此处不允许列
你不需要动态 SQL:
CREATE OR REPLACE PROCEDURE consolidate_SI(primary_SI IN NUMBER, secondary_SI IN NUMBER) IS
v_primary_si NUMBER;
v_secondary_si NUMBER;
BEGIN
v_primary_si := primary_si;
insert into error_log ( identifier, error_message) values ('Successfully updated',v_primary_si);
commit;
END;
此外,问题在于您在动态SQL中引用变量v_primary_si
的方式。
动态 SQL 上下文不知道v_primary_si
是什么 - PL/SQL 变量不在该 SQL 上下文的范围内 - 因此默认情况下它将其视为列标识符:因此出现错误。要使用 PL/SQL 变量,您需要使用并将其作为绑定变量提供:
EXECUTE IMMEDIATE 'insert into error_log ( identifier, error_message) values
(''Successfully updated'',:v_primary_si)'
USING v_primary_si;
但是这里和提交都不需要是动态的,你可以这样做:
Begin
v_primary_si:= primary_si; -- presumably you need this as a new variable later?
insert into error_log ( identifier, error_message)
values ('Successfully updated', v_primary_si);
commit;
End;