CREATE PROCEDURE e CREATE FUNCTION


A cláusula RETURNS pode ser especificada apenas por uma FUNCTION. É usada para indicar o tipo de retorno da função, e o corpo da função deve conter uma instrução RETURN value.

A lista de parâmetros entre parenteses deve estar sempre presente. Se não houver parâmetros, uma lista de parâmetros vazia de () deve ser usada. Cada parâmetro é um parâmetro IN por padrão. Para especificar outro tipo de parâmetro, use a palavra chave OUT ou INOUT antes do nome do parâmetro. Especificar IN, OUT ou INOUT só é valido para uma PROCEDURE.

A instrução CREATE FUNCTION é usada em versão novas do MariaDB para suporte a UDFs (User Defined Functions - Funções Definidas pelo Usuário). Leia "Adicionando Novas Funções ao MySQL". As UDFs continuam a ser suportadas, mesmo com a existencia de stored functions. Uma UDF pode ser considerada como uma stored function externa. No entanto, note que stored functions compartilham os seus namespace com as UDFs.

Um framework para stored procedures externas serão introduzidas em um futuro próxima. Isto permitirá que você escreva stored procedures em outras linguagens além de SQL. Provavelmente, uma das primeiras linguagens a ser suportada sea PHP, já que o mecanismo do PHP é pequeno, seguro com threads e pode facilmente ser embutido. Como o framework será publico, é esperado que muitas outras linguagens também sejam suportadas.

Uma função é considerada deterministica se ela sempre retorna o mesmo resultado para os mesmos parâmetros de entrada, e não deterministica caso contrário. O otimizado pode usar este fato. Atualmente, a característica DETERMINISTIC é aceita, mas ainda não é usada.

A característica SQL SECURITY pode ser usada para especificar se a rotina deve ser executada usando as permissões do usuário que criou a rotina, ou o usuário que a chamou. O valor padrão é DEFINER. Este recurso é novo no SQL:2003.

O MariaDB ainda não usa o privilégio GRANT EXECUTE. Assim ,por enquanto, se um procedimento p1() chama a tabela t1,o usuário deve ter privilégios na tabela t1 para chamar o procedimento p1() corretamente.

MySQL stores the SQL_MODE settings in effect at the time a routine is created, and will always execute routines with these settings in force.

A cláusula COMMENT é uma extensão do MariaDB, e pode ser usada para descrever o stored procedure. Esta informação é exibida pelas instruções SHOW CREATE PROCEDURE e SHOW CREATE FUNCTION.

O MariaDB permite rotinas contendo instruções DDL (como CREATE e DROP) e instruções de transação SQL (como COMMIT). Isto não é exigido por padrão e depende de especificações de implementação.

NOTA: Atualmente, stored FUNCTIONs não podem conter referências às tabelas. Note que isto inclui algumas instruções SET, mas exclui algumas instruções SELECT. Esta limitação será retirada assim que possível.

A seguir temos um exemplo de uma stored procedure simples que usa um parâmetro OUT. O exemplo usa o comando delimiter do cliente MariaDB para alterar o delimitador de instrução para antes da definição do procedure. Isto permite que o delimitador ';' usado no corpo de procedure seja passado para o servidor em vez de ser interpretado pelo MariaDB.

mysql> delimiter |
mysql> CREATE PROCEDURE simpleproc (OUT param1 INT)
 -> BEGIN
 -> SELECT COUNT(*) INTO param1 FROM t;
 -> END
 -> |
Query OK, 0 rows affected (0.00 sec)
mysql> CALL simpleproc(@a)|
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT @a|
+------+
| @a |
+------+
| 3 |
+------+
1 row in set (0.00 sec)

A seguir esta um exemplo de uma função que utiliza um parametro, realiza uma operação usando uma função SQL e retorna o resultado:

Retornar