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)';
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)
$$
;