Как определить и использовать переменную в Oracle SQL Script в SQL Developer самым простым способом - PullRequest
0 голосов
/ 03 июля 2018

Я просто хочу определить и затем использовать переменную в 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 ]

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

Вы можете использовать любой из этих двух методов, чтобы избежать запросов в 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';
0 голосов
/ 03 июля 2018

Ваш метод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.
...