【问题标题】:Overload stored procedure in DB2在 DB2 中重载存储过程
【发布时间】:2013-05-30 13:02:10
【问题描述】:

我知道,在 ORACLE 中重载 PLSQL 函数和过程是可能的。 我试图在 DB2 中重载一个过程,但抛出了错误。 DB2 会限制这一点还是我做错了什么。

专业版 1

CREATE OR REPLACE PROCEDURE  saju_pro (
     s_num1      IN     NUMBER,
     s_num2      IN OUT     NUMBER )
AS
BEGIN
    s_num2 := (s_num1+s_num2);
END saju_pro;
/

PRO2

CREATE  PROCEDURE  saju_pro (
     s_num1      IN     NUMBER,
     s_num2      IN     NUMBER,
     s_num3      OUT     NUMBER  )
AS
BEGIN
    s_num3 := (s_num1+s_num2);
END saju_pro;

【问题讨论】:

  • java与这个问题有什么关系?
  • @nakosspy 我使用 JDBC 来获取它的元数据。添加在它的效果。 :) 删除!!

标签: oracle stored-procedures plsql db2


【解决方案1】:

可能会在 DB2 中重载过程。有两种方法可以做到这一点。一种是将过程声明和定义为 PL/SQL 包的一部分:

create or replace package body blah
as
  PROCEDURE  saju_pro (
    s_num1      IN     NUMBER,
    s_num2      IN OUT     NUMBER )
  AS
  ...
  PROCEDURE  saju_pro (
    s_num1      IN     NUMBER,
    s_num2      IN     NUMBER,
    s_num3      OUT     NUMBER  )
  AS
  ...
end;

如果您真的想要独立的过程,则必须使用 DB2 SQL PL 语法而不是 PL/SQL 语法来创建它们,因为只有使用 SQL PL 语法才能使用 SPECIFIC 选项让 DB2 区分两者。

CREATE OR REPLACE PROCEDURE  saju_pro (
 IN    s_num1   NUMBER,
 INOUT s_num2   NUMBER )
SPECIFIC pro1
BEGIN
 SET s_num2 = (s_num1+s_num2);
END;
-- etc.

【讨论】:

  • 谢谢。我正在使用 syscat.routineparms 来获取过程定义元数据。能否请您告诉我如何使用此表来识别过程是否重载??
  • 如何使用任何表来识别过程是否重载?您可以应用相同的逻辑。
  • 好吧,我需要在运行时使用 java 来确定它。那么这不是 not 的逻辑怎么会起作用呢?
  • 从 Java 或 syscat.routineparms 中抽象一下。作为一个人,你会如何向我这个人描述超载的程序?无论如何,重载的过程将在 SYSCAT.ROUTINES 中具有相同的 ROUTINENAME 和不同的 SPECIFICNAME。
猜你喜欢
  • 2015-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-25
  • 2014-10-26
  • 2019-11-10
  • 2015-06-09
  • 1970-01-01
相关资源
最近更新 更多