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’?
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 conNOW()
. 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.