Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá gostaria de saber se tem como eu gerar minhas proprias exception dentro das procedures, com minhas mensagens personalizadas...? dai pararia o script PHP retornando o erro especifico do banco...?
Gostaria de se possível guarda o erro de sql conforme o oracle faz? alguém sabe se tem como fazer?
Ola andersonpda!
Se eu entendi bem o que você quer lhe digo que é possivel sim executar tal tarefa.
Vou postar um exemplo básico de uma procedure que uso nos sistemas que desenvolvo:
Criação da tabela:
A procedure abaixo servirá para popular a tabela criada acima
CREATE PROCEDURE
sp_nome_procedure(IN var_nome_cidade VARCHAR(100), OUT resposta VARCHAR(50))SALVAR:BEGIN
END
No script sao passados 2 parametros, 1 de entrada (IN) e outro de saida (OUT). É com este valor de saida que você irá interagir com o php.
Após o BEGIN é declarada uma variavel chamada "excecao" e define-se a mesma do tipo SMALLINT que por padrão possui valor 0.
Na linha abaixo declara-se que se o sql cair na exceção a variavel irá obter valor 1.
Logo inicia-se a transação, após a query (poderão existir várias querys) existe um IF para verificar o valor da variavel excecao, caso seja 1 (caso o sql caiu no exception) é setado a mensagem de erro na variavel "resposta", em seguida é dado o ROLLBACK na base para limpar todas as alteraçoes feitas com as querys e logo a procedure é encerrada com o operador LEAVE.
Caso o sql não tenha caido o exception a resposta é setada com uma mensagem de ok e logo é feita a validação de todas as alterações com o operador COMMIT.
Detalhe: o commit e o rollback só ira funcionar caso a tabela seja criada com o tipo INNODB, pois este garante a integridade dos dados inseridos, MYISAM não dá suporte a transações.
Aqui está pronta a parte do BD, agora vem o php...
<?php
//chamar a procedure
$sql = "CALL sp_nome_procedure('JARAGUA DO SUL', @resposta);
// executa query
$query = mysql_query($sql);
// busca valor de saida (OUT) da procedure
$busca_resposta = mysql_query("SELECT @resposta");
// com a funcao mysql_result vamos atribuir este resultado em uma variavel
$resultado = mysql_result($busca_resposta, 0, "@resposta");
// mostra resposta vinda do banco
Detalhe: O parâmetro de saida é chamado acompanhado do "@"
Acho que é isso
Espero ter ajudado!
Abraço!