DELIMITER //
-- 这个地方:因为怕有SP重名现象,所以我create sp之前.怎么检测sp是否存在,如果存在则select 'output message ' 并且不执行下面的create sp语句.
CREATE PROCEDURE XX()
BEGIN
SELECT 'AAA' AS message;
END//
DELIMITER ;
重点是如果存在则select 'output message ' 并且不执行下面的create sp语句.

解决方案 »

  1.   

    mysql> show procedure status like 'XX';
    +------+------+-----------+----------------+---------------------+--------------
    -------+---------------+---------+----------------------+----------------------+
    --------------------+
    | Db   | Name | Type      | Definer        | Modified            | Created
           | Security_type | Comment | character_set_client | collation_connection |
     Database Collation |
    +------+------+-----------+----------------+---------------------+--------------
    -------+---------------+---------+----------------------+----------------------+
    --------------------+
    | csdn | XX   | PROCEDURE | root@localhost | 2010-06-24 10:49:20 | 2010-06-24 10
    :49:20 | DEFINER       |         | latin1               | latin1_swedish_ci    |
     latin1_swedish_ci  |
    +------+------+-----------+----------------+---------------------+--------------
    -------+---------------+---------+----------------------+----------------------+
    --------------------+
    1 row in set (0.04 sec)mysql>
    你可以先 drop procedure if exists spname 不管在不在都删除后创建新的。mysql> drop procedure if exists BB;
    Query OK, 0 rows affected, 1 warning (0.00 sec)mysql>
    也可以通过查询系统表来判断是否存在这个存储过程。mysql> select name from mysql.proc where name='XX';
    +------+
    | name |
    +------+
    | XX   |
    +------+
    1 row in set (0.42 sec)mysql>
      

  2.   

      版主的方法貌似达不到我的需求哦 。  是这样的原因:
      我要把这个SP放到别的mysql的database里面去.而我并不知道别人的database里面是否有跟我一样同名的SP,如果我冒然前面加drop procedure if exists spname  会删除别人的SP
      所以我要在create SP的时候在前面判断一下..如果有同名的。这不创建自己的SP。。然后就人为的干预了
      请斑竹明示··
      

  3.   


    能在前面加个语句判断,不用mysql的错误提示吗?
      

  4.   


    CREATE PROCEDURE B()
    BEGIN 
          IF EXISTS (SELECT 1 FROM mysql.proc WHERE name ='XX') THEN      
             SELECT 'already exists';
          ELSE
              PREPARE stmt FROM 'CREATE PROCEDURE XX() SELECT 1 AS message';
              EXECUTE stmt;  
          END IF;
    END ;
    在存储过程里面再创建存储过程,是不行的。
    我的代码执行失败。
      

  5.   

    在MYSQL中不行,在语言中判断一下吧