初始情况:
- 我在变量中有一个类型名:
- T_SUPERTYPE 是 T_MY_TYPE 的超类型
- T_MY_TYPE 覆盖单个方法以提供特定行为。
- 我的自定义对象类型 T_MY_TYPE 的构造函数没有参数。
- 我需要使用给定的变量创建一个类型实例。
- 创建的实例必须分配给超类型 T_SUPERTYPE 的变量。
- Oracle 版本:11.2.0.2.0,使用 PL/SQL Developer 10.0.1 开发
type_name varchar2(20) := 'T_MY_TYPE';
我失败的尝试:
declare
type_name varchar2(20) := 'T_MY_TYPE';
myInstance T_SUPERTYPE;
begin
execute immediate 'myInstance := ' || type_name || '()';
-- Fails with ORA-00900: Invalid SQL statement
-- tried alternative:
exceute immediate 'select ' || type_name || '() from dual into myInstance';
-- doesn't work either (ORA-00933: SQL command not properly ended)
end;
附加信息:我想使用几个都继承自一个超类型的对象类型。所有继承的子类型仅在单个方法的实现上有所不同。最后,我将有一个函数迭代多个 varchar2 (类型名称),实例化所有类型并调用函数(所有相同的名称,但由于实现不同而做不同的事情)。不同的子类型包含一些方便的东西,并迫使开发人员通过继承超类型来遵守规则。所以我只想利用多态的经典优势。
由于 PL/SQL 绝对不是我的母语,我将不胜感激任何建议 :)