+-
SQL> create or replace type societe
as object (nom_societe varchar2(20),ville_societe varchar2(20));
/
create or replace type produit as object(
nom varchar2(20),
poids number(9),
couleur varchar2(20),
composants varchar2(2));
/
SQL> insert into commande(NUMERO,DATE_SOUMISSION,DATE_ENVOI,SOCIETE,PRODUIT) values(
2 1,to_date('2013/03/11','yyyy/mm/dd'),to_date('2014/05/12','yyyy/mm/dd'),
3 societe('BME','FES'),produit('prod1',12,'noir','aluminium'));
insert into commande(NUMERO,DATE_SOUMISSION,DATE_ENVOI,SOCIETE,PRODUIT) values(
*
ERROR at line 1:
ORA-22814: attribute or element value is larger than specified in type
SQL> create table commande(
2 numero number(9),
3 date_soumission date,
4 date_envoi date,
5 societe societe,
6 produit produit);
0
投票
投票
composants varchar2(2)
'铝'
显然,您要插入到composants属性中的第四个元素'铝',由于数据类型的大小为VARCHAR2(2)
,因此大于2个字符/字节。增大composants
的大小,以便它可以存储元素。
CREATE OR REPLACE TYPE societe AS OBJECT (
nom_societe VARCHAR2(20),
ville_societe VARCHAR2(20)
)
/
CREATE OR REPLACE TYPE produit AS OBJECT (
nom VARCHAR2(20),
poids NUMBER(9),
couleur VARCHAR2(20),
composants VARCHAR2(20)
)
/
CREATE TABLE commande (
numero NUMBER(9),
date_soumission DATE,
date_envoi DATE,
society societe,
product produit
);
现在您可以通过以下方式插入:
INSERT INTO commande (
numero,
date_soumission,
date_envoi,
society,
product
) VALUES (
1,
TO_DATE('2013/03/11', 'yyyy/mm/dd'),
TO_DATE('2014/05/12', 'yyyy/mm/dd'),
societe('BME', 'FES'),
produit('prod1', 12, 'noir', 'aluminium')
);
您可以检查插入的数据:
SELECT * FROM commande;
NUMERO DATE_SOU DATE_ENV SOCIETY(NOM_SOCIETE, PRODUCT(NOM, POIDS, COULEUR, COMPOSANTS)
------ -------- -------- --------------------- -----------------------------------------
1 11-03-13 12-05-14 SOCIETE('BME', 'FES') PRODUIT('prod1', 12, 'noir', 'aluminium')