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版本/平台?“创建或删除”对我来说没有任何意义。你是说“创建或替换”吗?是的,很抱歉创建或替换。