Oracle SQL Developer - Использование переменных в Insert / Select - PullRequest
0 голосов
/ 10 апреля 2019

Использование Oracle SQL Developer.У меня работает следующий пример:

DECLARE
    v_next_TransId INTEGER; -- declare
BEGIN
    select (max(Transaction_ID)+1) into v_next_TransId from xxpos.pos_transactions;
    dbms_output.Put_line(v_next_TransId); --display

END;

Теперь я хочу использовать эту переменную при вставке и / или выделении, я пробовал с префиксом: и без него.Пример ниже дает мне ORA-01008: не все переменные найдены.

DECLARE
    v_next_TransId INTEGER; -- declare 
BEGIN
    select (max(Transaction_ID)+1) into v_next_TransId from xxpos.pos_transactions;
    dbms_output.Put_line(v_next_TransId); --display

    -- insert new row will go here 
    -- commit will go here 
    -- now verify the insert worked okay 
    --select * from xxpos.pos_transactions where Transaction_ID = ( select max(Transaction_ID) from xxpos.pos_transactions )
    select * from xxpos.pos_transactions where Transaction_ID = :v_next_TransId;

END;

Без: перед переменной я получаю следующую синтаксическую ошибку: enter image description here

Версии:

Oracle Database 11gВыпуск Enterprise Edition 11.2.0.4.0 - 64-разрядное производство

PL / SQL Release 11.2.0.4.0 - Производство

1 Ответ

0 голосов
/ 11 апреля 2019

В блоке кода PLSQL столбцы оператора select должны быть присвоены переменным.Вы должны использовать select into предложение вашего блока кода plsql, как показано ниже.

DECLARE
    v_next_TransId INTEGER; -- declare 
    l_pos_transactions xxpos.pos_transactions%ROWTYPE;
BEGIN
    select (max(Transaction_ID)+1) into v_next_TransId from xxpos.pos_transactions;
    dbms_output.Put_line(v_next_TransId); --display

    -- insert new row will go here 
    -- commit will go here 
    -- now verify the insert worked okay 
    --select * from xxpos.pos_transactions where Transaction_ID = ( select max(Transaction_ID) from xxpos.pos_transactions )
    select * into l_pos_transactions
from xxpos.pos_transactions where Transaction_ID = :v_next_TransId;

  DBMS_OUTPUT.PUT_LINE(l_pos_transactions.column1|| ',' || l_pos_transactions.column2);

END;
...