0

我知道,在 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;
4

1 回答 1

2

在 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.
于 2013-05-30T13:34:49.177 回答