G.S*_*G.S 3 oracle plsql prompt
如何在pl/sql块中使用"START SCRIPT"?
我想用这样的东西
declare
begin
proc(para1,para2);
execute immediate 'start prompt1' ;
end;
/
Run Code Online (Sandbox Code Playgroud)
另外我想知道,我可以从prompt1获取一个值到我调用脚本的PL/SQL块吗?因为我需要使用该值在PL/SQL块中执行某些操作.
这是2012年的 2017 年.从上一个千年开始,脚本是一个笨重而脆弱的宿醉.Oracle具有我们可以在PL/SQL中执行的一系列功能,还有Java存储过程,以及启动作业的安排.除了运行DDL来创建或修改模式之外,Oracle数据库环境中几乎不需要脚本; 甚至DDL脚本也应该从外部客户端触发,可能是TeamCity等构建工具.
特别是我会考虑尝试从PL/SQL程序运行SQL脚本作为架构故障.你用脚本做了什么,你不能用存储过程做什么?
至于将输入传递给存储过程,这就是参数的用途.PL/SQL不是交互式的,我们需要客户端输入值.根据场景,这可以异步(文件或表中的值)或同步(从SQL*Plus,SQL Developer或定制前端调用存储过程)完成.
说了这么多,在现实世界中,我们使用数据库和外部操作系统之间具有相互依赖性的混乱架构.所以,我们能做些什么?
请注意,所有这些选项都需要提升访问权限(DIRECTORY对象上的授予,安全凭证等).这些只能由特权用户(即DBA)授予.除非我们的数据库具有令人惊讶的宽松安全配置,否则我们无法从PL/SQL运行任意shell脚本.
最后,还不清楚您在PL/SQL中运行SQL脚本会带来什么好处.请记住,PL/SQL在数据库服务器上运行,因此无法在客户端计算机上看到脚本.鉴于接受用户输入的要求,这似乎是相关的.
也许最简单的解决方案是重新配置原始脚本.将必要的PL/SQL调用拆分为一个块,然后只需调用命名脚本:
begin
proc(para1,para2);
end;
/
@prompt1.sql
Run Code Online (Sandbox Code Playgroud)
小智 5
您可以在 SqlPlus 中编写 pl/sql 块来检查表中的参数,然后执行脚本。在要执行的脚本中(下面的MyScript.sql),语句终止符必须是“;” 代替 ”/”
declare
vMyParameter number := 0;
begin
select count(*) into vMyParameter
from MyTable
where MyCheckValue = 'Y';
if vMyParameter = 1 then
@MyFolder/MyScript.sql;
end if;
end;
/
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
28646 次 |
最近记录: |