ďťż
 
Obiektowy PL/SQL - problem z typem REF ďťż
 
Obiektowy PL/SQL - problem z typem REF
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

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.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    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.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • autwywalczyl.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

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com