Sql 错误-此处不允许列&;插入时值过多
在创建Subscriber\u T类型的Subscriber表及其函数后,我遇到了这个新问题,我似乎无法在Subscriber表中插入任何值。错误,我一直得到列不允许在这里。但是在哪里 这些是脚本和插入记录Sql 错误-此处不允许列&;插入时值过多,sql,oracle,function,types,Sql,Oracle,Function,Types,在创建Subscriber\u T类型的Subscriber表及其函数后,我遇到了这个新问题,我似乎无法在Subscriber表中插入任何值。错误,我一直得到列不允许在这里。但是在哪里 这些是脚本和插入记录 CREATE OR REPLACE TYPE Surnames_T AS OBJECT ( Surname varchar (20) ); / CREATE OR REPLACE TYPE listSurnames_T AS Varray(4) of Surnames_T; /
CREATE OR REPLACE TYPE Surnames_T AS OBJECT (
Surname varchar (20)
);
/
CREATE OR REPLACE TYPE listSurnames_T
AS Varray(4) of Surnames_T;
/
CREATE OR REPLACE TYPE listTels as object(
Tel number (12)
);
/
CREATE OR REPLACE TYPE listTels_T as Varray(5) of listTels;
/
CREATE OR REPLACE TYPE ADDRESS_T AS OBJECT (
NUM number (6),
STREET varchar (20),
TOWN varchar (20)
);
/
CREATE or replace type TAddress
as table of Address_T;
/
create or replace type Subscriber_T as object(
num_s number(6),
sName varchar(30),
surname listSurnames_T,
Adds TAddress,
DateOfBirth date,
phoneNo listTels_T,
member function Age return number
);
/
create table Subscribers of Subscriber_T(
CONSTRAINT subscriber_pk primary key (num_s)
)
nested table Adds store as Tab_Adds;
/
show errors
create or replace type body Subscriber_T as
member function Age return number is
calc_age number;
dob date;
diff date;
begin
select S.dateOfBirth into dob
from Subscribers S
where deref(S.num_s) = self
diff := sysdate - dob
calc_age := to_Char(diff, 'YYYY')
return cal_age;
end;
end;
/
show errors
insert into Subscribers values (34, Chloe, listSurnames_T(Surnames_T('Dave'), Surnames_T('Camille'), Surnames_T('Jones')),
TAddress(Address_T(10, 'ave Foch', 'Ravenwood'), Address_T(30, 'rue des pole', 'England')),
'10-11-1976',
listTels_T(listTels(5839550456), listTels(6834734567)));
我猜函数会引发这个问题,但它在编译时没有显示错误。一些问题:
age
中执行选择
'10-11-1976'
转换为日期VARCHAR2
CREATE OR REPLACE TYPE Surnames_T AS OBJECT (
Surname varchar2 (20)
)
/
CREATE OR REPLACE TYPE listSurnames_T
AS Varray(4) of Surnames_T
/
CREATE OR REPLACE TYPE listTels as object(
Tel number (12)
)
/
CREATE OR REPLACE TYPE listTels_T as Varray(5) of listTels
/
CREATE OR REPLACE TYPE ADDRESS_T AS OBJECT (
NUM number (6),
STREET varchar2 (20),
TOWN varchar2 (20)
)
/
CREATE or replace type TAddress as table of Address_T
/
create or replace type Subscriber_T as object(
num_s number(6),
sName varchar2(30),
surname listSurnames_T,
Adds TAddress,
DateOfBirth date,
phoneNo listTels_T,
member function Age return number
)
/
create or replace type body Subscriber_T as
member function Age return number is
begin
return FLOOR( MONTHS_BETWEEN( SYSDATE, self.DateOfBirth )/12 );
end;
end;
/
create table Subscribers of Subscriber_T(
CONSTRAINT subscriber_pk primary key (num_s)
)
nested table Adds store as Tab_Adds
/
insert into Subscribers values (
34,
'Chloe',
listSurnames_T(
Surnames_T('Dave'),
Surnames_T('Camille'),
Surnames_T('Jones')
),
TAddress(
Address_T(10, 'ave Foch', 'Ravenwood'),
Address_T(30, 'rue des pole', 'England')
),
TO_DATE( '10-11-1976', 'DD-MM-YYYY' ),
listTels_T(
listTels(5839550456),
listTels(6834734567)
)
)
/
SELECT s.age() FROM subscribers s
| S.AGE() |
|---------|
| 37 |
查询1:
CREATE OR REPLACE TYPE Surnames_T AS OBJECT (
Surname varchar2 (20)
)
/
CREATE OR REPLACE TYPE listSurnames_T
AS Varray(4) of Surnames_T
/
CREATE OR REPLACE TYPE listTels as object(
Tel number (12)
)
/
CREATE OR REPLACE TYPE listTels_T as Varray(5) of listTels
/
CREATE OR REPLACE TYPE ADDRESS_T AS OBJECT (
NUM number (6),
STREET varchar2 (20),
TOWN varchar2 (20)
)
/
CREATE or replace type TAddress as table of Address_T
/
create or replace type Subscriber_T as object(
num_s number(6),
sName varchar2(30),
surname listSurnames_T,
Adds TAddress,
DateOfBirth date,
phoneNo listTels_T,
member function Age return number
)
/
create or replace type body Subscriber_T as
member function Age return number is
begin
return FLOOR( MONTHS_BETWEEN( SYSDATE, self.DateOfBirth )/12 );
end;
end;
/
create table Subscribers of Subscriber_T(
CONSTRAINT subscriber_pk primary key (num_s)
)
nested table Adds store as Tab_Adds
/
insert into Subscribers values (
34,
'Chloe',
listSurnames_T(
Surnames_T('Dave'),
Surnames_T('Camille'),
Surnames_T('Jones')
),
TAddress(
Address_T(10, 'ave Foch', 'Ravenwood'),
Address_T(30, 'rue des pole', 'England')
),
TO_DATE( '10-11-1976', 'DD-MM-YYYY' ),
listTels_T(
listTels(5839550456),
listTels(6834734567)
)
)
/
SELECT s.age() FROM subscribers s
| S.AGE() |
|---------|
| 37 |
:
CREATE OR REPLACE TYPE Surnames_T AS OBJECT (
Surname varchar2 (20)
)
/
CREATE OR REPLACE TYPE listSurnames_T
AS Varray(4) of Surnames_T
/
CREATE OR REPLACE TYPE listTels as object(
Tel number (12)
)
/
CREATE OR REPLACE TYPE listTels_T as Varray(5) of listTels
/
CREATE OR REPLACE TYPE ADDRESS_T AS OBJECT (
NUM number (6),
STREET varchar2 (20),
TOWN varchar2 (20)
)
/
CREATE or replace type TAddress as table of Address_T
/
create or replace type Subscriber_T as object(
num_s number(6),
sName varchar2(30),
surname listSurnames_T,
Adds TAddress,
DateOfBirth date,
phoneNo listTels_T,
member function Age return number
)
/
create or replace type body Subscriber_T as
member function Age return number is
begin
return FLOOR( MONTHS_BETWEEN( SYSDATE, self.DateOfBirth )/12 );
end;
end;
/
create table Subscribers of Subscriber_T(
CONSTRAINT subscriber_pk primary key (num_s)
)
nested table Adds store as Tab_Adds
/
insert into Subscribers values (
34,
'Chloe',
listSurnames_T(
Surnames_T('Dave'),
Surnames_T('Camille'),
Surnames_T('Jones')
),
TAddress(
Address_T(10, 'ave Foch', 'Ravenwood'),
Address_T(30, 'rue des pole', 'England')
),
TO_DATE( '10-11-1976', 'DD-MM-YYYY' ),
listTels_T(
listTels(5839550456),
listTels(6834734567)
)
)
/
SELECT s.age() FROM subscribers s
| S.AGE() |
|---------|
| 37 |
编辑
我不知道你为什么要在姓氏
类型中包装VARCHAR2
,或者在列表中包装数字
。您可以忽略这些,只需执行以下操作:
CREATE OR REPLACE TYPE listSurnames_T
AS Varray(4) of VARCHAR2(20)
/
CREATE OR REPLACE TYPE listTels_T as Varray(5) of NUMBER(12)
/
以及:
您不需要
和/
:NP,如果它解决了您的问题,请接受答案和/或向上投票(您前面的问题也是如此)。如果它不能解决问题,那么发布进一步的问题。嗨,MTO。例如,如果我想对订户进行更新,以更改克洛伊的第一个地址和电话,我该怎么做?Plz建议。很抱歉,我没有被允许投票支持bcs,因为我是新来的&所以我没有足够的声誉。我不知道这里的情况如何。请原谅,我仍在处理我的代表。^-显示嵌套表(您的地址)中的条目的插入
、更新
和删除
。我不使用VARRAY
s,因此不知道使用SQL添加/更新/删除元素的语法,快速搜索只能找到替换整个条目的语法-有关帮助MTO,请参阅该SQLFIDDLE.tnx中的最后一个示例。我现在有了更好的理解。