2011-06-09 3 views
0

Je l'insertion de données dans le tableau par cette déclaration:Pourquoi le code java.sql.SQLException: ORA-01438?

insert into CATEGORY_MASTER (
    CAT_MAS_ID, 
    DESCRIPTION, ORG_ID, STATUS, MODIFY_EMPID, LANGUAGE_ID, LG_IP_MAC) 
values ( 
    (SELECT COALESCE(MAX(ct.cat_mas_id), 0)+1 
    FROM category_master ct), 
    'fff', 2, 'A', 52,1,'SYSTEM/127.0.0.1/NOTDEFINE') 

La table cible a ce déclencheur:

create or replace trigger trg_aft_i_u_category_master 
    after insert OR UPDATE of cat_mas_id,status on category_master FOR EACH ROW 
DECLARE 
    CURSOR CSTYPE IS 
    SELECT CST.SUB_TYPE_ID,CST.TYPE_ID,CST.ORG_ID,CST.STATUS 
    FROM COMPLAINT_SUB_TYPE CST 
    WHERE CST.ORG_ID=:NEW.ORG_ID AND CST.STATUS='A'; 
    V_CSTYPE CSTYPE%ROWTYPE; 
BEGIN 
    IF CSTYPE%ISOPEN THEN 
    CLOSE CSTYPE; 
    END IF; 
    OPEN CSTYPE; 
    LOOP 
    FETCH CSTYPE INTO V_CSTYPE; 
    EXIT WHEN CSTYPE%NOTFOUND; 
    if INSERTING then 
     /******** Suspect issue here *******/ 
     INSERT INTO CATEGORY_DETAILS(
      CAT_DTL_ID, CAT_MAS_ID, TYPE_ID ,SUB_TYPE_ID, 
      ORG_ID,MAP_STATUS,MODIFY_EMPID,LANGUAGE_ID,LG_IP_MAC) 
     VALUES (SEQ_CATEGORY_DETAILS.NEXTVAL,:NEW.CAT_MAS_ID, 
      V_CSTYPE.TYPE_ID,V_CSTYPE.SUB_TYPE_ID,:NEW.ORG_ID,'U', 
      :NEW.MODIFY_EMPID,:NEW.LANGUAGE_ID,:NEW.LG_IP_MAC); 
     /************************************/ 
    end if; 
    if UPDATING then 
     if :new.status = 'I' then 
     UPDATE CATEGORY_DETAILS CD 
     SET CD.MAP_STATUS= 'U' 
     WHERE CD.CAT_MAS_ID=:NEW.CAT_MAS_ID AND CD.ORG_ID=:NEW.ORG_ID; 
     end if; 
    end if; 
    END LOOP; 
    CLOSE CSTYPE; 
end trg_aft_i_u_category_master; 
+0

même question encore une fois mais maintenant avec plus d'inormation. http://stackoverflow.com/questions/6290873/java-sql-sqlexception-ora-01438 –

+0

Je pense qu'il y a deux raisons importantes pour lesquelles les gens hésitent à vous aider. 1) Votre mise en forme est très médiocre 2) Au lieu de modifier une question existante, vous avez posté un doublon! – adarshr

+0

Je ne vois pas comment cela est lié à Java. Devrait être Oracle et PLSQL. Et vous pourriez vouloir mettre plus d'effort dans le formatage du code. Il est à peine lisible dans l'état actuel. –

Répondre

0

Le explanantion pour ORA-01438 est:

« valeur supérieure précision spécifiée autorisée pour cette colonne "

Ainsi, une de vos tables (pas nécessairement MASTER_CATEGORY) a une colonne numérique définie avec des chiffres significatifs, et votre code tente d'insérer un nombre trop grand.

Compte tenu de cette table ...

SQL> create table t42 (col1 number(5,2)); 

Table created. 
SQL> 

... nous pouvons insérer une valeur qui correspond à la déclaration:

SQL> insert into t42 values (123.45); 

1 row created. 

SQL> 

... la base de données arrondit décimales: suivi

SQL> insert into t42 values (12.345); 

1 row created. 

SQL> 

... et la base de données rejette la valeur lorsque l'élément de début est trop grand:

SQL> insert into t42 values (1234.5); 
insert into t42 values (1234.5) 
         * 
ERROR at line 1: 
ORA-01438: value larger than specified precision allowed for this column 

SQL> 

Cela devient maintenant un problème pour vous. Vous devez décrire vos tables pour voir quelles colonnes sont définies en tant que nombres précis, comme NUMBER(3) ou NUMBER(7,2). Ensuite, vérifiez les données que vous utilisez pour établir quelle valeur numérique est trop grande. Les techniques de débogage standard aideront.

Questions connexes