Exceptions MySQL
20/05/2015
0
Bom eu gostaria de saber como faço para capturar um exception (ex. EXCEPTION WHEN DUP_VAL_ON_INDEX THEN) e envia-la para linguagem hospedeira em uma procedure do MYSQL.
Luis Calegari
Post mais votado
22/05/2015
Marisiana Battistella
Mais Posts
21/05/2015
Marisiana Battistella
Eu não encontrei um exemplo no MySQL, mas no Oracle seri assim:
CREATE OR REPLACE PROCEDURE add_new_supplier (supplier_id_in IN NUMBER, supplier_name_in IN VARCHAR2) IS BEGIN INSERT INTO suppliers (supplier_id, supplier_name ) VALUES ( supplier_id_in, supplier_name_in ); EXCEPTION WHEN DUP_VAL_ON_INDEX THEN raise_application_error (-20001,'You have tried to insert a duplicate supplier_id.'); WHEN OTHERS THEN raise_application_error (-20002,'An error has occurred inserting a supplier.'); END;
22/05/2015
Luis Calegari
Então esse é o problema... Nas explicações que eu encontrei até agora diz que no MySql não existe o bloco de EXCEPTIONS. Me parece que no MySql você tem que criar um tal de "Handler" quem não faço a minima ideia do que é, muito monos como criar um. Estou a procura de um exemplo.
22/05/2015
Marisiana Battistella
No tratamento de exceções há o seguinte:
[img]http://arquivo.devmedia.com.br/forum/imagem/262490-20150522-123420.png[/img]
22/05/2015
Marisiana Battistella
DELIMITER $$ CREATE PROCEDURE insert_article_tags(IN article_id INT, IN tag_id INT) BEGIN DECLARE CONTINUE HANDLER FOR 1062 SELECT CONCAT('duplicate keys (',article_id,',',tag_id,') found') AS msg; -- insert a new record into article_tags INSERT INTO article_tags(article_id,tag_id) VALUES(article_id,tag_id); -- return tag count for the article SELECT COUNT(*) FROM article_tags; END
Explicações em [url]http://www.mysqltutorial.org/mysql-error-handling-in-stored-procedures/[/url]
25/05/2015
Luis Calegari
26/05/2015
Marisiana Battistella
Aguardarei o feedback...
27/05/2015
Luis Calegari
Qria fazer uma trigger...
segue exemplo.
CREATE TRIGGER ATUALIZA_ESTOQUE
AFTER INSERT ON ITENSVENDA FOR EACH ROW
BEGIN
DECLARE ESTOQUE_ATUAL;
SELECT PRO_QTDE INTO ESTOQUE_ATUAL FROM PRODUTO WHERE PRO_CODIGO = NEW.PRO_CODIGO;
DECLARE PRODUTO_OUT_ESTOQUE CONDITION ESTOQUE_ATUAL - NEW.PRO_QTDE >= 0;
DELCARE EXIT HANDLER FOR PRODUTO_OUT_ESTOQUE UPDATE 'Quantidade na nota excede a quantidade do produto em estoque';
UPDATE PRODUTO
SET PRO_ESTOQUE = PRO_ESTOQUE - NEW.PRO_QTDE
WHERE PRO_CODIGO = NEW.PRO_CODIGO;
END
a parte que está logo abaixo do primeiro "select" da erro.
28/05/2015
Marisiana Battistella
Observe o exemplo que consta no tutorial que te passei à cima.
31/05/2015
Luis Calegari
fiz uma tragger que chama uma procedure... e nela eu mando uma variável de saída para pegar uma msg pré definida...
ai eu não deixo que a exception aconteça... segunda eu posto como eu fiz... isso foi feito no meu ambiente de trabalho...
mais ainda estou a procura de como resolver isso utilizando um handler....
Clique aqui para fazer login e interagir na Comunidade :)