0

以下に示すように、動的SQLを実行するストアドプロシージャがあります。私はそれを可能な限り削減しようとしたので、小さなエラーは無視してください.

オフィスでは、いつでも、、、で機能11.210.2ます10.1。顧客では、次のメッセージで失敗します。

Unexpected Error

Error Message = "Msg:
MyProc
ORA-06550: line 1, column 1:
PLS-00103: Encountered the symbol "" when expecting one of the following:

   begin case declare exit for function goto if loop mod null

顧客が生成している動的SQLをキャプチャして、以下のように変数に配置し、作業マシンで実行すると機能するため、危険なSQLが生成されるわけではありません。通常、SQL はクライアントから取得されるため、ここでは to_date 引用符を 2 倍にしています。

mySQL := '
declare 
                pADMINDATE DATE := :1; 
                pEMPLOYEEIDLIKE VARCHAR2(40) := :2; 
                pINCLUDEEMPLOYEE number := :3; 

begin 
BEGIN OTHERPROC.OTHERPROC (1,TO_DATE(''2012-10-03'', ''YYYY-MM-DD''),TO_DATE(''2012-10-03'', ''YYYY-MM-DD''),0); 
END; 
INSERT INTO TP_EMPLOYEES ( 
        ID, 
            EMPLOYEECODE
) 


SELECT ROWNUM, 
       EMPLOYEECODE
FROM ( 

SELECT EMPLOYEECODE
   FROM (SELECT DISTINCT EMPLOYEECODE FROM TP_EEF_TEMP) DISTINCTEMPCODES) A; 
end; ';

EXECUTE IMMEDIATE
    mySQL
    using 
    pADMINDATE,
    pEMPLOYEEIDLIKE,
    pINCLUDEEMPLOYEE;

問題の原因はデータベースのバージョンではなく、権限でしょうか? 非動的SQLで定期的に行う別のストアドプロシージャをそれ自体で呼び出します。

ここで途方にくれる

ありがとう

4

2 に答える 2

0

キャリッジリターンでした!この行を追加すると問題が修正されました

pQUERY2 := REPLACE(pQUERY, chr(13));

同様の問題がここで強調されました

https://forums.oracle.com/forums/thread.jspa?threadID=1117462

とにかく答えてくれてありがとう。Oracleがこれに敏感になる設定/パッチ/何かを知りたいと思っている人がいれば、つまり、顧客が使用していたバージョンを含む3つの異なるバージョンのOracleでこれを試しましたが、 10.2.1 バージョンにパッチを当てません。パッチで修正されるものですか?設定ですか?

于 2012-10-04T13:49:36.290 に答える
0

「このサーバーでは機能するが、そのサーバーでは機能しない」タイプの問題を以前に発見しました。

通常、これは暗黙的な日付 <-> varchar 変換に関連しています。異なるデータベース サーバーは異なるデフォルト形式を持つ可能性があるため、暗黙的な変換を含むステートメントがある場所では機能し、別の場所では失敗する可能性があります。

pADMINDATE日付変数を削除して例を実行することをお勧めします。

于 2012-10-04T08:33:48.083 に答える