Как определить и использовать переменную в Oracle SQL Script в SQL Developer самым простым способом

Я просто хочу определить и затем использовать переменную в Oracle SQL в SQL Developer (версия 18.1.0.095) (Общая информация: у нас есть несколько устаревших производственных сценариев SQL, которые периодически запускаются через jBPM).

В SQL Developer я хочу избегать окна подсказки "Введите привязки".

Удивительно, но я обнаружил, что это не так просто сделать. Я что-то упускаю из виду?

CREATE TABLE Test_Persons (
    PersonID int,
    LastName varchar(255),
    FirstName varchar(255)
);

INSERT INTO Test_Persons
    (PersonID,LastName,FirstName)
    values(1,'LN_1','FN_1');

INSERT INTO Test_Persons
    (PersonID,LastName,FirstName)
    values(2,'LN_2','FN_2');

commit;

// --- method 1: not working and shows the prompt window (which I try to avoid)--------
var last_name_input varchar2(20);
select 'LN_2' into :last_name_input from dual;
select * from Test_Persons tp where tp.LASTNAME = :last_name_input;

// --- method 2: not working and shows the prompt window (which I try to avoid) --------
declare
    var last_name_input varchar2(20);
    var first_name_output varchar2(20);
begin
    select 'LN_2' into :last_name_input from dual;
    select tp.FIRSTNAME into first_name_output from Test_Persons tp where tp.LASTNAME = :last_name_input;
--    dbms_output.Put_line('here: ' || :first_name_output);
end;

// --- method 3: working and shows the prompt window (which I try to avoid) --------
var last_name_input varchar2(20);
exec :last_name_input := 'LN_2';
select * from Test_Persons tp where tp.LASTNAME = :last_name_input;

2 ответа

Решение

Вы можете использовать любой из этих двух методов, чтобы избежать подсказок в SQL-разработчике.

Установите значение переменной из exec и запустить как скрипт (F5)

var   last_name_input varchar2(20);
EXEC  :last_name_input := 'LN_2'
select * from Test_Persons tp where tp.LASTNAME = :last_name_input;

Другой метод заключается в использовании переменной подстановки (& по умолчанию вы также можете изменить его, используя SET DEFINE)

define last_name_input = 'LN_2'
select * from Test_Persons tp where tp.LASTNAME = '&last_name_input';

Ваш метод2 работает после удаления ":" в Oracle 12c -

CREATE TABLE Test_Persons (
    PersonID int,
    LastName varchar(255),
    FirstName varchar(255)
);

INSERT INTO Test_Persons
    (PersonID,LastName,FirstName)
    values(1,'LN_1','FN_1');

INSERT INTO Test_Persons
    (PersonID,LastName,FirstName)
    values(2,'LN_2','FN_2');

commit;


set serverout on;

declare
    last_name_input varchar2(20);
    first_name_output varchar2(20);
begin
    select 'LN_2' into last_name_input from dual;
    select tp.FIRSTNAME into first_name_output from Test_Persons tp where tp.LASTNAME = last_name_input;
    dbms_output.Put_line('here: ' || first_name_output);
end;

Выход -

Table TEST_PERSONS created.


1 row inserted.


1 row inserted.


Commit complete.

here: FN_2


PL/SQL procedure successfully completed.
Другие вопросы по тегам