вставить ошибку в заявление оракула внутри процедуры - PullRequest
0 голосов
/ 06 ноября 2018
stmt_ins_bck:= 'insert into sii_bck_tab(id_bck_tab,nome_tab,id_bck_cfg_tab) VALUES (' || SII_BCK_TAB_ID_SEQ.CURRVAL || ',' || id_seq || ',' || id_fk || ')';
DBMS_OUTPUT.PUT_LINE(stmt_ins_bck);
EXECUTE IMMEDIATE stmt_ins_bck;

Я получаю ошибку ORA-00984, когда пытаюсь выполнить эту вставку, то, как я вижу, все выглядит хорошо, и я не могу понять, что я сделал неправильно.

Ошибка говорит, что столбец здесь не разрешен.

1 Ответ

0 голосов
/ 06 ноября 2018

Ошибка предполагает, что одна из ваших переменных является строкой, поэтому вам придется заключать ее в одинарные кавычки внутри оператора; и поскольку они будут внутри другой строки - самого оператора - их нужно будет экранировать.

Из комментария кажется, что id_seq - это строка, а id_fk - это число, что-то вроде:

stmt_ins_bck:= 'insert into sii_bck_tab(id_bck_tab,nome_tab,id_bck_cfg_tab) VALUES ('
  || SII_BCK_TAB_ID_SEQ.CURRVAL || ',''' || id_seq || ''',' || id_fk || ')';
-------------------------------------^^................^^ escaped single quotes
EXECUTE IMMEDIATE stmt_ins_bck;

Но проще и в целом эффективнее использовать переменные связывания:

stmt_ins_bck:= 'insert into sii_bck_tab(id_bck_tab,nome_tab,id_bck_cfg_tab) VALUES (:v1,:v2,:v3)';
EXECUTE IMMEDIATE stmt_ins_bck USING SII_BCK_TAB_ID_SEQ.CURRVAL, id_seq, id_fk;

или, возможно, поскольку ссылка на последовательность является разумной в фиксированной части оператора:

stmt_ins_bck:= 'insert into sii_bck_tab(id_bck_tab,nome_tab,id_bck_cfg_tab) VALUES (SII_BCK_TAB_ID_SEQ.CURRVAL,:v1,:v2)';
EXECUTE IMMEDIATE stmt_ins_bck USING id_seq, id_fk;
...