0

我正在执行从 pl / sql (oracle) 到 sql / pl (DB2) 的过程迁移,但我不知道如何将子过程传递给 DB2

由于我不是系统管理员,我无法将 DB2 更改为 pl / sql 兼容

例子

create or replace PROCEDURE         "SP_NOSTRADAMUS_PRODUTO" 
AS
V_EXISTE_TAB   NUMBER := 0;
PROCEDURE PR_HIRQ_PRODUTO_OR 
    AS
    BEGIN


END
4

2 回答 2

0

如果您的 Db2 服务器在 Linux/Unix/Windows 上运行,在 ANSI SQL PL 中,如果您有一个本地过程嵌套在另一个 SQL PL 过程(或复合语句)的主体中,那么您使用 DECLARE 关键字来定义本地过程. 这在 v10.1 及更高版本中受 Db2-LUW 支持。

如果您有很多 Oracle PL SQL 存储过程,请与您的解决方案架构师(如果有的话)和您的 DBA 讨论配置您的 Db2 服务器以支持 Oracle 兼容性的可能性。这可能会为您节省一些钱。

您可以在此处查看 SQL PL 的 Db2 语法 (确保在下拉列表中选择正确版本的 Db2 服务器产品)。

当地程序有一些限制,因此请仔细阅读文档。但是您的本地过程可以访问在范围内的周围块中定义的变量和对象。

您的示例在 ANSI SQL PL 中可能如下所示:

create or replace PROCEDURE "SP_NOSTRADAMUS_PRODUTO" 
begin
  declare V_EXISTE_TAB  integer default 0;
  declare PROCEDURE PR_HIRQ_PRODUTO_OR 
  BEGIN
  -- body of pr_hirq_produto_or procedure
  END;
  -- body of sp_nostradamus_produto procedure
END
@
于 2019-08-19T15:16:43.683 回答
-1

Db2 没有子过程,甚至不知道为什么 oracle 会有。在 db2 中,您只需将“子”过程创建为常规过程,然后“调用”它们。

create procedure a( ....

create procedure b ....

create procedure main(...)
begin
  call a(...);
  call b(...);
end
于 2019-08-19T15:20:38.647 回答