es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Oracle PL/SQL: los paquetes tienen constantes definidas como (implícitamente) no nulas.

¿Hay algún impacto positivo o negativo (de rendimiento) si las constantes en paquetes/procedimientos/funciones de Oracle se definen como (implícitamente) not null? Por ejemplo:

// Varchar2
C_LF_V1 constant varchar2(1) := chr(10);
C_LF_V2 constant varchar2(1) not null := chr(10);
// PLS number
C_MAX_PLS_STR_LENB_V1 constant pls_integer := 32767;
C_MAX_PLS_STR_LENB_V2 constant pls_integer not null := 32767;
C_MAX_PLS_STR_LENB_V3 constant positiven := 32767;
C_MAX_PLS_STR_LENB_V4 constant simple_integer := 32767;
// Date
C_MAX_DATE_V1 constant date := date ‘9999-12-31’
C_MAX_DATE_V2 constant date not null := date ‘9999-12-31’
// …

La documentación no es específica en absoluto para estos detalles, como suele suceder con demasiada frecuencia. Se ha verificado desde la versión 11 hasta la 19 (en caso de que realmente sea específico de la versión, sería de interés la implementación a partir de la versión 19).

Por supuesto, es posible/fácil realizar algunas pruebas, pero eso solo proporcionaría resultados específicos de la plataforma/versión/máquina, mientras que la implementación/lógica conceptual a nivel bajo es mucho más interesante, es decir:

¿Se compilará (implícitamente) not null como se conoce que no es NULL o causará una comprobación de NULL cada vez que se acceda?

Actualización (aclaración):
– Mi pregunta se refiere a constantes que se sabe que son NOT NULL (por lo que no se trata del manejo de NULL).
– No me interesa afinar para obtener nanosegundos, quiero saber qué sucede realmente en el fondo; por ejemplo, para simple_integer, el documento dice que puede hacer que los cálculos pesados sean más eficientes, lo que implica que al compilar “sabe” que tal variable nunca puede ser NULL -> ¿entonces esta implicación también se aplica, por ejemplo, a un date definido como NOT NULL? – o un poco más complicado, ¿a un varchar2? (donde se permite definir un subtipo NOT NULL pero no tiene sentido ya que el atributo de nulabilidad se ignora)

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Según la documentación de Oracle, no hay una mención específica del impacto en el rendimiento al definir constantes como (implícitas) not null. Sin embargo, generalmente se recomienda definir variables con las restricciones apropiadas NOT NULL o NULL para asegurar la integridad de los datos y la legibilidad del código.

    En términos de impacto en el rendimiento, es probable que sea insignificante o mínimo. El compilador de Oracle debería ser capaz de optimizar el código de tal manera que se tenga en cuenta la restricción NOT NULL y no se realice una comprobación de nulidad en cada acceso. Sin embargo, aún depende de la implementación específica y la versión de Oracle que se esté utilizando.

    Vale la pena señalar que definir constantes como not null puede ser más relevante para tipos de datos numéricos como simple_integer o positiven donde el compilador puede hacer que los cálculos pesados sean más eficientes si “sabe” que la variable nunca puede ser NULL. En el caso de varchar2, se permite definir un subtipo NOT NULL, pero es posible que no tenga sentido ya que el atributo de nulidad se ignora.

    En general, se recomienda definir constantes con las restricciones adecuadas NOT NULL o NULL por razones de integridad de datos y legibilidad, pero es probable que el impacto en el rendimiento sea mínimo.

Comments are closed.