Как определить и использовать переменную в 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.