Exceptions MySQL
Olá pessoal boa tarde!
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.
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
Curtidas 0
Melhor post
Marisiana Battistella
22/05/2015
Entendi... Não sei como é o tratamento de exceções no MySQL, mas vou ver se encontro alguma informação sobre isso e compartilho contigo.
GOSTEI 1
Mais Respostas
Marisiana Battistella
20/05/2015
Olá Luis!
Eu não encontrei um exemplo no MySQL, mas no Oracle seri assim:
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;
GOSTEI 0
Luis Calegari
20/05/2015
Olá Marisiana!
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.
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.
GOSTEI 0
Marisiana Battistella
20/05/2015
Neste link, Oracle to MySQL Migration, temos um comparativo dos recursos do Oracle com os recursos do MySQL.
No tratamento de exceções há o seguinte:
[img]http://arquivo.devmedia.com.br/forum/imagem/262490-20150522-123420.png[/img]
No tratamento de exceções há o seguinte:
[img]http://arquivo.devmedia.com.br/forum/imagem/262490-20150522-123420.png[/img]
GOSTEI 1
Marisiana Battistella
20/05/2015
Não tenho o MySQL instalado e, por isso, não sei como se aplica. Mas segue um exemplo de como aplicar em uma procedure:
Explicações em [url]http://www.mysqltutorial.org/mysql-error-handling-in-stored-procedures/[/url]
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]
GOSTEI 0
Marisiana Battistella
20/05/2015
Luis, depois informe se conseguiu fazer...
GOSTEI 0
Luis Calegari
20/05/2015
Marisiana desculpa a demora... Eu ainda não consegui o resultado que qria porque não entendi muito bem como funciona o Hendler... Mais este tutorial está me ajudando muito.. assim que eu conseguir o resultado esperado.... eu coloco a procedure aqui.
GOSTEI 0
Marisiana Battistella
20/05/2015
Ok.... Espero que consigas fazer!
Aguardarei o feedback...
Aguardarei o feedback...
GOSTEI 0
Luis Calegari
20/05/2015
Agora surgiu uma outra dúvida...
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.
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.
GOSTEI 0
Marisiana Battistella
20/05/2015
Eu acho q a forma como vc declarou não está correta....
Observe o exemplo que consta no tutorial que te passei à cima.
Observe o exemplo que consta no tutorial que te passei à cima.
GOSTEI 0
Marisiana Battistella
20/05/2015
Conseguiu fazer Luis?
GOSTEI 0
Marisiana Battistella
20/05/2015
Conseguiu fazer Luis?
GOSTEI 0
Luis Calegari
20/05/2015
Ainda não consegui... eu acabei resolvendo o problema de outra maneira...
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....
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....
GOSTEI 0
Marisiana Battistella
20/05/2015
Certo, aguardo o retorno...
GOSTEI 0