Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle-将方法(过程)添加到嵌套表_Oracle_Plsql_Sqlplus - Fatal编程技术网

Oracle-将方法(过程)添加到嵌套表

Oracle-将方法(过程)添加到嵌套表,oracle,plsql,sqlplus,Oracle,Plsql,Sqlplus,我有一个家庭作业,我必须向嵌套表中添加过程,结构如下 create type associe_t as Object(noAs int, nomAs varchar(50), capAs int) / create type lesAssocies_t as TABLE OF associe_t / create type promoteur_t as Object(matP int, nomP varchar(50), adrP varchar(50), lesAssocies lesAsso

我有一个家庭作业,我必须向嵌套表中添加过程,结构如下

create type associe_t as Object(noAs int, nomAs varchar(50), capAs int)
/
create type lesAssocies_t as TABLE OF associe_t
/
create type promoteur_t as Object(matP int, nomP varchar(50), adrP varchar(50), lesAssocies lesAssocies_t)
/
create table promoteur of promoteur_t (
    constraint pk_promoteur primary key(matP));

create table promoteur of promoteur_t (
    constraint pk_promoteur primary key(matP),
    constraint limCapAs check (capAs <= 1 000 000)
) tableSpace TBS3202A2012
NESTED TABLE lesAssocies STORE AS Table_lesAssocies ;
我试图在以下内容之后添加该程序的主体:

CREATE or replace TYPE BODY associe_t AS
MEMBER procedure augmenteCapAs(P in number ) AS 
  BEGIN 
    update Table_lesAssocies t set t.capAs = P/100 where t.noAs = self.noAs;
  END;
END;
/
如果我使用表名table_leassocies,它将给出以下错误:

ORA-22812: cannot reference nested table column's storage table
如果我使用表名leassocies\u t,它会告诉我该表不存在

我做错了什么?我很确定我不应该用那张桌子的物理名称


我应该使用什么表名?

正如错误消息所述,您不能直接访问或存储嵌套表的列—只能通过外部表。因此,您可以按如下方式重写代码:

SQL> create type associe_t as Object(noAs int, nomAs varchar(50), capAs int)
  2  /

Type created


SQL> create type lesAssocies_t as TABLE OF associe_t
  2  /

Type created


SQL> create type promoteur_t as Object(matP int, nomP varchar(50), adrP varchar(50), lesAssocies lesAssocies_t)
  2  /

Type created


SQL> create table tb_promoteur of promoteur_t (
  2      constraint pk_promoteur primary key(matP)
  3  )tablespace users
  4  NESTED TABLE lesAssocies STORE AS Table_lesAssocies;

Table created

SQL> alter table table_lesassocies add constraint chk_capas check (capas < 1000000);

Table altered

SQL> alter type associe_t add member procedure augmenteCapAs(P IN number) cascade ;

Type altered


SQL> CREATE OR REPLACE TYPE BODY associe_t AS
  2  MEMBER procedure augmenteCapAs(P in number ) AS
  3    BEGIN
  4      update table(select lesAssocies
  5                     from tb_promoteur) t
  6         set t.capAs = P/100
  7       where t.noAs = self.noAs;
  8    END;
  9  END;
 10  /

Type body created

谢谢这就是我要找的语法表。。
SQL> create type associe_t as Object(noAs int, nomAs varchar(50), capAs int)
  2  /

Type created


SQL> create type lesAssocies_t as TABLE OF associe_t
  2  /

Type created


SQL> create type promoteur_t as Object(matP int, nomP varchar(50), adrP varchar(50), lesAssocies lesAssocies_t)
  2  /

Type created


SQL> create table tb_promoteur of promoteur_t (
  2      constraint pk_promoteur primary key(matP)
  3  )tablespace users
  4  NESTED TABLE lesAssocies STORE AS Table_lesAssocies;

Table created

SQL> alter table table_lesassocies add constraint chk_capas check (capas < 1000000);

Table altered

SQL> alter type associe_t add member procedure augmenteCapAs(P IN number) cascade ;

Type altered


SQL> CREATE OR REPLACE TYPE BODY associe_t AS
  2  MEMBER procedure augmenteCapAs(P in number ) AS
  3    BEGIN
  4      update table(select lesAssocies
  5                     from tb_promoteur) t
  6         set t.capAs = P/100
  7       where t.noAs = self.noAs;
  8    END;
  9  END;
 10  /

Type body created