1
我試圖插入存儲裏面到表列的對象的ANYDATA類型。 我可以得到它做工精細用VARCHAR處理,數字和日期,但不是對象。這應該是非常簡單的東西。代碼如下:SQL插入ANYDATA對象插入到表 - ORA-22370
/*CREATE TYPE SPEC*/
CREATE OR REPLACE TYPE my_ot AS OBJECT
(
some_var VARCHAR2(50),
some_clob CLOB,
MEMBER FUNCTION get_some_var RETURN VARCHAR2,
MEMBER FUNCTION get_some_clob RETURN CLOB
);
/*CREATE TYPE BODY*/
CREATE OR REPLACE TYPE BODY my_ot AS
MEMBER FUNCTION get_some_var RETURN VARCHAR2 IS
BEGIN
RETURN to_char(SELF.some_var);
END;
MEMBER FUNCTION get_some_clob RETURN CLOB IS
BEGIN
RETURN to_char(SELF.some_clob);
END;
END;
/*CREATE TABLE*/
create table my_anydata_table (id NUMBER, mydata sys.anyData);
/*INSERT ANYDATA NUMBER, DATE AND VARCHAR2 WITH NO PROBLEMS*/
insert into my_anydata_table values (1, sys.anyData.convertNumber(100));
insert into my_anydata_table values (2, sys.anyData.convertDate(sysdate));
insert into my_anydata_table values (3, sys.anyData.convertVarchar2('SOME TEXT'));
上述所有代碼均正常工作,沒有錯誤。
/*INSERT ANYTYPE OBJECT - RETURNS ERROR: ORA-22370*/
insert into my_anydata_table values (4, sys.anyData.convertObject(my_ot('input_var', 'input_clob')));
這種失敗,所以我想它使用PL/SQL塊:
/*TRY AGAIN using PL/SQL BLOCK*/
DECLARE
my_fav_obj my_ot;
my_anydata sys.anydata;
BEGIN
my_fav_obj := my_ot('input_var', 'input_clob');
my_anydata := ANYDATA.ConvertObject(my_fav_obj);
insert into my_anydata_table values (4, my_anydata);
END;
此代碼也將失敗。我看到人們使用這種方法的方式與我一樣,似乎也適用於他們。爲什麼這不適合我?我究竟做錯了什麼?
也許這可能的選項:http://www.dba-oracle.com/t_convert_to_blob_datatype.htm – ceving