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.

Función determinista/volátil en SQL.

Tomemos una función determinista básica y una no determinista:

  • ABS(2)
  • NOW()

¿Qué pasa con el tercer caso de algo que puede cambiar pero no estamos seguros, como lo siguiente:

SELECT
    ABS(2) -- determinista
  , NOW()  -- no determinista
  , getTableCount(otherTbl) -- función que hace un 'SELECT count(1) FROM table'
FROM
    table

Básicamente, si se inserta o elimina una fila, el valor del subselect cambiará. ¿Entonces éste se consideraría determinista? El resultado siempre debería ser el mismo… a menos que se cambie el dato subyacente, así que es casi como un tercer caso. ¿O se considera que volátil/no determinista simplemente significa ‘si cambia en cualquier circunstancia, entonces es volátil’?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El tercer caso de la función getTableCount(otherTbl) se consideraría no determinista porque su resultado depende del estado de la tabla en el momento de la ejecución. Aunque el resultado siempre debería ser el mismo para un estado dado de la tabla, el hecho de que pueda cambiar con cambios en los datos subyacentes lo hace no determinista. Por lo tanto, se clasificaría como una función no determinista, junto con NOW(). El término volátil/no determinista está destinado a transmitir que cualquier cambio en los datos subyacentes, por pequeño o improbable que sea, puede afectar el resultado de la función.

Comments are closed.