1

У меня два файла .sql - это хранимые процедуры Oracle, которые принимают входные параметры. Я хотел бы сначала подключиться к удаленной базе данных Oracle, используя sqlplus в командной строке, и сначала хочу использовать оба файла для создания соответствующих хранимых процедур, поэтому я вижу их в процедурах для этого соединения в Oracle SQL Developer.Создание хранимой процедуры Oracle и ее выполнение из файла .sql

После этого у меня есть еще два .sql-файла, которые выглядят так и предназначены для ввода входных параметров и выполнения хранимых процедур. Это один из файлов, предназначенных для выполнения хранимой процедуры «ОТЧЕТ».

DECLARE 
    NAME VARCHAR2(200); 
    VERSION VARCHAR2(200); 
    STARTDATE DATE; 
    ENDDATE DATE; 
BEGIN 
    NAME := '&1'; 
    VERSION := '&2'; 
    STARTDATE := '&3'; 
    ENDDATE := '&4'; 

    exec REPORT(NAME, VERSION, STARTDATE, ENDDATE); 
    EXCEPTION 
    WHEN OTHERS THEN 
    RAISE_APPLICATION_ERROR(-20101,SQLERRM); 
    END; 
/

В командной строке я сначала пытаюсь создать хранимую процедуру в базе данных: C: \ Users \ Desktop> Sqlplus имя пользователя/пароль @ report_setup.sql

Когда я пытаюсь это выход получить это просто пустые строки, которые нумеруются и начинаются с числа, которое больше 1, чем последняя строка моего файла .sql. Мой файл report_setup.sql имеет длину 81 строку, а вывод команды sqlplus - пустые пронумерованные строки, начинающиеся с 83.

Пожалуйста, дайте мне знать, как я могу правильно создавать и выполнять эти хранимые процедуры через sqlplus.

Спасибо заранее,

ответ

2

Я думаю, вы должны удалить «exec'-слово, и это важно иметь косую черту на дне в самом начале строки без пробелов перед ним:

DECLARE 
    NAME VARCHAR2(200); 
    VERSION VARCHAR2(200); 
    STARTDATE DATE; 
    ENDDATE DATE; 
BEGIN 
    NAME := '&1'; 
    VERSION := '&2'; 
    STARTDATE := '&3'; 
    ENDDATE := '&4'; 

    REPORT(NAME, VERSION, STARTDATE, ENDDATE); 
EXCEPTION 
    WHEN OTHERS THEN 
    RAISE_APPLICATION_ERROR(-20101,SQLERRM); 
END; 
/
+0

Хороший место; хотя, если я понимаю описание в вопросе, тогда он еще не успел запустить этот блок. Также можно также отметить, что он делает неявные преобразования даты при настройке «startdate» и «enddate» (и, похоже, в любом случае не так много объявлений объявляет/настраивает их), что, вероятно, произойдет в один прекрасный день. –

1

Было бы более полезно, чтобы показать report_setup.sql чем сценарий, который вызывает процедуру он создает ... но от симптомов вы описываете, в report_setup.sqldoesn't have a / at the end of the procedure declaration.

Это предположительно имеет что-то вроде:

CREATE OR REPLACE PROCEDURE REPORT(NAME VARCHAR2, VERSION VARCHAR2, 
    STARTDATE DATE, ENDDATE DATE) AS 
... 
BEGIN 
    ... 
END REPORT; 

Она должна иметь

... 
BEGIN 
    ... 
END REPORT; 
/

Поскольку вы бежите из командной строки с @ он должен также иметь EXIT в конце; но без /, который будет рассматриваться как часть процедуры, которая никогда не компилируется.

Вы можете подавить отображение номера строки, кстати, путем вызова SQL * Plus с флагом -s - хотя на данный момент они полезны, поскольку они показывают примерно то, что проблема.

Смежные вопросы