oracle – 我想将一个变量参数传递给外部SQL文件(带有SQL * Plus的PLSQL)

oracle – 我想将一个变量参数传递给外部SQL文件(带有SQL * Plus的PLSQL),第1张

概述我已经搜索了这个论坛,并通过谷歌搜索我的问题的答案,但我无法找到我的挑战的具体答案.这就是为什么我在这里要求它希望得到你们其中一个人的回答. 我想使用多个SQL文件,而一个SQL文件是执行带参数的其他SQL文件的控制文件. 该文件名为:startup.sql 我有一个包含所有值的表(不介意列的名称,我为我的帖子更改了它们). create table control ( S varchar2( 我已经搜索了这个论坛,并通过谷歌搜索我的问题的答案,但我无法找到我的挑战的具体答案.这就是为什么我在这里要求它希望得到你们其中一个人的回答.

我想使用多个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','N','');

我的控制文件如下:

set escape onset serveroutput onSET define ONdeclare  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';

现在发生了以下情况.
我启动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文件?

我还发现了以下帖子:
How do you pass an argument to a PL/SQL block within a sql file called using START in sqlplus?/Launch PL/SQL script from batch file (with arguments)
它看起来像我的挑战,但我不是从批处理文件调用,而是从sql文件调用.

我希望有一个人可以帮助我.如果有些事情不清楚,我可以尝试解释一下.

解决方法 @是一个 SQL*Plus command,它在PL / sql中没有任何意义.您的脚本在解析时被包含在PL / sql块中,如果您在缓冲区中使用了 list,则可以看到该脚本.控制块中声明的变量可直接用于“包含”代码,无需替换.

例如,如果uitvoer.sql只包含:

dbms_output.put_line(v_s);

然后这个控制脚本:

set serveroutput ondeclare  v_s varchar2(10) := 'Test';begin  @uitvoer.sqlend;/List

生产:

TestPL/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_send;/

你看:

old   7:   variable_s := &&1;new   7:   variable_s := v_s;TestPL/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;
总结

以上是内存溢出为你收集整理的oracle – 我想将一个变量参数传递给外部SQL文件(带有SQL * Plus的PL / SQL)全部内容,希望文章能够帮你解决oracle – 我想将一个变量参数传递给外部SQL文件(带有SQL * Plus的PL / SQL)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/1164546.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-01
下一篇2022-06-01

发表评论

登录后才能评论

评论列表(0条)

    保存