У меня есть устаревшее приложение, которое все еще работает на Oracle 9i. Мы перейдем к 11 г в этом году, но на данный момент мне нужно запустить несколько тестовых скриптов в текущей среде.Компиляция хранимой процедуры с локальными функциями в Oracle 9i
В моем тесте используется хранимая процедура, но когда я пытаюсь скомпилировать процедуру, я получаю следующую ошибку.
«PLS-00103: Обнаружен символ„конец файла“, когда ожидает один из следующего:»
Это странно, как хранимые процедуры, составленной на том же сервере, около двух много лет назад. Единственное различие заключается в том, что база данных была перезаписана копией производственной базы данных, поскольку (эта процедура используется только в тесте, поэтому ее нет в производственной базе данных).
Проблема, по-видимому, связана с локальными функциями внутри процедуры. Вот очень простая процедура, которая иллюстрирует ошибку я получаю:
create or replace procedure test
as
l_dt date;
function dt
return date
is
begin
return sysdate;
end;
begin
l_dt := dt;
dbms_output.put_line(to_char(l_dt, 'dd-mm-yyyy'));
end;
Edit: Вот полный выход, когда я пытаюсь скомпилировать это:
1 ORA-24344: success with compilation error
10 PLS-00103: Encountered the symbol "end-of-file" when expecting one of the following:
10
10 begin function package pragma procedure form
13 ORA-06550: line 2, column 3:
13 PLS-00201: identifier 'L_DT' must be declared
13 ORA-06550: line 2, column 3:
13 PL/SQL: Statement ignored
14 ORA-06550: line 3, column 32:
14 PLS-00201: identifier 'L_DT' must be declared
14 ORA-06550: line 3, column 3:
14 PL/SQL: Statement ignored
14 SQL parse error location
Это, безусловно, кажется, локальная функция, это вызывая его, как будто я его вынимаю, он просто компилируется. Вот выше процедура с локальной функцией удалены, а рабочая:
create or replace procedure test
as
l_dt date;
begin
l_dt := sysdate;
dbms_output.put_line(to_char(l_dt, 'dd-mm-yyyy'));
end;
Интересно, если кто-то сталкивался с этой проблемой, или знает, есть ли какой-либо причине локальные функции не компилировать под Oracle 9i?
Спасибо,
Джеймс
Эта процедура в порядке; так как вы его компилируете? Из SQL * Plus, в SQL Developer, какой-то другой клиент? Нужен ли клиенту только терминатор после него, например '/' на своей собственной линии? –
Я использую клиент под названием SqlDbx. У меня не было проблем с компиляцией хранимых процедур и пакетов с ним раньше. Я отредактирую исходное сообщение с хранимой процедурой, которая компилируется. –
Обе версии процедуры компилируются для меня в SqlDbx 4.3 Personal Edition. Против 11gR2, но это не должно иметь никакого значения для того, что это делает. –