2010-07-26 6 views
5

Recientemente, encontré un gatillo BEFORE INSERT OR UPDATE en una tabla. En este desencadenador, el autor se basa en las funciones INSERTING y UPDATING (ambos devuelven un BOOLEAN) del paquete DBMS_STANDARD para determinar si el desencadenador se disparó antes de una inserción o antes de una actualización.¿Deberían utilizarse procedimientos y/o funciones del paquete DBMS_STANDARD en el código PL/SQL?

Por ejemplo:

CREATE OR REPLACE TRIGGER CUSTOMER_TRIGGER 
    BEFORE INSERT OR UPDATE ON CUSTOMER 
    FOR EACH ROW 
BEGIN 
    IF INSERTING THEN 
    /* Some code */ 
    END IF; 

    IF UPDATING THEN 
    /* Some other code */ 
    END IF; 
END; 

Sí, sé que dos, disparadores individuales podrían haber sido escritos para manejar los dos eventos por separado. Ese no es el punto de esta pregunta.

Después de solucionar un error que recibían estas funciones, recibimos la información (del Soporte de Oracle) de que "las rutinas dbms_standard realmente no deben ser llamadas por los programas del usuario". ¿Es esto cierto?

Me parece un poco extraño, teniendo en cuenta que otros procedimientos (como RAISE_APPLICATION_ERROR y COMMIT) se utilizan comúnmente en el código PL/SQL.

+0

¿Tiene una nota de metalink u otra cosa que el público (o al menos el público con licencia de Oracle) pueda ver? Y si no se usan las llamadas INSERTING/UPDATING a STANDARD en los desencadenantes, ¿exactamente cuándo se usarían? –

+0

@ Adam: No, este consejo no proviene de una nota de Metalink. Por el contrario, proviene directamente de Oracle Support en una solicitud de servicio. –

Respuesta

9

Las funciones INSERTAR, ACTUALIZAR y ELIMINAR se proporcionan expresamente para utilizar al escribir el código de activación (ver trigger documentation), por lo que no hay absolutamente ninguna proscripción contra su uso. Del mismo modo, RAISE_APPLICATION_ERROR es documented para ser diseñado por los desarrolladores.

Acaba de DESCribir DBMS_STANDARD hay algunas funciones que no conozco y que tal vez no deberían usarse en su propio código (por lo que sé) como GRANTEE.

Generalmente, si puede encontrar la documentación oficial de Oracle que le indica cómo usar algo, entonces está bien usarlo.

+0

¡Excelentes puntos! Hablaremos con Oracle para aclararlo. –

+1

Sospecho que un analista de nivel 1 dijo "aha, DBMS_STANDARD no está documentado, y mi útil portátil dandy les dice a los clientes que no utilicen parámetros o características no documentadas sin nuestra guía". –

Cuestiones relacionadas