Oracle错误PLS-00103:遇到符号“(”

时间:2013-05-22 09:05:29

标签: oracle

我写了下面的包。 当我编译它时,我得到以下错误:

PLS-00103: Encountered the symbol "("
Line 42 Column 66

哪个是“PROCEDURE p_fail”

我很无奈。我搜索了互联网,但没有找到任何帮助我的东西。 有没有人有想法?

非常感谢提前。

CREATE OR REPLACE PACKAGE BODY boxi_rep.pck_jk_test AS
PROCEDURE p_main
IS
    err_num         NUMBER;
    err_msg         VARCHAR2 (200);
BEGIN
    boxi_rep.pck_jk_test.p_start;
    boxi_rep.pck_jk_test.p_truncate;
EXCEPTION
    WHEN OTHERS
    THEN
        err_num     := SQLCODE;
        err_msg     := SUBSTR (SQLERRM, 1, 200);
        boxi_rep.pck_jk_test.p_fail (err_num, err_msg);
END;

PROCEDURE p_start
IS
BEGIN
    /*Make start entry into Log_Jobs*/
    DELETE FROM log_jobs
     WHERE job_id = '1501'
        AND TRUNC (datum) = TRUNC (SYSDATE)
        AND end_timestamp IS NULL;


    INSERT INTO log_jobs (job_id,
                                 job_name,
                                 datum,
                                 start_timestamp)
    VALUES ('1501',
              'V$Re_Schedule TEST',
              TRUNC (SYSDATE),
              SYSDATE);

    COMMIT;
END;



PROCEDURE p_fail (in_err_code IN NUMBER, in_err_msg IN VARCHAR2 (200))
IS
BEGIN
    UPDATE log_jobs
        SET end_timestamp = SYSDATE,
             status       = 'FAILED  - ' || in_err_code || ' - ' || in_err_msg,
             duration     = TO_CHAR (TO_DATE ('00:00:00', 'hh24:mi:ss') + (SYSDATE - start_timestamp), 'hh24:mi:ss')
     WHERE job_id = '1501'
        AND end_timestamp IS NULL;

    COMMIT;
END;

PROCEDURE p_truncate
IS
BEGIN
    EXECUTE IMMEDIATE 'TRUNCATE TABLE boxi_rep.jk_test';
END;
END pck_jk_test;

2 个答案:

答案 0 :(得分:3)

请参阅http://docs.oracle.com/cd/B19306_01/appdev.102/b14251/adfns_packages.htm#i1006401

  

参数列表中不允许使用数字约束类型,例如NUMBER(2)或VARCHAR2(20)。

更改

PROCEDURE p_fail (in_err_code IN NUMBER, in_err_msg IN VARCHAR2 (200))

PROCEDURE p_fail (in_err_code IN NUMBER, in_err_msg IN VARCHAR2)

答案 1 :(得分:2)

输入和输出参数

不允许使用varchar2的大小
 PROCEDURE p_fail (in_err_code IN NUMBER, in_err_msg IN VARCHAR2)
IS
BEGIN
    UPDATE log_jobs
        SET end_timestamp = SYSDATE,
             status       = 'FAILED  - ' || in_err_code || ' - ' || in_err_msg,
             duration     = TO_CHAR (TO_DATE ('00:00:00', 'hh24:mi:ss') + (SYSDATE -      start_timestamp), 'hh24:mi:ss')
     WHERE job_id = '1501'
        AND end_timestamp IS NULL;

    COMMIT;
 END;