У меня есть 2 сервера (один для тестирования, один для производства), оба имеют следующие пакеты Oracle (идентичный вывод на обоих из них для SELECT * FROM V$VERSION;
:
Oracle9i Enterprise Edition, выпуск 9.2.0.3.0 - Производство
PL / SQL Release 9.2.0.3.0 - Производство
CORE 9.2.0.3.0 Производство
TNS для Linux: версия 9.2.0.3.0 - производство
NLSRTL Версия 9.2.0.3.0 - Производство
Странно то, что он отлично работает на одном сервере и выдает эти ошибки на другом ... Где мне искать? Кажется, это проблема конфигурации сервера.
Я пытаюсь скомпилировать эту процедуру:
CREATE OR REPLACE PROCEDURE P_A1 AS
NUMAR INTEGER := 0;
CURSOR A1_C3 IS
SELECT
(SELECT SUM(D1.A_PAY) FROM A1_A D1 WHERE D1.YR_R = D.YR_R AND D1.MON_R = D.MON_R) x_A
FROM APP_COMPANY_ALL CO, A1_A D
WHERE D.YR_R = y.APPL_admin.F$APPL_YEAR
AND D.MON_R = y.APPL_admin.F$APPL_MONTH
AND d.cif=SUBSTR(RTRIM(CO.c_fisc),3);
V_A1 A1_C3%ROWTYPE;
BEGIN
NULL;
END;
Я получаю следующие ошибки на одном из серверов:
Ошибки компиляции для PROCEDURE P_A1
Error: PLS-00103: Encountered the symbol "SELECT" when expecting one of the following:
( - + case mod new not null others <an identifier>
<a double-quoted delimited-identifier> <a bind variable> avg
count current exists max min prior sql stddev sum variance
execute forall merge time timestamp interval date
<a string literal with character set specification>
<a number> <a single-quoted SQL string> pipe
Text: (SELECT SUM(D1.A_PAY) FROM A1_A D1 WHERE D1.YR_R = D.YR_R AND D1.MON_R = D.MON_R) x_A
Error: PLS-00103: Encountered the symbol ")" when expecting one of the following:
. ( * @ % & - + ; / at for mod rem <an exponent (**)> and or
group having intersect minus order start union where connect
||
Text: (SELECT SUM(D1.A_PAY) FROM A1_A D1 WHERE D1.YR_R = D.YR_R AND D1.MON_R = D.MON_R) x_A
Дело в том, что, как я уже сказал, он работает на тестовом сервере, но не на рабочем сервере. Версии Oracle идентичны. Я почти уверен, что именно эта опция конфигурации вызывает эту проблему. Но я не знаю, где искать решение.
«Выбрать (Выбрать ...» работает просто отлично, если это не скалярный подзапрос. Сбой, когда он находится внутри курсора. Почему он не работает на рабочем сервере?