Ada*_*ter 3 generics oracle plsql procedure
假设我在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;
Run Code Online (Sandbox Code Playgroud)
我是否可以编写一个能够接受从TABLE派生的任何数据类型(例如,a foo_table_t或a bar_table_t)作为参数的过程?该过程不需要知道表的行类型.一个简单的例子:
PROCEDURE remove_last(some_table ...) IS
BEGIN
some_table.DELETE(some_table.LAST);
END;
Run Code Online (Sandbox Code Playgroud)
不是直接的.从PL/SQL程序员指南:
"实际参数及其相应的形式参数必须具有兼容的数据类型."
PL/SQL将实际参数数据类型隐式转换为形式参数数据类型.因此,您可以将数字值传递给需要字符串的过程,并且它可以工作,因为您可以执行隐式转换.
您可以做的最好的事情是编写重载过程:
PROCEDURE generic(foo IN OUT foo_t);
PROCEDURE通用(bar IN OUT bar_t);
然后,您可以使用任一记录类型调用generic.这与处理的记录类型数量成比例地失去吸引力:-D