Я хочу передать переменный аргумент во внешний файл SQL (PL / SQL с SQL * Plus)
У меня есть поиск в этом форуме и через Google для ответа на мой вопрос, но я не могу найти конкретный ответ на мой вопрос. Вот почему я прошу здесь, чтобы надеяться получить ответ от одного из вас, ребята.
Я хочу работать с несколькими файлами SQL, тогда как один файл SQL является управляющим файлом, который выполняет другие файлы SQL с параметрами. Этот файл называется: startup.sql
У меня есть таблица со всеми моими значениями (не обращайте внимания на названия столбцов, я изменил их для своего поста).
create table control (
S varchar2(15) not null,
N varchar2(25 char) not null,
B varchar2(25 char) not null,
Acheck varchar2(25 char) not null,
Adcheck varchar2(25) not null,
Blu varchar2(25) not null,
ADB varchar2(25)
)
Там, где вставлено одно из следующего (есть больше записей, но одного достаточно, чтобы показать вам способ работы):
insert into control (S,N,B,Acheck,Adcheck,Blu,ADB)
values('Test','B','J','J','N','N', '');
Мой контрольный файл выглядит так:
set escape on
set serveroutput on
SET DEFINE ON
declare
cursor c_lees_control is
select S, N, B, Acheck, Adcheck, Blu, ADB
from control
v_s varchar2(30);
v_b varchar2(30);
v_blu varchar2(30);
begin
for r_lees_control in c_lees_control
loop
v_s := r_lees_control.S;
v_b := r_lees_control.B;
v_blu := r_lees_control.Blu;
if v_b = 'J' then
--Also tried this.
--@C:/Temp/uitvoer.sql $v_s $v_blu
@C:/Temp/uitvoer.sql %v_s% %v_blu%
end if;
end loop;
end;
/
В моем uitvoer.sql у меня есть такая переменная:
variable_s := '&&1';
variable_blu := '&&2';
Сейчас происходит следующее. Я запускаю SQLПлюс (со всеми моими учетными данными), и я запускаю свой контрольный файл (control.sql). В выводе SQLПлюс следующее заявлено:
old 89: s = '&&1';
new 89: s = '%v_s%';
old 128: b_lu := '&&2';
new 128: b_lu := '%v_blu%';
Я ожидал следующего:
old 89: s = '&&1';
new 89: s = 'Test';
old 128: b_lu := '&&2';
new 128: b_lu := 'J';
Почему мои переменные в контрольном файле неправильно анализируются в новом файле SQL?
Я также нашел следующие сообщения:Как передать аргумент в блок PL / SQL в файле sql, который называется START в sqlplus? / Запустить скрипт PL / SQL из командного файла (с аргументами) Это похоже на мой вызов, но я звоню не из пакетного файла, а из файла SQL.
Я надеюсь, что кто-то может мне помочь. Если что-то неясно, я могу попытаться объяснить это немного подробнее.