столбец не допускается здесь ошибка в оракуле SQL вставки - PullRequest
0 голосов
/ 03 июля 2018

Привет, я получаю эту ошибку при попытке вставить параметр 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 ]

0 голосов
/ 03 июля 2018

Динамический контекст 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;
0 голосов
/ 03 июля 2018

Вам не нужен динамический 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...