Limitações de SQL da UDF

Este tópico descreve as limitações para manipuladores escritos em SQL.

As restrições de tipo de argumento e retorno às vezes são ignoradas

Certas características de tipo declaradas para um valor de retorno ou argumento serão ignoradas quando a UDF é chamada. Nesses casos, o valor recebido pode ser usado como recebido, esteja ou não em conformidade com as restrições especificadas na declaração.

Os seguintes são ignorados para UDFs cuja lógica está escrita em SQL:

  • Precisão e escala para valores de retorno ou argumento do tipo NUMBER

  • Comprimento para valores de retorno ou argumento do tipo VARCHAR

Exemplo

O código no exemplo a seguir declara que o argumento arg1 e o valor de retorno deve ser um VARCHAR com apenas um caractere. No entanto, chamar essa função com um arg1 cujo valor é maior que um caractere terá sucesso como se a restrição não tivesse sido especificada.

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

O SQL dinâmico não é suportado ao se referir a objetos de banco de dados

Fazer referência a objetos de banco de dados usando SQL dinâmico produzirá um erro que inclui texto como o seguinte:

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

Se você precisar construir instruções SQL dinâmicas que usem diferentes objetos de banco de dados, considere escrever um procedimento armazenado. Você pode escrever procedimentos armazenados em uma das seguintes linguagens:

Exemplo

O código no exemplo a seguir falhará porque usa a função IDENTIFIER para fazer referência a uma tabela cujo nome é especificado dinamicamente com a variável 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