Oracle11g 将参数传递到spool文件
假设我有一个sql文件,它是从命令提示符(sql Plus)执行的,运行良好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
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;
- &变量的替换是一种简单的文本替换。可以通过执行
将其关闭。替换由sqlplus引发信息消息,可通过执行SET DEFINE off
SET VERIFY off
- 您应该从
命令开始,在开始将假脱机处理到日志文件之前,您不会看到执行的命令引发的错误。这会使调试变得单调乏味。您还应该在关闭SPOOL
之前执行所有命令
- 命令行中的参数由其位置号引用。我更喜欢将它们分配给命名变量,并在以后使用命名变量。这是没有必要的。以后也可以使用位置参数,而不是使用命名参数。但是,如果参数的位置发生更改,使用命名参数可以更容易地更改文件。如果选择合适的名称,它还可以记录参数的用途。在这个例子中,我没有这样做
- 在参数替换之前,您不能在
的情况下禁用设置DEFINE OFF
字符的特殊属性。你必须推迟,直到你完成所有的替换。否则,替换将不起作用&
- 绑定变量是用sqlplus中的
语句定义的。在SQL文本中,它必须用前面的冒号(:)引用VAR…
是EXEC语句
BEGIN语句的缩写;结束
- 请注意,
位于PL/SQL块中。所以它必须被PL/SQL语句代替,而不是SQL语句或SQL*Plus语句。 因此它不能被--do something
语句(这是SQL但不是PL/SQL)替换,也不能被CREATE TABLE…
语句替换,这是SQL*Plus但不是PL/SQLSPOOL OFF