初步情况:
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绝对不是我的母语,我将不胜感激任何建议:)
答案 0 :(得分:1)
你非常接近,你的'进入myInstance'只需要立即执行......
declare
type_name varchar2(20) := 'T_MY_TYPE';
myInstance T_SUPERTYPE;
begin
exceute immediate 'select ' || type_name || '() from dual' into myInstance;
end;