2015-11-04 139 views
0

我想在嵌套表中插入一个裁判,但我不断收到错误SQL错误:ORA-00936:缺少表达SQL错误 - ORA-00936:缺少表达

相关类型和表如下如下:

create type TP1_PROPRIETE as object (
    NO_PROPRIETE number(10), 
    ADRESSE_PRO varchar2(20), 
    VILLE_PRO varchar2(20), 
    NB_PIECES_PRO number(2)); 
/

create type TP1_CAPROPRO as object (
    REF_PROPRIETE_CAPROPRO ref TP1_PROPRIETE); 
/

create type TP1_CAPROPRO_NT as table of TP1_CAPROPRO; 
/

create type TP1_PARTENAIRE as object (
    NOM_COMPLET_PAR varchar2(40)); 
/

create type TP1_PARTENAIRE_NT as table of TP1_PARTENAIRE; 
/

create type TP1_PROPRIETAIRE as object (
    NO_PROPRIETAIRE number(10), 
    NOM_COMPLET_PROR varchar2(40), 
    REF_PARTENAIRES_PROR TP1_PARTENAIRE_NT, 
    REF_PROPRIETES_PROR TP1_CAPROPRO_NT); 
/

create table TP1_PROPRIETAIRE_T of TP1_PROPRIETAIRE 
    nested table REF_PARTENAIRES_PROR store as TP1_PARTENAIRE_NT_PROR 
    nested table REF_PROPRIETES_PROR store as TP1_CAPROPRO_NT_PROR; 
/

create table TP1_PROPRIETE_T of TP1_PROPRIETE (
    constraint CT_NB_PIECES_NON_NEG check (NB_PIECES_PRO > 0)); 
/

这里是插入:

insert into TP1_PROPRIETE_T 
    values(1465798654, 
     '1170 Victory', 
     'New York', 
     5); 
/

insert into TP1_PROPRIETAIRE_T 
    values(9654255475, 
     'Mike Ross', 
     TP1_PARTENAIRE_NT(TP1_PARTENAIRE('Andre Ross')), 
     TP1_CAPROPRO_NT(TP1_CAPROPRO(select ref(p) 
             from TP1_PROPRIETE_T p 
             where p.NO_PROPRIETE = 1465798654))); 
/

我得到执行最后插入时出现以下错误:

Error starting at line 117 in command: insert into TP1_PROPRIETAIRE_T 
values(9654255475, 
      'Mike Ross', 
      TP1_PARTENAIRE_NT(TP1_PARTENAIRE('Andre Ross')), 
      TP1_CAPROPRO_NT(TP1_CAPROPRO(select ref(p) 
             from TP1_PROPRIETE_T p 
             where p.NO_PROPRIETE = 1465798654))) 
Error at Command Line:121 Column:39 
Error report: SQL 
Error: ORA-00936: missing expression 
00936. 00000 - "missing expression" 
*Cause:  
*Action: 

从我从SO和其他论坛读到的错误很可能是在最后一个选择ref(p)的地方......但语法对我来说似乎很好,所以我真的不知道为什么我得到这个错误。谢谢你的时间。

回答

1

我会用insert . . . select(个人喜好),但你的问题是子查询缺少额外的括号:

insert into TP1_PROPRIETAIRE_T 
    select 9654255475, 'Mike Ross', 
      TP1_PARTENAIRE_NT(TP1_PARTENAIRE('Andre Ross')), 
      TP1_CAPROPRO_NT(TP1_CAPROPRO((select ref(p) 
              from TP1_PROPRIETE_T p 
              where p.NO_PROPRIETE = 1465798654 
             ) 
             )) 
    from dual;