我已经搜索了这个论坛,并通过谷歌搜索我的问题的答案,但我无法找到我的挑战的具体答案.这就是为什么我在这里要求它希望得到你们其中一个人的回答.
我想使用多个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';
现在发生了以下情况.
我启动SQLPlus(使用我的所有凭据)并启动我的控制文件(control.sql).
在SQLPlus的输出中,声明如下:
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文件?
我希望有一个人可以帮助我.如果有些事情不清楚,我可以尝试解释一下.