存储过程CREATE OR REPLACE PROCEDURE PRO_TEST(V_PNAME   varchar2,
                                         V_CHANNEL number) AUTHID CURRENT_USER IS
  ERR1               T_ROVER_ALERT.MSG%type;
  TOM_IP             T_ROVER_ALERT.Alertname%type;
  TOM_SQLCODE        T_ROVER_ALERT.ALERTKEY%type;
  PRONAME            T_PRO_PARAMETER.PRO_NAME%TYPE;
  begin
    SELECT SYS_CONTEXT('USERENV', 'IP_ADDRESS') INTO TOM_IP FROM DUAL;
    
      INSERT INTO T_ROVER_ALERT
    (ID,
     ALERTNAME,
     ALERTKEY,
     ALERTDATE,
     DATETIME,
     FLAG,
     MSG,
     ALARTERR,
     ALERTLEVEL)
  VALUES
    (SEQ_ROVER_ALERT.NEXTVAL,
     'PRO_TEST',
     TOM_IP,
     v_pname,
     SYSDATE,
     0,
     '999',
     '999',
     v_channel);
  COMMIT;
  dbms_lock.sleep(20);
  end;
使用的代码块begin   
dbms_scheduler.drop_job('job_PRO_TEST');
DBMS_SCHEDULER.CREATE_JOB(
job_name => 'job_PRO_TEST',                                 
job_type => 'STORED_PROCEDURE',
job_action => 'PRO_TEST',
number_of_arguments => 2,
start_date => sysdate,
end_date => NULL,
repeat_interval => 'trunc(sysdate)+13/24+5/24/60',
enabled => FALSE);
DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE(job_name => 'job_PRO_TEST',argument_position => 1,argument_value => '10');
DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE(job_name => 'job_PRO_TEST',argument_position => 2,argument_value =>99);
DBMS_SCHEDULER.ENABLE('job_PRO_TEST');
DBMS_SCHEDULER.RUN_JOB('job_PRO_TEST');
end;
/SQL> 
SQL> 
SQL> begin   
  2  dbms_scheduler.drop_job('job_PRO_TEST');
  3  DBMS_SCHEDULER.CREATE_JOB(
  4  job_name => 'job_PRO_TEST',                                 
  5  job_type => 'STORED_PROCEDURE',
  6  job_action => 'PRO_TEST',
  7  number_of_arguments => 2,
  8  start_date => sysdate,
  9  end_date => NULL,
 10  repeat_interval => 'trunc(sysdate)+13/24+5/24/60',
 11  enabled => FALSE);
 12  DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE(job_name => 'job_PRO_TEST',argument_position => 1,argument_value => '10');
 13  DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE(job_name => 'job_PRO_TEST',argument_position => 2,argument_value =>99);
 14  DBMS_SCHEDULER.ENABLE('job_PRO_TEST');
 15  DBMS_SCHEDULER.RUN_JOB('job_PRO_TEST');
 16  end;
 17  /
begin
*
ERROR at line 1:
ORA-01438: value larger than specified precision allowed for this column
ORA-06512: at "SYS.DBMS_ISCHED", line 150
ORA-06512: at "SYS.DBMS_SCHEDULER", line 441
ORA-06512: at line 15
SQL> ora-01438

解决方案 »

  1.   

    表中字段的长度完全够的SQL> desc T_ROVER_ALERT;
     Name                                      Null?    Type
     ----------------------------------------- -------- ----------------------------
     ALERTNAME                                          VARCHAR2(50)
     ALERTKEY                                           VARCHAR2(50)
     ALERTDATE                                          VARCHAR2(50)
     DATETIME                                  NOT NULL DATE
     FLAG                                               NUMBER
     MSG                                                VARCHAR2(140)
     ALARTERR                                           VARCHAR2(250)
     ALERTLEVEL                                         NUMBER(1)
     ID                                        NOT NULL NUMBER(38)SQL>