如何从pl sql过程运行sql脚本

Ani*_*ket 9 sql oracle plsql

我有一个程序,如:

CREATE OR REPLACE PROCEDURE test is 
BEGIN

  DBMS_OUTPUT.PUT_LINE('This is a Test');
END;
Run Code Online (Sandbox Code Playgroud)

我想运行存储在当前目录中的一些sql脚本.我可以使用'@ scriptname.sql'从sqlplus运行它们,但是如何从程序中执行此操作?例如:

CREATE OR REPLACE PROCEDURE test is 
BEGIN

  DBMS_OUTPUT.PUT_LINE('This is a Test');
  @scriptname.sql

END;
Run Code Online (Sandbox Code Playgroud)

这似乎不起作用!是否有特定的从pl/sql程序运行sql脚本?

DCo*_*kie 11

通常,您不能因为pl/sql在服务器上的数据库中运行,而sqlplus是客户端进程.服务器甚至不能依赖于与客户端及其文件在同一系统上,更不用说了解如何查找客户端所指的文件.即使支持语法(并且不支持),您的sql脚本也必须位于服务器上,服务器知道并有权访问的位置.


Jef*_*emp 8

实际上,您可以在SQL*Plus中执行此操作 - 您只需要确保@是该行的第一个字符,例如:

CREATE OR REPLACE PROCEDURE test is 
BEGIN

    DBMS_OUTPUT.PUT_LINE('This is a Test');
@scriptname.sql

END;
Run Code Online (Sandbox Code Playgroud)

SQL*Plus将读取脚本的全部内容并在过程中的该点插入,然后按照给定的过程创建过程.这意味着你不能拥有SQL*Plus命令scriptname.sql.此外,在数据库上创建的实际过程中不会引用@ scriptname.sql.


Bry*_*yan 1

您可以编写一个Java 存储过程来打开文件并将其内容作为字符串返回,然后对该字符串 调用“立即执行” 。

这样做时要非常小心,因为这些文件中的任何恶意 sql 都可以做任何它想做的事情。