SP 重名

沉沦 2010-06-24 12:12:01
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语句.
...全文
57 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
沉沦 2010-06-24
  • 打赏
  • 举报
回复
版主的方法貌似达不到我的需求哦 。

是这样的原因:
我要把这个SP放到别的mysql的database里面去.而我并不知道别人的database里面是否有跟我一样同名的SP,如果我冒然前面加drop procedure if exists spname 会删除别人的SP。。。
所以我要在create SP的时候在前面判断一下..如果有同名的。这不创建自己的SP。。然后就人为的干预了。。。
请斑竹明示··
ACMAIN_CHM 2010-06-24
  • 打赏
  • 举报
回复
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>
rucypli 2010-06-24
  • 打赏
  • 举报
回复
直接执行 有重名自然有报错出来
rucypli 2010-06-24
  • 打赏
  • 举报
回复
直接执行 有重名自然有报错出来
WWWWA 2010-06-24
  • 打赏
  • 举报
回复
[Quote=引用楼主 m582445672 的回复:]
SQL code
DELIMITER //
-- 这个地方:因为怕有SP重名现象,所以我create sp之前.怎么检测sp是否存在,如果存在则select 'output message ' 并且不执行下面的create sp语句.
CREATE PROCEDURE XX()
BEGIN
SELECT 'AAA' AS message;
END//
DELIMITER ;


……
[/Quote]
在MYSQL中不行,在语言中判断一下吧
zuoxingyu 2010-06-24
  • 打赏
  • 举报
回复

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 ;


在存储过程里面再创建存储过程,是不行的。
我的代码执行失败。
沉沦 2010-06-24
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 acmain_chm 的回复:]
那就直接执行,如果已存在自然会不执行并有错误信息。
[/Quote]

能在前面加个语句判断,不用mysql的错误提示吗?
ACMAIN_CHM 2010-06-24
  • 打赏
  • 举报
回复
那就直接执行,如果已存在自然会不执行并有错误信息。

56,866

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧