Oracle11g 将参数传递到spool文件

Oracle11g 将参数传递到spool文件,oracle11g,parameters,parameter-passing,spool,Oracle11g,Parameters,Parameter Passing,Spool,假设我有一个sql文件,它是从命令提示符(sql Plus)执行的,运行良好 sqlplus dbusername/dbpassword@DBInstance @sqlfilename.sql 现在我需要向这个sql spool文件传递一个参数,根据参数的值,我应该能够确定sql文件中的功能。在下面的sql代码中,我需要将作为参数传递的值存储在变量parameter\u value SET SERVEROUTPUT ON SET DEFINE OFF SPOOL "Test.log" var

假设我有一个sql文件,它是从命令提示符(sql Plus)执行的,运行良好

sqlplus dbusername/dbpassword@DBInstance @sqlfilename.sql
现在我需要向这个sql spool文件传递一个参数,根据参数的值,我应该能够确定sql文件中的功能。在下面的sql代码中,我需要将作为参数传递的值存储在变量
parameter\u value

SET SERVEROUTPUT ON
SET DEFINE OFF
SPOOL "Test.log"

var parameter_Value VARCHAR2(20);
BEGIN
    IF(parameter_Value='A')
    THEN
           --do something
    ELSE
           --do something
    END IF;
END;
/

SPOOL OFF;
SET DEFINE ON
SET SERVEROUTPUT OFF
有人能帮我完成这项任务吗

提前谢谢

您对word spoolfile的使用不正确
sqlfilename.sql
是sql文件或sqlplus文件。输出文件
Test.log
是假脱机文件

你打电话

sqlplus dbusername/dbpassword@DBInstance @sqlfilename.sql A
调用以下文件

SPOOL "Test.log"
DEFINE MY_VALUE=&1

SET SERVEROUTPUT ON


var parameter_Value VARCHAR2(20);

EXEC :parameter_Value:='&MY_VALUE'

SET DEFINE OFF

BEGIN
    IF(:parameter_Value='A')
    THEN
           --do something
    ELSE
           --do something
    END IF;
END;
/

SET DEFINE ON
SET SERVEROUTPUT OFF
SPOOL OFF;
  • &变量的替换是一种简单的文本替换。可以通过执行
    SET DEFINE off
    将其关闭。替换由sqlplus引发信息消息,可通过执行
    SET VERIFY off

  • 您应该从
    SPOOL
    命令开始,在开始将假脱机处理到日志文件之前,您不会看到执行的命令引发的错误。这会使调试变得单调乏味。您还应该在关闭
    之前执行所有命令

  • 命令行中的参数由其位置号引用。我更喜欢将它们分配给命名变量,并在以后使用命名变量。这是没有必要的。以后也可以使用位置参数,而不是使用命名参数。但是,如果参数的位置发生更改,使用命名参数可以更容易地更改文件。如果选择合适的名称,它还可以记录参数的用途。在这个例子中,我没有这样做

  • 在参数替换之前,您不能在
    设置DEFINE OFF
    的情况下禁用
    &
    字符的特殊属性。你必须推迟,直到你完成所有的替换。否则,替换将不起作用

  • 绑定变量是用sqlplus中的
    VAR…
    语句定义的。在SQL文本中,它必须用前面的冒号(:)引用

  • EXEC语句
    BEGIN语句的缩写;结束

  • 请注意,
    --do something
    位于PL/SQL块中。所以它必须被PL/SQL语句代替,而不是SQL语句或SQL*Plus语句。 因此它不能被
    CREATE TABLE…
    语句(这是SQL但不是PL/SQL)替换,也不能被
    SPOOL OFF
    语句替换,这是SQL*Plus但不是PL/SQL


这是一个伟大的奇迹。Wll解释道:)@173