我有一个批处理文件,其中包含许多步骤,可以一一执行。
但是,为了使其更加灵活,我想在 SQLPlus
中包含一个条件检查。 .
比如,首先从查询中获取条件变量的值并存储在说 v_variable
中。 .然后将其用于一些检查,例如
IF v_variable = 'Y' THEN
--DO SOME DDL
ELSE
--DO OTHER DDL
END IF
我必须在批处理文件的许多地方重复这个块,我无法通过 PL/SQL 以某种方式完成它。
我正在尝试使用这个
COLUMN
SQLPlus
中的命令但不知何故没有得到变量值来保存。COLUMN VARIABLE1 NEW_VALUE V_VARIABLE1
SELECT PARAM_VAL AS VARIABLE1 FROM TABLE_T WHERE PARAM_TYPE = 'XYZ';
-- This query will only throw one record.
DEFINE V_VARIABLE1
那是绝对错误的吗?我们怎么做才能看到
V_VARIABLE1
是从查询中获取值吗?即使我做对了,我对
IF-ELSE
一无所知部分。有人可以帮忙吗?我对适用于 SQLPlus 的解决方案感兴趣。
最佳答案
sql*plus 本身不支持流控制,因此您可以在此处执行的任何操作都介于“解决方法”和“hack”之间。一些可能的选择是:
execute
immediate
作为动态 SQL 运行您的 DDL或 dbms_utility.execute_ddl_statement
.完全访问PL/SQL 特性,因此在流量控制和
语句构建,但如果您正在部署,则更难管理
大的东西。
就像您在帖子中提供的列/查询技巧一样,运行它
类似
@&scriptname
. 删除脚本的某些部分。您可以使用 Tanel Poder 的鲷鱼
实用程序 script例如;通知
&_IF_
代换那里的变量。
此:
——
21:21:23 SQL> ho cat run.sql
begin
case '&1.' when 'A' then
@script_a
when 'B' then
@script_b
else
null;
end case;
end;
/
21:21:26 SQL> ho cat script_a.sql
dbms_output.put_line('this is a');
21:21:30 SQL> ho cat script_b.sql
dbms_output.put_line('this is b');
21:21:34 SQL> @run
Enter value for 1: A
this is a
PL/SQL procedure successfully completed.
Elapsed: 00:00:00.02
21:21:37 SQL> @run B
this is b
PL/SQL procedure successfully completed.
Elapsed: 00:00:00.03
关于batch-file - 使用来自查询的变量进行 SQLPlus 条件执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27543873/