私は2つのサーバー(テスト用と本番用)を持っており、どちらにも次のOracleパッケージがあります(両方のサーバーで同じ出力SELECT * FROM V$VERSION;
:
Oracle9i Enterprise Edition リリース 9.2.0.3.0 - 本番
PL/SQL リリース 9.2.0.3.0 - 本番
CORE 9.2.0.3.0
Linux 用 TNS: バージョン 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;
サーバーの 1 つで次のエラーが発生します。
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 のバージョンは同じです。この問題を引き起こしているのは構成オプションであると確信しています。しかし、解決策を探す場所がわかりません。
"Select ( Select ..." は、スカラー サブクエリでない場合は正常に機能します。カーソル内にあると失敗します。運用サーバーで機能しないのはなぜですか?