2015-09-23 51 views
0

我試圖從對象表中選擇一些東西到我自己的局部變量有問題。這是一些基本的代碼。選擇對象表到變量

create type my_obj as object 
(
    my_number number 
) 
/
create table my_table of my_obj; 
/
insert into my_table values (my_obj(123)) 
/
declare 
    my_holder my_obj; 
begin 
    select * into my_holder from my_table where rownum = 1; 
    dbms_output.put_line(my_holder.my_number); 
end; 

我得到了它的錯誤是

Error starting at line : 86 in command - 
declare 
    my_holder my_obj; 
begin 
    select * into my_holder from my_table where rownum = 1; 
end; 
Error report - 
ORA-06550: line 4, column 10: 
PL/SQL: ORA-00932: inconsistent datatypes: expected UDT got NUMBER 
ORA-06550: line 4, column 3: 
PL/SQL: SQL Statement ignored 
06550. 00000 - "line %s, column %s:\n%s" 
*Cause: Usually a PL/SQL compilation error. 
*Action: 

爲什麼這可能會失敗的任何線索?

回答

3

select從對象中返回變量而不是對象本身,所以如果你想讓它按照你擁有它的方式工作,你需要聲明你想要的對象如下返回。

select my_obj(my_number) into my_holder from my_table where rownum = 1; 

希望這有助於

+0

@Coat這個答案是正確的(它可以完成工作),但(IMO)次優。而不是使用構造函數use [value](https://docs.oracle.com/cd/E11882_01/server.112/e41084/functions229.htm#SQLRF06158)函數將與對象錶行關聯的_correlation variable_變量轉換爲存儲在該行中的對象實例:'從my_table m中選擇值(m)到my_holder m,其中rownum = 1;'(注意語法需要使用表別名)。 – user272735

+0

@ user272735謝謝你,這是一種我不知道的技術,我同意這是一個更好的解決方案。 –