假设我有在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;

是否有可能为我写能够接受(例如,无论是foo_table_tbar_table_t)作为参数从表产生的任何数据类型的程序?该过程有没有必要对表的行类型的知识。一个小示例:

PROCEDURE remove_last(some_table ...) IS
BEGIN
    some_table.DELETE(some_table.LAST);
END;
有帮助吗?

解决方案

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

“实际的参数和其相应的形式参数必须具有兼容的数据类型。”

PL / SQL不实际参数数据类型到形式参数的数据类型的隐式转换。所以,你可以一个数值传递给想要一个字符串的程序,它会工作,因为你可以做一个隐式转换。

你能做的最好是写程序超载:

PROCEDURE通用的(FOO IN OUT foo_t);

PROCEDURE通用(巴IN OUT bar_t);

然后就可以调用通用与任何记录类型。此失去吸引力正比于记录类型的数目来处理:-D

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top