2013-12-21 36 views
1

我創建了Subscriber_T類型的Subscriber表後,它的功能我不能在Subscrber表中插入任何值後有這個新問題。錯誤,我不斷收到是列不允許在這裏。但是哪裏???錯誤列不允許在這裏&插入過多的值

這些是腳本和插入記錄。

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))); 

我猜這個函數正在引發這個問題,但是它在編譯時顯示沒有錯誤。

+0

你不需要';'***和***的'/':HTTP://計算器。 com/a/10207695/330315 –

回答

2

的一些問題:

  1. 你並不需要在成員函數ageSELECT
  2. 您尚未註冊名稱Chloe,因此它不是一個字符串。
  3. 您尚未將'10-11-1976'轉換爲日期。
  4. You should not use VARCHAR as a datatype - 改爲使用VARCHAR2

SQL Fiddle

的Oracle 11g R2架構設置

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) 
) 
) 
/

查詢1

SELECT s.age() FROM subscribers s 

Results

| S.AGE() | 
|---------| 
|  37 | 

編輯

我不知道你爲什麼被包裹在Surnames_T類型VARCHAR2ListTels類型NUMBER。您可以忽略這些,只是做:

CREATE OR REPLACE TYPE listSurnames_T 
AS Varray(4) of VARCHAR2(20) 
/

CREATE OR REPLACE TYPE listTels_T as Varray(5) of NUMBER(12) 
/

和:

insert into Subscribers values (
    34, 
    'Chloe', 
    listSurnames_T(
    'Dave', 
    'Camille', 
    '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(
    5839550456, 
    6834734567 
) 
) 
/
+0

謝謝MTO!我會記下來。 –

+0

NP,如果它解決了你的問題,那麼請接受答案和/或upvote(同樣適用於你以前的問題)。如果它不能解決問題,那麼就發佈進一步的問題。 – MT0

+0

你好MTO。例如,如果我想對訂戶更新Chloe的第一個地址和電話,我該怎麼做? Plz忠告。 Tnx –

相關問題