oracle - length - ¿Hace algo?
sql developer count distinct (3)
Siendo todavía un novato en PL / SQL, he estado copiando y pegando alrededor del siguiente activador:
CREATE OR REPLACE TRIGGER FOO_TRG1
BEFORE INSERT
ON FOO
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
BEGIN
IF :NEW.FOO_ID IS NULL THEN
SELECT FOO_SEQ1.NEXTVAL INTO :NEW.FOO_ID FROM DUAL;
END IF;
EXCEPTION
WHEN OTHERS THEN RAISE;
END FOO_TRG1;
/
ALTER TRIGGER FOO_TRG1 ENABLE;
Sospecho que el código de manejo de excepciones incluido no hace nada en absoluto y simplemente podría eliminarse, ya que de todos modos aparece un mensaje de error si algo sale mal. Estoy en lo cierto?
(Supongo que dicho código es el resultado de una edición posterior del código anterior).
No hace nada en absoluto, pero enmascara la línea de error, como puntos @DazzaL. Pero sirve como un recordatorio, ya que le dice que el código anterior puede generar una excepción que debe tratarse pero el tratamiento sigue sin estar definido.
En otros lenguajes de programación, puede crear un bloque try / catch automáticamente (por ejemplo, en Eclipse / Java, Netbeans / PHP o Visual Studio / C #), y se crea con un catch (como el de "otros") cuyo comportamiento predeterminado es lanzar nuevamente la excepción, mientras que el programador decide qué se debe hacer cuando se presenta una excepción.
No solo no hace nada en absoluto, sino que está al borde del criminal. Básicamente dice: "Sólo por diversión, voy a fingir que el error ocurrió en esta línea en lugar de la línea real".
El manejo de excepciones es el aspecto más incomprendido de todo el lenguaje. Lo anterior es muy común, y creo que se deriva de la idea errónea básica de que una "excepción no controlada" es algo malo (casi plantea la pregunta: ¿por qué no lo manejó?). Si solo Oracle hubiera utilizado la terminología ''excepción'' o ''excepción encontrada'', nosotros, los pobres que tenemos que respaldar este código tendríamos muchos menos controladores de excepciones ''CUANDO LOS DEMÁS'' que hagan que nuestras vidas sean miserables.
Sí, esa excepción no hace más que levantar el mismo error. También sirve para enmascarar el número de línea real del error. Yo eliminaría eso si fuera tú.
p.ej:
SQL> declare
2 v number;
3 begin
4 select 1 into v from dual;
5 select ''a'' into v from dual;
6 exception
7 when others
8 then
9 raise;
10 end;
11 /
declare
*
ERROR at line 1:
ORA-06502: PL/SQL: numeric or value error: character to number conversion error
ORA-06512: at line 9
vs:
SQL> declare
2 v number;
3 begin
4 select 1 into v from dual;
5 select ''a'' into v from dual;
6 end;
7 /
declare
*
ERROR at line 1:
ORA-06502: PL/SQL: numeric or value error: character to number conversion error
ORA-06512: at line 5
el número de línea en el primero está apuntando a la subida en lugar del número de línea real. Puede hacer que el seguimiento de errores sea más difícil.