Как запустить сценарии SQL из процедуры PL SQL - PullRequest
9 голосов
/ 23 января 2011

У меня есть такая процедура:

CREATE OR REPLACE PROCEDURE test is 
BEGIN

  DBMS_OUTPUT.PUT_LINE('This is a Test');
END;

Я хочу запустить некоторые сценарии SQL, хранящиеся в текущем каталоге. Я мог бы запустить их из sqlplus с '@ scriptname.sql', но как я могу сделать это изнутри процедуры? Например:

CREATE OR REPLACE PROCEDURE test is 
BEGIN

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

END;

Это не похоже на работу! Есть ли какие-либо специфичные для запуска сценариев sql из процедур pl / sql?

Ответы [ 5 ]

11 голосов
/ 23 января 2011

В общем случае это невозможно, поскольку pl / sql запускается в базе данных, на сервере, а sqlplus является клиентским процессом.Сервер не может полагаться даже на то, что находится в той же системе, что и клиент, и его файлы, и тем более ничего не знает о том, как найти файл, на который ссылается клиент.Даже если синтаксис поддерживается (и это не так), сценарий sql должен находиться на сервере, в месте, о котором сервер знал и имел доступ.

8 голосов
/ 24 января 2013

На самом деле, вы можете сделать это в SQL * Plus - вам просто нужно убедиться, что @ является первым символом в строке, например:

CREATE OR REPLACE PROCEDURE test is 
BEGIN

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

END;

SQL * Plus будетпрочитайте все содержимое скрипта и вставьте его в тот момент процедуры, затем создайте процедуру так, как она дана.Это означает, что вы не можете иметь команды SQL * Plus в scriptname.sql.Кроме того, в самой процедуре, созданной в базе данных, не будет никакой ссылки на @ scriptname.sql.

4 голосов
/ 23 января 2011

Вы можете выполнить команду ОС, чтобы запустить SQLPlus и выполнить сценарии. Вы можете передать имя файла в SQLplus при запуске, и он выполнит его.

Внешние процедуры Google и extproc или эта статья . Или что-то вроде вызова команды ОС с Java

1 голос
/ 24 января 2011

Даже если и должно быть решение, я бы не советовал к этому.Процедура PL / SQL в основном представляет собой сценарий SQL.1. Запустите ваши сценарии SQL из-за пределов базы данных, например, через сценарий оболочки, или 2. Переместите код SQL в вашу процедуру.

1 голос
/ 23 января 2011

Вы можете написать хранимую процедуру Java , чтобы открыть файл и вернуть его содержимое в виде строки, а затем вызвать Выполнить немедленное в строке.

Будьте ОЧЕНЬ ОСТОРОЖНЫ при этом, так как любой вредоносный sql в этих файлах может делать практически все, что захочет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...