Limites liées aux UDF SQL

Cette rubrique décrit les limitations en vigueur pour les gestionnaires écrits en SQL.

Les contraintes de type d’argument et de renvoi sont parfois ignorées

Certaines caractéristiques de type déclarées pour un argument ou une valeur de retour seront ignorées lors de l’appel de l’UDF. Dans ces cas, la valeur reçue peut être utilisée telle quelle, qu’elle soit ou non conforme aux contraintes spécifiées dans la déclaration.

Les éléments suivants sont ignorés pour les UDFs dont la logique est écrite en SQL :

  • Précision et échelle pour les arguments et les valeurs de retour de type NUMBER

  • Longueur des arguments et des valeurs de retour de type VARCHAR

Exemple

Le code de l’exemple suivant déclare que l’argument arg1 et la valeur de retour doivent être un VARCHAR d’une longueur maximale d’un caractère. Cependant, l’appel à cette fonction avec un arg1 dont la valeur est supérieure à un caractère aboutira comme si la contrainte n’était pas spécifiée.

CREATE OR REPLACE FUNCTION tf (arg1 VARCHAR(1))
RETURNS VARCHAR(1)
LANGUAGE SQL AS 'SHA2(a)';
Copy

Les instructions SQL dynamiques ne sont pas prises en charge en cas de référence à des objets de base de données

La référence à des objets de base de données à l’aide d’instructions SQL dynamiques produira une erreur qui comprendra un texte tel que le suivant :

Compilation of SQL UDF failed: SQL compilation error: syntax error... unexpected '<variable_name>'

Si vous devez construire des instructions SQL dynamiques qui utilisent différents objets de base de données, écrivez le gestionnaire dans un langage autre que SQL.

Exemple

Le code de l’exemple suivant échouera, parce qu’il utilise la fonction IDENTIFIER pour faire référence à une table dont le nom est spécifié dynamiquement via la variable table_name_parameter.

CREATE OR REPLACE FUNCTION profit2(table_name_parameter VARCHAR)
  RETURNS NUMERIC(11, 2)
  AS
  $$
    SELECT SUM((retail_price - wholesale_price) * number_sold)
        FROM IDENTIFIER(table_name_parameter)
  $$
  ;
Copy