我刚接触mysql,原来是搞oracle的。对这部分不是很熟悉,下面是自己写的一个实例,大家指点指点:
-- --------------------------------------------------------------------------------
-- Routine DDL
-- --------------------------------------------------------------------------------
DELIMITER $$CREATE DEFINER=`root`@`192.168.0.90` PROCEDURE `proc_pub_src_move`( p_cmp_id int)
BEGIN
/* author : skyman 
 * date : 2010-06-25
   * desc : 汇总src,从csf.fin_src_data获取数据到csf_pub.file_src_index里面。
   *
   */ 
   
   -- 错误处理
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
    
    ROLLBACK; 
-- 这里是否会回滚数据库里面所有的事务,
    --    还是只回滚本存储过程里面的insert、update、delete事务呢?
    
INSERT INTO csf.sys_log_pub_detail (log_id, log_type, log_cmp_id, log_search_msg, log_msg) 
        VALUE (v_log_id, 2, p_cmp_id, "Program finshed","Finished with error!");
    -- 这里我想把 "Finished with error!" 换成实际的mysql错误码或者错误信息,
    -- 比如sqlserver里面的sqlerr以及oracle里面的error等,mysql里面是什么标示呢?    COMMIT;
END;   
   
   DELETE FROM csf_pub.file_src_index WHERE cmp_id = p_cmp_id;
      
   INSERT INTO csf_pub.file_src_index(cmp_id, rpt_id, col_num, source_count, sorce_data, source_status)
   SELECT cmp_id, rpt_id, col_num, count(*) num,  group_concat(data_value SEPARATOR '|') data, 1
    FROM csf.fin_src_data
    WHERE cmp_id = p_cmp_id
    group by cmp_id, rpt_id, col_num;

COMMIT;

END

解决方案 »

  1.   


    那mysql里面如何处理类似的异常问题呢?
      

  2.   

    mysql 里面有  mysql_errno可以获取mysql错误码,但是获取不到具体描述信息。有没有类似的函数能将错误码转化成英文或者中文描述信息呢?
      

  3.   

    mysql_error() 不是MYSQL中的,是MYSQL C API中的编程接口。
    同样你可以在程序中用 mysql_error()得到文本的描述信息。但不是在存储过程中或者MYSQL工具中。
      

  4.   

    1:回滚本存储过程里的事务
    2:对于错误需要枚举。
    如DECLARE errname CONDITION FOR SQLSTATE '23000'; 给导致错误23000的错误定义名字为errname
    DECLARE continue handler for errname 当errname发生时作下面的处理
    BEGIN 语句开始
    set @x=1; 设置@x=1
    select @x; 输出x
    END; 结束出错处理。
      

  5.   

    http://www.itpub.net/viewthread.php?tid=805279&page=1#pid7960351