【问题标题】:Generic-like behavior in PL/SQL procedure parametersPL/SQL 过程参数中的类泛型行为
【发布时间】:2010-10-24 19:30:12
【问题描述】:

假设我在 PL/SQL 中定义了一些数据类型:

TYPE foo_t IS RECORD (...);
TYPE foo_table_t IS TABLE OF foo_t INDEX BY BINARY_INTEGER;

TYPE bar_t IS RECORD (...);
TYPE bar_table_t IS TABLE OF bar_t INDEX BY BINARY_INTEGER;

我是否可以编写一个能够接受从 TABLE 派生的任何数据类型(例如,foo_table_tbar_table_t)作为参数的过程?该过程不需要知道表的行类型。一个简单的例子:

PROCEDURE remove_last(some_table ...) IS
BEGIN
    some_table.DELETE(some_table.LAST);
END;

【问题讨论】:

    标签: oracle generics plsql procedure


    【解决方案1】:

    不直接。来自 PL/SQL 程序员指南:

    “实参及其对应的形参必须具有兼容的数据类型。”

    PL/SQL 将实际参数数据类型隐式转换为形式参数数据类型。因此,您可以将数字值传递给需要字符串的过程,它会起作用,因为您可以进行隐式转换。

    你能做的最好的就是编写重载过程:

    PROCEDURE 通用程序(foo IN OUT foo_t);

    PROCEDURE 通用(bar IN OUT bar_t);

    然后您可以使用任一记录类型调用泛型。这与要处理的记录类型的数量成比例地失去吸引力:-D

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-15
      • 2015-06-18
      • 1970-01-01
      相关资源
      最近更新 更多