Oracle PL SQL: разное поведение с двумя разными БД - PullRequest
0 голосов
/ 23 января 2020

Я написал себе небольшую утилиту PL / SQL. Выполнение его (с использованием SQL -Developer) на одной БД (установка Oracle XE на моем Windows 10 ноутбуке) работает отлично, но при выполнении на другой БД (также Oracle XE, но на Linux server) Я получаю ошибки компиляции в моем скрипте!?!? Как это может быть?

Я получаю следующие ошибки:

ORA-06550: line 17, column 35:
PLS-00491: numeric literal required
ORA-06550: line 18, column 35:
PLS-00491: numeric literal required
ORA-06550: line 19, column 35:
PLS-00491: numeric literal required
ORA-06550: line 20, column 35:
PLS-00491: numeric literal required
06550. 00000 -  "line %s, column %s:\n%s"
*Cause:    Usually a PL/SQL compilation error.

Ссылки указаны в этом разделе в начале моего сценария:

DECLARE
    -- limits and boundaries    
    MAX_NAME_LENGTH         CONSTANT NUMBER(3)          := 30; -- for table and column names
    MAX_VALUE_LENGTH        CONSTANT NUMBER(5)          := 10000; -- for column values

    -- our starting point:
    m_owner                 VARCHAR2(MAX_VALUE_LENGTH)  := 'C##TEST';
    m_start_table_name      VARCHAR2(MAX_NAME_LENGTH)   := 'XML_MELDUNG_QUEUE'; 
    m_start_column_name     VARCHAR2(MAX_NAME_LENGTH)   := 'XML_MELDUNG_ID'; 
    m_start_value           VARCHAR2(MAX_VALUE_LENGTH)  := '5647'; 
...

и точное место оказалось использованием констант, т. е. предложения "... (MAX _....)".

Кажется, что во второй системе определения CONSTANT и определения Использование этих констант в дальнейших декларациях не работает так же, как при нацеливании на мою локальную БД.

Я полностью озадачен! В чем здесь проблема? Почему такое объявление PL / SQL работает с использованием одной Oracle XE DB, а не с другой? Я имею в виду: я бы понял, если какая-то сущность не может быть найдена, но ошибки компиляции (или нет) в зависимости от используемой БД ???

Любая идея или указатель?

1 Ответ

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

Объявление переменных длин с помощью констант - это функция, добавленная в Oracle База данных 12.2.

Так что я подозреваю, что ваша локальная установка XE - 18 c. А другой - 11.2.

Вы можете проверить это, запустив:

select * from v$version;
...