以下に示すように、動的SQLを実行するストアドプロシージャがあります。私はそれを可能な限り削減しようとしたので、小さなエラーは無視してください.
オフィスでは、いつでも、、、で機能11.2
し10.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で定期的に行う別のストアドプロシージャをそれ自体で呼び出します。
ここで途方にくれる
ありがとう