这是我创建的用户定义类型。
create or Replace TYPE cust_address_typ_new AS OBJECT
( add_id NUMBER,
street_address VARCHAR2(40)
, postal_code VARCHAR2(10)
, city VARCHAR2(30)
, state_province VARCHAR2(10)
, country_id CHAR(2)
);
下面是新类型的表格
CREATE TABLE address_table OF cust_address_typ_new;
现在我创建了另一个表格,如下所示
CREATE TABLE customer_addresses (
add_id NUMBER,
address REF cust_address_typ_new
SCOPE IS address_table);
现在我正在尝试将值插入customer_addresses
表
insert into customer_addresses
values(1,SYSTEM.CUST_ADDRESS_TYP_NEW(1,'hi','87987','city','state',''))
答案 0 :(得分:0)
使用sqlcl(Oracle 12.1):
create or Replace TYPE cust_address_typ_new AS OBJECT (
add_id NUMBER
, street_address VARCHAR2(40)
, postal_code VARCHAR2(10)
, city VARCHAR2(30)
, state_province VARCHAR2(10)
, country_id CHAR(2)
);
/
-- Type CUST_ADDRESS_TYP_NEW compiled
CREATE TABLE address_table OF cust_address_typ_new ;
-- Table ADDRESS_TABLE created.
CREATE TABLE customer_addresses (
add_id NUMBER
, address REF cust_address_typ_new SCOPE IS address_table
);
-- Table CUSTOMER_ADDRESSES created.
错误
insert into customer_addresses
values ( 1, SYSTEM.CUST_ADDRESS_TYP_NEW(1,'hi','87987','city','state','') ) ;
-- ORA-00904: "SYSTEM"."CUST_ADDRESS_TYP_NEW": invalid identifier
insert into customer_addresses
values ( 1, CUST_ADDRESS_TYP_NEW( 1,'hi','87987','city','state','' ) ) ;
-- ORA-00932: inconsistent datatypes: expected REF ...CUST_ADDRESS_TYP_NEW got ...CUST_ADDRESS_TYP_NEW
REF以相关变量(表别名)为参数 与对象表或对象视图的行关联。参考 为绑定到的对象实例返回值 变量或行。
以下示例可以帮助您
-- {1} insert into the address_table ( 3 examples )
insert into address_table
values ( 1,'hi','87987','city','state','' ) ;
-- 1 row inserted.
insert into address_table
values( cust_address_typ_new( 2,'hi again','12345','city2','state2','' ) ) ;
-- 1 row inserted
insert into address_table
values( new cust_address_typ_new( 3,'hmpf','23456','city3','state3','' ) ) ;
-- 1 row inserted.
-- result
SQL> select * from address_table;
ADD_ID STREET_ADDRESS POSTAL_CODE CITY STATE_PROVINCE COUNTRY_ID
1 hi 87987 city state NULL
2 hi again 12345 city2 state2 NULL
3 hmpf 23456 city3 state3 NULL
也许您不需要序列(只需添加即可填充customer_addresses表中的add_id列即可)。
-- {2} select from the address_table, use ref(),
-- insert into customer_addresses
SQL> create sequence ca_seq start with 1000 increment by 1;
Sequence CA_SEQ created.
insert into customer_addresses
select ca_seq.nextval, ref(AT) from address_table AT ;
-- result
select * from customer_addresses;
ADD_ID
----------
ADDRESS
------------------------------------------------------------------------
1000
2202086FC2AC912CD41038E0530100007F525D6FC2AC912CCD1038E0530100007F525D
1001
2202086FC2AC912CD51038E0530100007F525D6FC2AC912CCD1038E0530100007F525D
1002
2202086FC2AC912CD61038E0530100007F525D6FC2AC912CCD1038E0530100007F525D