使用varchar2中的类型名称实例化oracle对象类型
初步情况:使用varchar2中的类型名称实例化oracle对象类型,oracle,types,plsql,instantiation,Oracle,Types,Plsql,Instantiation,初步情况: 我在变量中有一个typename: type_name varchar2(20):='T_MY_type' T_SUPERTYPE是T_MY_类型的超类型 T_MY_类型重写单个方法以提供特定行为。 自定义对象类型T_my_type的构造函数没有参数。 我需要使用给定的变量创建一个类型实例。 创建的实例必须分配给超类型T_超类型的变量。 Oracle版本:11.2.0.2.0,使用PL/SQL Developer 10.0.1开发 我失败的尝试:
- 我在变量中有一个typename:
type_name varchar2(20):='T_MY_type'代码>
T_SUPERTYPE是T_MY_类型的超类型
T_MY_类型重写单个方法以提供特定行为。
自定义对象类型T_my_type的构造函数没有参数。
我需要使用给定的变量创建一个类型实例。
创建的实例必须分配给超类型T_超类型的变量。
Oracle版本:11.2.0.2.0,使用PL/SQL Developer 10.0.1开发
我失败的尝试:
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绝对不是我的母语,我将非常感谢您的建议:)您非常接近,您的“进入我的实例”只需要在立即执行之外
declare
type_name varchar2(20) := 'T_MY_TYPE';
myInstance T_SUPERTYPE;
begin
exceute immediate 'select ' || type_name || '() from dual' into myInstance;
end;
也可以使用PL/SQL execute immediate语法,方法是包装在begin/end块中并适当使用绑定变量:execute immediate'begin:myInstance:='| | | type_name |'();结束;'使用myInstance代码>就像一个符咒,这正是我需要的!非常感谢你!