Obiektowy PL/SQL - problem z typem REF
Adamzrk - 16-11-2005 11:17
Obiektowy PL/SQL - problem z typem REF
Witam
Jest sobie tabelka: create table loty ( id_lotu number not null primary key, lot lot_typ ); lot_typ to zdefiniowany wcześniej typ. oraz tabelka:
create table rezerwacje ( id_rezerwacji number primary key not null, lot ref lot_typ not null, uzytkownik ref uzytkownik_typ not null, ile_osob number not null, data_rezerwacji date default sysdate, palacy char(1) default ('N') not null, przy_oknie char(1) default ('N') not null, klasa number(1) default (1) not null );
Fragment procedury dodającej wiersz do tabeli rezerwacje: procedure rezerwuj(id_lotu_in in number, login_in in varchar2, ile_osob_in in number, palacy_in in char, przy_oknie_in in char, klasa_in in integer, wynik out number) is x loty%rowtype; lot_temp lot_typ; uzytkownik_temp uzytkownik_typ; begin
select * into x from loty where id_lotu = id_lotu_in;
lot_temp := x.lot;
select value(u) into uzytkownik_temp from uzytkownicy u where u.login = login_in;
insert into rezerwacje (id_rezerwacji,lot,uzytkownik,ile_osob,data_rezerw acji,palacy,przy_oknie,klasa) values (rezerwacje_seq.nextval,lot_temp,uzytkownik_temp,i le_osob_in,sysdate,palacy_in,przy_oknie_in,klasa_i n); wynik := 0; exception when no_data_found then wynik := 2; -- nie ma lotu bądź użytkownika when others then wynik := 3; -- jakiś inny błąd
end;
Zawsze dostaję błąd kompilacji: Błędy dla PACKAGE BODY PORTAL:
LINE/COL ERROR -------- ----------------------------------------------------------------- 63/6 PL/SQL: SQL Statement ignored 64/37 PL/SQL: ORA-00932: niespójne typy danych: oczekiwano SCOTT.LOT_TYP, otrzymano REF SCOTT.LOT_TYP
Nie wiem jak wstawić do tych pól typu REF aby było dobrze. Może chociaż jakaś mała podpowiedż :> ? Z góry dzięki za wszelkie pomocne odpowiedzi.
Pozdrawiam
Morff - 16-11-2005 21:31
Dnia 15-11-2005 o 22:30:33 Adamzrk <adamzrk@gazeta.pl> napisał:
> lot_typ to zdefiniowany wczeÂśniej typ. > oraz tabelka: > > create table rezerwacje ( > id_rezerwacji number primary key not null, > lot ref lot_typ not null, > uzytkownik ref uzytkownik_typ not null, > ile_osob number not null, > data_rezerwacji date default sysdate, > palacy char(1) default ('N') not null, > przy_oknie char(1) default ('N') not null, > klasa number(1) default (1) not null > );
jezeli masz zdefiniowane typy lot_typ oraz uzytkownik_typ , to dlaczego uzywasz w stosunku do nich REF ? te typy są wynikiem procedury lub funkcji ?
moze wkleisz tu idefinicje tych typów ?
-- Pozdrawiam Morff ---------------------- AQQ 141151
Adamzrk - 16-11-2005 21:31
Używam REF żeby mieć odwołania do obiektów z innych tabel (obiektowych). Ponizej definicje typów: create or replace type uzytkownik_typ as object ( imie varchar2(40), nazwisko varchar2(60), pesel varchar2(11), login varchar(30), telefon varchar2(15), haslo varchar2(30), adres adres_typ, administrator char(1), member function get_imie return varchar2, member function get_nazwisko return varchar2, member function get_pesel return varchar2, member function get_telefon return varchar2, member function get_login return varchar2, member function get_haslo return varchar2, member function get_adres return adres_typ, member function is_admin return boolean );
create or replace type lot_typ as object ( skad lotnisko_typ, dokad lotnisko_typ, samolot samolot_typ, odlot date, przylot date, ile_wolnych_miejsc number(3), ile_wolnych_miejsc_palacych number(3), ile_wolnych_miejsc_niepalacych number(3), ile_wolnych_miejsc_przy_oknie number(3), ile_wolnych_miejsc_I_klasa number(3), ile_wolnych_miejsc_II_klasa number(3), cena_I_klasa number, cena_II_klasa number, constructor function lot_typ(skad_in in lotnisko_typ, dokad_in in lotnisko_typ, samolot_in in samolot_typ, odlot_in in date, przylot_in in date, cena_I_klasa_in in number) return self as result,
member function get_skad return lotnisko_typ, member function get_dokad return lotnisko_typ, member function get_samolot return samolot_typ, member function get_odlot return date, member function get_przylot return date, member function get_ile_wolnych_miejsc return number, member function get_ile_wolnych_miejsc_okno return number, --ilosc wolnych miejsc przy oknie member function get_ile_wolnych_palacych return number, member function get_ile_wolnych_niepalacych return number, member function get_ile_miejsc_I_klasa return number, member function get_ile_miejsc_II_klasa return number, member function get_cena_I_klasa return number, member function get_cena_II_klasa return number
);
Pozdrawiam
Morff - 16-11-2005 21:31
Dnia 16-11-2005 o 19:49:07 Adamzrk <adamzrk@gazeta.pl> napisał:
> UÂżywam REF Âżeby mieĂŚ odwoÂłania do obiektów z innych tabel (obiektowych). > Ponizej definicje typów: > create or replace type uzytkownik_typ as object ( > imie varchar2(40), > nazwisko varchar2(60), > pesel varchar2(11), > login varchar(30), > telefon varchar2(15), > haslo varchar2(30), > adres adres_typ, > administrator char(1), > member function get_imie return varchar2, > member function get_nazwisko return varchar2, > member function get_pesel return varchar2, > member function get_telefon return varchar2, > member function get_login return varchar2, > member function get_haslo return varchar2, > member function get_adres return adres_typ, > member function is_admin return boolean > ); > > create or replace type lot_typ as object ( > skad lotnisko_typ, > dokad lotnisko_typ, > samolot samolot_typ, > odlot date, > przylot date, > ile_wolnych_miejsc number(3), > ile_wolnych_miejsc_palacych number(3), > ile_wolnych_miejsc_niepalacych number(3), > ile_wolnych_miejsc_przy_oknie number(3), > ile_wolnych_miejsc_I_klasa number(3), > ile_wolnych_miejsc_II_klasa number(3), > cena_I_klasa number, > cena_II_klasa number, > constructor function lot_typ(skad_in in lotnisko_typ, > dokad_in in lotnisko_typ, > samolot_in in samolot_typ, > odlot_in in date, > przylot_in in date, > cena_I_klasa_in in number) return self as > result, > > member function get_skad return lotnisko_typ, > member function get_dokad return lotnisko_typ, > member function get_samolot return samolot_typ, > member function get_odlot return date, > member function get_przylot return date, > member function get_ile_wolnych_miejsc return number, > member function get_ile_wolnych_miejsc_okno return number, --ilosc > wolnych > miejsc przy oknie > member function get_ile_wolnych_palacych return number, > member function get_ile_wolnych_niepalacych return number, > member function get_ile_miejsc_I_klasa return number, > member function get_ile_miejsc_II_klasa return number, > member function get_cena_I_klasa return number, > member function get_cena_II_klasa return number > > ); > > Pozdrawiam
hmm .. myślałem ze ref to wskaźnik do zbiorów nieistniejących w chwili kompilacji - np. własnie tabel które są wynikami funkcji lub procedur ... Zreszą sam kompilator ci mówi ze REF nie jest potrzebne ..
nie wiem też czy przy takim przypisaniu :
uzytkownik_temp uzytkownik_typ
nie powinieneś wywołać konstruktora :
uzytkownik_temp uzytkownik_typ:=uzytkownik_typ();
-- Pozdrawiam Morff ---------------------- AQQ 141151
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
jak to =?ISO-8859-2?Q?zrobi=E6=2E=2E=2E=3F_TSQL_sql_server?==?ISO-8859-2?Q?_?=
[MSSQL2000] Problem z =?ISO-8859-2?Q?tabel=B1/indeksem/zapytanie?==?ISO-8859-2?Q?m_czy_b=B3=B1d_w_bazie_danych=2E=2E=2E?=
Jak =?windows-1250?Q?pobra=E6_szacowan=B9_wielko=9C=E6_zbiory_wy nikowego_w_MS?==?windows-1250?Q?_SQL_2005=3F?=
=?iso-8859-2?Q?=5BMS_SQL=5D_Czy_mo=BFna_wywo=B3a=E6_funkcje_t ylko_raz_dla?==?iso-8859-2?Q?_ca=B3ego_zbioru_=BCr=F3d=B3owego=3F?=
[MSSQL] =?ISO-8859-2?Q?zgodno=B6ci_z_licencjami_Microsoft_?==?ISO-8859-2?Q?SQL_Server?=
=?ISO-8859-2?Q?k=B3opot_z_uruchomieniem_MY_SQL_dla_C?==?ISO-8859-2?Q?MS_i_CRM_na_Fedora_Core_3?=
[MSSQL] ACCESS - SQL =?ISO-8859-2?Q?B=B3ad_w_konwersji_lic?==?ISO-8859-2?Q?zb?=
=?iso-8859-2?Q?=5Bmssql=5D_Zapytania_rekurencyjne__-_czy_sk=B3adnia_sql?==?iso-8859-2?Q?_co=B6_takiego_przewiduje_=3F?=
=?iso-8859-2?Q?=5BMySQL=5D_Co_minimalnie_potrzebne_zeby_mie=E 6_klienta_My?==?iso-8859-2?Q?SQL_na_Linuxie=3F?=
[newbie] MS SQL - praca =?ISO-8859-2?Q?jednocze=B6nie_na_2_?==?ISO-8859-2?Q?bazach_=28linkowanie_=3F=29?=
zanotowane.pldoc.pisz.plpdf.pisz.plautwywalczyl.opx.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|