使用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就像一个符咒,这正是我需要的!非常感谢你!