oracle – 我想将一个变量参数传递给外部SQL文件(带有SQL * Plus
我已经搜索了这个论坛,并通过谷歌搜索我的问题的答案,但我无法找到我的挑战的具体答案.这就是为什么我在这里要求它希望得到你们其中一个人的回答. 我想使用多个SQL文件,而一个SQL文件是执行带参数的其他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','N',''); 我的控制文件如下: set escape on set serveroutput on SET DEFINE ON declare cursor c_lees_control is select S,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'; 现在发生了以下情况. 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文件? 我还发现了以下帖子: 我希望有一个人可以帮助我.如果有些事情不清楚,我可以尝试解释一下. 解决方法@是一个 SQL*Plus command,它在PL / SQL中没有任何意义.您的脚本在解析时被包含在PL / SQL块中,如果您在缓冲区中使用了list ,则可以看到该脚本.控制块中声明的变量可直接用于“包含”代码,无需替换.
例如,如果uitvoer.sql只包含: dbms_output.put_line(v_s); 然后这个控制脚本: set serveroutput on declare v_s varchar2(10) := 'Test'; begin @uitvoer.sql end; / list 生产: Test PL/SQL procedure successfully completed. 1 declare 2 v_s varchar2(10) := 'Test'; 3 begin 4 dbms_output.put_line(v_s); 5* end; 缓冲区中的PL / SQL块具有包含的代码,而不是对uitvoer.sql的引用.但是包含的代码是有效的,因为它引用了控制脚本中的变量,该变量仍在范围内. 如果你想允许控制变量具有不同的名称,允许更灵活地调用uitvoer.sql,那么你仍然可以使用替换变量,但你仍然要替换变量名,而不是它的值.例如,使用此uitvoer.sql(请注意,替换变量assginment周围没有引号): declare variable_s varchar2(10); begin variable_s := &&1; dbms_output.put_line(variable_s); end; 并且您的控制脚本传递变量名称: declare v_s varchar2(10) := 'Test'; begin @uitvoer.sql v_s end; / 你看: old 7: variable_s := &&1; new 7: variable_s := v_s; Test PL/SQL procedure successfully completed. 1 declare 2 v_s varchar2(10) := 'Test'; 3 begin 4 declare 5 variable_s varchar2(10); 6 begin 7 variable_s := &&1; 8 dbms_output.put_line(variable_s); 9 end; 10* end; (编辑:瑞安网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |