Столбец не допускается здесь ошибка в оракуле SQL вставки
Привет я получаю эту ошибку при попытке вставить параметр 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: колонка здесь не разрешена
2 ответа
Решение
Вам не нужен динамический 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;
Кроме того, проблема в том, как вы ссылаетесь на переменную v_primary_si
в вашем динамическом SQL.
Динамический контекст SQL не знает, что v_primary_si
is - переменные 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;