如何使用绑定变量执行 SQL 脚本



我在Windows 10平台上运行Oracle 18.c。 我有一个大型的DOS脚本,它调用SQL Plus来运行第一个SQL脚本,并向其传递一个参数。 该参数已成功传递给第一个 SQL 脚本。 在该SQL脚本中,我尝试将一些文本附加到传递的参数中,以便它可以使用" @"功能调用第二个脚本。DOS 脚本测试1.bat

@echo off    
SET value1=2020_01_19_17_00_01    
sqlplus my_username/my_password@my_TNS as sysdba @C:Backupstest1.sql %value1%

SQL 脚本测试1.sql

SET SERVEROUTPUT ON
variable param1 varchar2(512);
variable full_file_name varchar2(512);
BEGIN
:param1 := '&&1';
dbms_output.put_line('The value of the passed parameter is: ' || :param1);   
:full_file_name := :param1 || '_f104.sql';
dbms_output.put_line('The new filename would be: ' || :full_file_name);
@:full_file_name;
END;
/

我在从 test1.sql 脚本获取要执行的:full_file_name中的值时遇到问题。 如果不涉及变量,我将简单地使用@2020_01_19_17_00_01_f104.sql行 如何获取名称存储在 :full_file_name 中的脚本文件来执行?

我找到了一种方法来做到这一点。 我的 sql 脚本现在看起来像:

Define ffn104 = '&&1._f104.sql'
@&ffn104
exit

请注意,在 define 语句中,我必须在传递的变量 &&1 之后放置一个句点以结束其定义。 然后我附加了_f104.sql。 这解决了问题。

最新更新