Sql 在DB2上删除非唯一过程

Sql 在DB2上删除非唯一过程,sql,db2,procedure,Sql,Db2,Procedure,在我尝试使用行编辑过程时 CREATE OR DROP PROCEDURE 我创建了两个同名的过程,如何删除它们 每当我试图删除它时收到的错误是 参考Rountine BT_Cuu_里程表时没有签名,但例程在其模式中不是唯一的。 SQLSTATE=42725 我使用的是DB2可以删除一个过程,如下所示: 下降程序; 参数RESTRICT是必需的。它避免删除触发器使用的过程。程序包被丢弃。 调用该过程的包和计划将无效。可以像这样删除过程: 下降程序; 参数RESTRICT是必需的。它避免删除触发

在我尝试使用行编辑过程时

CREATE OR DROP PROCEDURE
我创建了两个同名的过程,如何删除它们

每当我试图删除它时收到的错误是

参考Rountine BT_Cuu_里程表时没有签名,但例程在其模式中不是唯一的。 SQLSTATE=42725


我使用的是DB2

可以删除一个过程,如下所示:

下降程序; 参数RESTRICT是必需的。它避免删除触发器使用的过程。程序包被丢弃。
调用该过程的包和计划将无效。

可以像这样删除过程:

下降程序; 参数RESTRICT是必需的。它避免删除触发器使用的过程。程序包被丢弃。
调用该过程的包和计划无效。

假设这是DB2forLUW

DB2允许您使用相同的名称但不同数量的参数“重载”过程。每个过程都会收到一个特定的名称,该名称可以由您提供,也可以由系统生成,并且是唯一的

要确定过程的特定名称,请运行

SELECT ROUTINESCHEMA, ROUTINENAME, SPECIFICNAME FROM SYSCAT.ROUTINES
WHERE ROUTINENAME = 'BT_CU_ODOMETER'
然后可以分别删除每个过程:

DROP SPECIFIC PROCEDURE <specific name>
删除特定程序

假设这是DB2 for LUW

DB2允许您使用相同的名称但不同数量的参数“重载”过程。每个过程都会收到一个特定的名称,该名称可以由您提供,也可以由系统生成,并且是唯一的

要确定过程的特定名称,请运行

SELECT ROUTINESCHEMA, ROUTINENAME, SPECIFICNAME FROM SYSCAT.ROUTINES
WHERE ROUTINENAME = 'BT_CU_ODOMETER'
然后可以分别删除每个过程:

DROP SPECIFIC PROCEDURE <specific name>
删除特定程序

问题

如果使用相同的名称创建多个存储过程,但参数数量不同,则该存储过程被视为重载。尝试使用drop procedure语句删除重载存储过程时,可能会导致以下错误:

db2 drop procedure SCHEMA.PROCEDURENAME 
DB21034E该命令作为SQL语句处理,因为它不是有效的命令行处理器命令。在SQL处理过程中,它返回:对例程“SCHEMA.PROCEDURENAME”的SQL0476N引用没有签名,但例程在其架构中不是唯一的。SQLSTATE=42725

原因

返回错误是因为存储过程重载,因此该过程在该架构中不是唯一的。若要删除该过程,必须指定CREATE procedure语句中指定的数据类型,或根据以下示例使用存储过程的特定名称

解决方案

要删除重载存储过程,可以使用以下语句之一:

 db2 "DROP PROCEDURE procedure-name(int, varchar(12))" 
 db2 "DROP SPECIFIC PROCEDURE specific-name" 

注意:可以通过从syscat.routines目录视图中选择SPECIFICNAME列来识别特定名称。

问题

如果使用相同的名称创建多个存储过程,但参数数量不同,则该存储过程被视为重载。尝试使用drop procedure语句删除重载存储过程时,可能会导致以下错误:

db2 drop procedure SCHEMA.PROCEDURENAME 
DB21034E该命令作为SQL语句处理,因为它不是有效的命令行处理器命令。在SQL处理过程中,它返回:对例程“SCHEMA.PROCEDURENAME”的SQL0476N引用没有签名,但例程在其架构中不是唯一的。SQLSTATE=42725

原因

返回错误是因为存储过程重载,因此该过程在该架构中不是唯一的。若要删除该过程,必须指定CREATE procedure语句中指定的数据类型,或根据以下示例使用存储过程的特定名称

解决方案

要删除重载存储过程,可以使用以下语句之一:

 db2 "DROP PROCEDURE procedure-name(int, varchar(12))" 
 db2 "DROP SPECIFIC PROCEDURE specific-name" 
注意:可以通过从syscat.routines目录视图中选择SPECIFICNAME列来识别特定名称。

如果需要删除给定过程名称的所有重载,这里有一个基于

如果您需要删除给定过程名的所有重载,这里有一个基于


问题不在于他有两个同名的对象——你必须删除它的对象id。问题不在于他有两个同名的对象——你必须删除它的对象id。什么DB2版本/平台?“创建或删除”对我来说没有任何意义。你是说“创建或替换”吗?是的,对不起,创建或替换。什么DB2版本/平台?“创建或删除”对我来说没有任何意义。你是说“创建或替换”吗?是的,很抱歉创建或替换。