[Tip] Excepciones

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
  

Notael Mar, 22 Feb 2005 10:54 am

Algunas excepciones predefinidas, para la gente que le gusta y todo trinks!!!!!!

Código: Seleccionar todo
Exception                 ||  Error    ||  SQLCODE Value
-----------------------------------------------
ACCESS_INTO_NULL          || ORA-06530 || -6530
COLLECTION_IS_NULL        || ORA-06531 || -6531
CURSOR_ALREADY_OPEN       || ORA-06511 || -6511
DUP_VAL_ON_INDEX          || ORA-00001 || -1
INVALID_CURSOR            || ORA-01001 || -1001
INVALID_NUMBER            || ORA-01722 || -1722
LOGIN_DENIED              || ORA-01017 || -1017
NO_DATA_FOUND             || ORA-01403 || +100
NOT_LOGGED_ON             || ORA-01012 || -1012
PROGRAM_ERROR             || ORA-06501 || -6501
ROWTYPE_MISMATCH          || ORA-06504 || -6504
SELF_IS_NULL              || ORA-30625 || -30625
STORAGE_ERROR             || ORA-06500 || -6500
SUBSCRIPT_BEYOND_COUNT    || ORA-06533 || -6533
SUBSCRIPT_OUTSIDE_LIMIT   || ORA-06532 || -6532
SYS_INVALID_ROWID         || ORA-01410 || -1410
TIMEOUT_ON_RESOURCE       || ORA-00051 || -51
TOO_MANY_ROWS             || ORA-01422 || -1422
VALUE_ERROR               || ORA-06502 || -6502
ZERO_DIVIDE               || ORA-01476 || -1476
estas excepciones se devuelven para cualquier aplicación que ejecute comandos en una base de datos de Oracle ahora una descripción de todos los errores se encuentran en el oráculo de Errors8i Manual que se puede encontrar en: http://www.oracle.com/pls/ db92 / db92. error_search? = & observación prefill homepage = ORA en ASP. Por ejemplo podríamos conseguir este mensaje en un bloque de red: falou
Código: Seleccionar todo
try
{
   objConn.Open(); 
   OracleDataReader objReader = objCmd.ExecuteReader();
   while (objReader.Read())
   {
      Response.Write(objReader.GetString(0) + "<br>");
   }
   objReader.Close();
}
catch( OracleException ex )
{
   Response.Write( ex.Message );
}
finally
{
   objConn.Close();
}
.

[de]
MuLtAnI
Ubicación: Videira - SC

Notael Vie, 21 Ago 2009 10:16 am

Chicos... Necesito hacer el manejo de error específico. tipo:
Código: Seleccionar todo
ORA-06502: PL/SQL: numeric or value error: character to number conversion error                                                               
ORA-06512: at "SIG.PRC_IMP_BASE_GENERICA", line 188                                                                                                 
ORA-00942: table or view does not exist 
y a grabar en el registro de los procedimientos... como la estructura siguiente:
Código: Seleccionar todo
exception
  when vException then
    vRet:= sig.fnc_add_log('PRC_CARGA_FTO_ACCOUNT_SRV_NEW'
                          ,10
                          ,'E'
                          ,vLog
                          ,null
                          ,'Tabelas auxiliares de carga não encontradas'
                          ,vValor);
    if vRet = -1 then
       dbms_output.put_line('ERRO NO INSERT DO LOG');
    end if;                           
--    raise;
  when others then
    vMsg:= sqlerrm;
    vRet:= sig.fnc_add_log('PRC_CARGA_FTO_ACCOUNT_SRV_NEW'
                          ,10
                          ,'E'
                          ,vLog
                          ,null
                          ,vMsg
                          ,vValor);
    if vRet = -1 then
       dbms_output.put_line('ERRO NO INSERT DO LOG');
    end if;                         
como puedo hacer esto-por los errores específicos que he citado anteriormente y que no más de veinte años, me pregunto??
mariogus
Ubicación: Porto Alegre - RS

Notael Vie, 21 Ago 2009 10:56 am

¿Tipo de belleza? Usted puede definir sus propias excepciones usando la Directiva de compilación EXCEPTION_INIT PRAGMA.
Ponerlo en la sección DECLARE el tu bloque, así:
Código: Seleccionar todo
DECLARE
  v_teste number;
  conversao_numero EXCEPTION;
  PRAGMA EXCEPTION_INIT(conversao_numero, -06502);
BEGIN
   v_teste := to_number('A'); -- converter A para número vai dar erro!
EXCEPTION
  WHEN conversao_numero THEN
    dbms_output.put_line('Erro de conversao: ' || SQLERRM);
  WHEN OTHERS THEN
    dbms_output.put_line('Erro: ' || SQLERRM);
    raise; -- propaga, por exemplo, se não for nenhum dos erros esperados...
END;
es simplemente crear una excepción para el ORA-código XXXXX que usted quiere, y se puede utilizar como si fuese el preset que tienes en el post anterior.
Puede establecer en el paquete de para su reutilización en otros programas así y es más elegante el código porque no hay que restablecer las excepciones en cada procedimiento que haces, es simplemente reutilizar y cambio centrado en el paquete:
Código: Seleccionar todo
create or replace PACKAGE erros_pack AS
  erro_conversao_numero EXCEPTION;
  PRAGMA EXCEPTION_INIT(erro_conversao_numero, -06502);
  erro_select_into EXCEPTION;
  PRAGMA EXCEPTION_INIT(erro_select_into, -01422);
END erros_pack;
y luego ejecutar el programa así:
Código: Seleccionar todo
DECLARE
  v_teste number;
BEGIN
   --v_teste := to_number('A'); -- converter A para número vai dar erro!
   select 1 into v_teste
    from dual
   union select 2 from dual; -- select into retorna duas linhas, vai dar erro!
EXCEPTION
  WHEN erros_pack.erro_select_into THEN
    dbms_output.put_line('Erro ORA' || SQLCODE || ': Select Into retornou mais de uma linha');
  WHEN erros_pack.erro_conversao_numero THEN
    dbms_output.put_line('Erro de conversao: ' || SQLERRM);
  WHEN OTHERS THEN
    dbms_output.put_line('Erro: ' || SQLERRM);
    raise; -- propaga, por exemplo, se não for nenhum dos erros esperados...
END;
fsitja
Ubicación: Gaúcho no Rio de Janeiro - RJ

"The scars exist to remind us that the past was real"
Campanha: Como fazer uma pergunta e obter uma resposta.
http://tkyte.blogspot.com/2005/06/how-t ... tions.html

OCA & OCP Developer — OCE SQL Expert — OCS Data Warehousing Specialist



Volver a PL/SQL

¿Quién está conectado?

Usuarios navegando por este Foro: Google [Bot] y 16 invitados

cron