我已经在这个论坛和谷歌上搜索了我的问题的答案,但我找不到我的挑战的具体答案。这就是为什么我在这里问这个问题,希望能得到你们其中一个人的答复。
我想使用多个 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 文件中?
我还发现了以下帖子:如何在 sqlplus 中使用 START 将参数传递给 sql 文件中的 PL/SQL 块? / 从批处理文件启动 PL/SQL 脚本(带参数)这看起来像是我的挑战,但我不是从批处理文件调用,而是从 sql 文件调用。
我希望有一个人可以帮助我。如果有什么不清楚,我可以尝试进一步解释。