初始情況實例化Oracle對象類型:在VARCHAR2使用類型名稱
- 我有一個可變類型名:
- T_SUPERTYPE是T_MY_TYPE
- 的超類型T_MY_TYPE覆蓋單個方法以提供特定的行爲。
- 我自定義的對象類型T_MY_TYPE的構造函數沒有參數。
- 我需要使用給定的變量創建一個類型實例。
- 創建的實例必須分配給超類型T_SUPERTYPE的變量。
- Oracle版本:11.2.0.2.0,開發與PL/SQL開發人員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是definetly不是我的母語,我會感謝任何建議:)
可能的[複製](http://stackoverflow.com/questions/9362994/how-to-call-an-oracle-pl-sql-object-super-method/9364571#9364571) – tbone