Chinaunix首页 | 论坛 | 博客
  • 博客访问: 11681675
  • 博文数量: 8065
  • 博客积分: 10002
  • 博客等级: 中将
  • 技术积分: 96708
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-16 17:06
文章分类

全部博文(8065)

文章存档

2008年(8065)

分类: 服务器与存储

2008-05-18 13:04:46

产品: DB2 UDB
平台: 跨平台
版本:V7、V8


    在删除存储过程时碰到SQL0458N错误时怎么办?
 
    如果在使用DROP PROCEDURE时参数类型不匹配时,就会碰到SQL0458N错误:
db2 drop procedure testa()
SQL0458N 在按特征符引用例程 "BIYJ.RSA" 时,找不到匹配的例程。 SQLSTATE=42883

    这时你可以从SYSCAT表中找出该存储过程的特定名称(SPECIFIC NAME),使用DROP SPECIFIC PROCEDURE命令删除该存储过程或者找到存储过程的精确定义,然后使用DROP PROCEDURE命令删除它。我们以下面的存储过程为例来看一下如何删除存储过程:
CREATE PROCEDURE testa ( IN dept_in INT,
OUT tot_comp DECIMAL(7,2))
LANGUAGE SQL
SPECIFIC testa_spec
BEGIN
SELECT sum(salary+comm)
INTO tot_comp
FROM staff
WHERE dept = dept_in ;
END@

    如果使用下面的命令,我们就会碰到错误:
D:>db2 DROP PROCEDURE testa()
DB21034E 该命令被当作 SQL语句来处理,因为它不是有效的“命令行处理器”命令。在 SQL 处理期间,它返回:
SQL0458N 在按特征符引用例程 "BIYJ.TESTA" 时,找不到匹配的例程。
SQLSTATE=42883

    你可以使用下面的命令删除这个存储过程:
D:>db2 DROP PROCEDURE testa(INT,DECIMAL(7,2))
DB20000I SQL 命令成功完成。

    但是对于参数比较多的存储过程,这样比较麻烦。如果你在存储过程中定义了特定名称,如上例中我们指定了特定名称testa_spec,这是我们就可以使用下面的语句删除这个存储过程了:
D:>db2 DROP SPECIFIC PROCEDURE testa_spec
DB20000I SQL 命令成功完成。

阅读(976) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~