sintaxe
Descrição
cria um procedimento armazenado. Por padrão, uma rotina é associada com o banco de dados padrão. Para associar o routineexplicitamente a uma dada base de dados, indique o nome como db_name.diz o nome quando o criares.
Quando a rotina é invocada, um uso implícito db_name é realizado (andundone quando a rotina termina). Faz com que a rotina tenha o banco de dados padrão dado enquanto ele executa. USE declarações com rotinas seguidas são proibidas.,
Quando um procedimento armazenado foi criado, você o invoca usando a declaração CALL
(ver chamada).
para executar a declaração CREATE PROCEDURE
, é necessário ter o privilégio CREATE ROUTINE
privilégio. Por padrão, Mariadbautomaticamente concede os privilégios ALTER ROUTINE
e privilégios ao criador theroutine. Veja também os privilégios de rotina armazenados.,
a DEFINER
e as cláusulas de segurança SQL especificam o contexto de segurança a ser usado ao verificar os privilégios de acesso na hora de execução de rotina, conforme descrito mais tarde. Requer o super privilégio, ou, de MariaDB 10.5.2, o privilégio de usuário definido.
Se o nome de rotina é o mesmo que o nome de uma função SQL incorporada, você deve usar um espaço entre o nome e a seguinte matriz ao definir a rotina, ou um erro de sintaxe ocorre. Isto também é verdade quando você invocar a rotina mais tarde., Por esta razão, wesuggest que é melhor evitar reutilizar os nomes de funções SQL existentes para suas próprias rotinas armazenadas.
O modo SQL IGNORE_SPACE aplica-se às funções incorporadas, não às rotinas de armazenamento. É sempre permitido ter espaços após um nome de rotina, independentemente de IGNORE_SPACE estar habilitado.
a lista de parâmetros incluída entre parênteses deve estar sempre presente.Se não existirem parâmetros, deve ser utilizada uma lista de parâmetros vazia de (). Os nomes dos parâmetros não são sensíveis à capitalização.,
cada parâmetro pode ser declarado para usar qualquer tipo de dados válido, exceto que o atributo COLLATE não pode ser usado.
para os identificadores válidos a utilizar como nomes dos procedimentos, ver nomes dos identificadores.
IN/OUT/INOUT
cada parâmetro é um parâmetro IN
por padrão. Para especificar outro parâmetro fora, use a palavra-chave OUT
ou INOUT
antes do nome do parâmetro.
AnIN
parameter passa um valor para um procedimento., O procedimento pode alterar o valor, mas a modificação não é visível para o chamador quando o procedimento retorna. An OUT
parameter pass a value from the processure back to the caller. O seu valor inicial é nulo dentro do procedimento e o seu valor é visível para o autor da chamada quando o procedurereturna. Um parâmetro
é inicializado pelo chamador, pode ser modificado pelo procedimento, e qualquer alteração feita pelo procedimento é visível para o chamador quando o procedimento retorna.,
Para cada OUT
ou INOUT
parâmetro, passar uma variável definida pelo usuárioCALL
declaração de que invoca o procedimento, de modo que você pode obter itsvalue quando o procedimento retorna. Se você está chamando o procedimento de dentro de outro procedimento ou função armazenada, Você também pode passar o parâmetro aroutine ou variável de rotina local como um parâmetro IN
ou INOUT
.
DETERMINISTIC / NOT DETERMINISTIC
DETERMINISTIC
e NOT DETERMINISTIC
aplica-se apenas às funções., Especificar DETERMINISTC
ouNON-DETERMINISTIC
em procedimentos não tem efeito. O valor padrão é NOT DETERMINISTIC
. As funções são DETERMINISTIC
quando eles sempre retornam o mesmo valor para a mesma entrada. Por exemplo, uma função truncada ou substring. Qualquer função envolvendo dados, portanto, é sempre NOT DETERMINISTIC
.,
CONTÉM o SQL/SQL/LÊ os DADOS de SQL/MODIFICA de DADOS SQL
CONTAINS SQL
NO SQL
READS SQL DATA
e MODIFIES SQL DATA
são informativos cláusulas que dizer ao servidor que a função faz. MariaDB não verifica de forma alguma se a cláusula especificada está correta. Se nenhuma destas Cláusulas for especificada, CONTAINS SQL
é usado por padrão.
MODIFIES SQL DATA
significa que a função contém afirmações que podem modificar dados armazenados em bases de dados., Isto acontece se a função contiver instruções como DELETE, UPDATE, INSERT, REPLACE ou DDL.
READS SQL DATA
significa que a função lê dados armazenados em bases de dados, mas não modifica quaisquer dados. Isto acontece se forem usadas instruções de seleção, mas não são executadas operações de escrita.
CONTAINS SQL
significa que a função contém pelo menos uma declaração SQL, mas não lê ou escreve quaisquer dados armazenados em uma base de dados. Os exemplos incluem SET ou DO.,
NO SQL
não significa nada, porque MariaDB não suporta atualmente nenhuma língua que não seja SQL.
o routine_body consiste numa declaração de procedimento SQL válida. Isto pode ser uma declaração simples, como selecionar ou inserir, ou pode ser uma declaração complicada escrita usando BEGIN and END. As estatações compostas podem conter declarações, loops e outras estruturas de controle. Veja declarações Programáticas e compostas para detalhes de sintaxe.
MariaDB permite que as rotinas contenham declarações DDL, tais como CREATE
andDROP., MariaDB also allows stored procedures (but not stored functions)to contain SQL transaction statements such as COMMIT
.
para informações adicionais sobre afirmações que não são permitidas rotinas instored, veja limitações de rotina armazenadas.
invocar o procedimento armazenado de dentro dos programas
para obter informações sobre invocar os procedimentos armazenados de dentro dos programas escritos numa linguagem que tem uma interface MariaDB/MySQL, ver chamada.
ou substituir
MariaDB a partir de 10.1.,3
Se o opcional OR REPLACE
é utilizada a cláusula, ela funciona como um atalho para:
DROP PROCEDURE IF EXISTS name;CREATE PROCEDURE name ...;
com a excepção de que qualquer um já existente privilégios para o procedimento não são ignorados.
sql_mode
MariaDB armazena a configuração variável do sistema sql_mode que está em vigor no momento em que uma rotina é criada, e sempre executa a rotina com esta configuração em vigor, independentemente do modo SQL do servidor em Efeito quando a rotina é invocada.
Conjuntos de caracteres e colações
parâmetros do procedimento podem ser declarados com qualquer conjunto de caracteres / colação., Se o conjunto de caracteres e a colação não forem especificamente definidos, os valores por omissão da base de dados no momento da criação serão usados. Se o banco de dados de padrões de mudança em uma fase posterior, o procedimento armazenado conjunto de caracteres/agrupamento não será alterada ao mesmo tempo; o procedimento armazenado precisa ser eliminada e recriada para garantir o mesmo conjunto de caracteres/agrupamento como o banco de dados é usado.
modo Oracle
MariaDB começando com 10.3
de MariaDB 10.3, um subconjunto da linguagem Oracle PL/SQL tem sido suportado, além da tradicional sintaxe MariaDB baseada em SQL/PSM., Veja o modo Oracle de MariaDB 10.3 para detalhes sobre as alterações ao executar o modo Oracle.
exemplos
o exemplo seguinte mostra um procedimento simples armazenado que usa um id
parâmetro. Ele usa o comando DELIMITER para definir um novo delimitador para a duração do processo — ver delimitadores no cliente mysql.,
conjunto de Caracteres e collation:
CRIAR OU SUBSTITUIR:
Veja Também:
- Nomes de Identificador
- Procedimento Armazenado Visão geral
- ALTER PROCEDURE
- DROP PROCEDURE
- MOSTRAR CREATE PROCEDURE
- MOSTRAR PROCEDIMENTO de ESTADO
- Armazenados Rotina de Privilégios
- Esquema de Informações ROTINAS de Tabela