procedura pl/sql

0

Witam mam problemy z napisaniem procedury. Procedura ma dodawac kraj,miejscowosc i przeslac id do tabeli adres jesli jeszcze nie ma miejscowosci i kraju a jesli już jest dodany taki kraj to ma sobie pobrac id kraju, id miejscowosci itd w skrÓcie ma to być insert ze sprawdzaniem czy jest taki ID jesli jest to pobiera i przesyla dalej jesli nie to dodaje nowa wartosc, na wartosci adres_id,kraj_id,miejscowosc_id zalozylem triggery auto increment-ujace
Schemat wyglada tak:

CREATE TABLE ADRESY
  (
    ADRES_ID             INTEGER NOT NULL ,
    MIEJSCOWOSC_ID       INTEGER NOT NULL ,
    ULICA                VARCHAR2 (50) ,
    KOD_POCZTOWY         VARCHAR2 (10)
  ) ;
CREATE TABLE KRAJE
  ( KRAJ_ID INTEGER NOT NULL , KRAJ VARCHAR2 (50)
  ) ;
CREATE TABLE MIASTA
  (
    MIEJSCOWOSC_ID INTEGER NOT NULL ,
    KRAJ_ID        INTEGER NOT NULL ,
    MIASTO    VARCHAR2 (50)
  ) ;

Dziękuję z góry za wszelką pomoc

0

aż nie wierzę, tak dużo tabel?!, nazwy też się zgadzają? ale pierdziu pfff

0

a To ma być w jednym zapytaniu :) ??

0

w paru to umiem napisać też wydaje mi się w jednym bez sensu, ale ewidętnie tak jest poleceniu

0
CREATE TABLE IF NOT EXISTS `ADRESY` (
  `ADRES_ID` int(15) NOT NULL AUTO_INCREMENT,
  `MIEJSCOWOSC_ID` int(15) NOT NULL,
  `ULICA` varchar(50) NOT NULL,
  `KOD_POCZTOWY` varchar(10) NOT NULL,
  PRIMARY KEY (`ADRES_ID`),
  KEY `ADRES_ID` (`ADRES_ID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

CREATE TABLE IF NOT EXISTS `KRAJE` (
  `KRAJ_ID` int(15) NOT NULL AUTO_INCREMENT,
  `KRAJ` varchar(50) NOT NULL,
  PRIMARY KEY (`KRAJ_ID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

CREATE TABLE IF NOT EXISTS `MIEJSCOWOSCI` (
  `MIEJSCOWOSC_ID` int(15) NOT NULL AUTO_INCREMENT,
  `KRAJ_ID` int(15) NOT NULL,
  `MIEJSCOWOSC` varchar(50) NOT NULL,
  PRIMARY KEY (`MIEJSCOWOSC_ID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; 

wgl. to chyba tak wygląda baza?

0

baza wyglada zupelnie inaczej podalem 3 jakies podstawowe wymyślone tabele żeby zrozumieć zasadę jak to się robi, ale tak powinna wyglądać tak jak piszesz

0

Jeżeli dałeś 3 losowe tabele, a to nie dotyczy tematu to widać, że się chcesz nauczyć. Nie dam Ci gotowego rozwiązanie, a przykład rozwiązanego zadania własnego, które znalazłem w swojej bazie. Gdzie wykorzystywana jest kolejna wartość id - z autoinkrementacji. Wykorzystaj odpowiednie instrukcje warunkowe sprawdzające jak coś to pisz na pw, dam Ci kilka przykładów rozwiązanych z procedurami PL/SQL, to się nauczysz.

Napisz procedurę WstawMiejscowosc podając jako parametr wejściowy nazwę miejscowości. Id_Miejscowości uzupełnij korzystając z utworzonej w skrypcie sekwencji.

 
create or replace PROCEDURE WSTAWMIEJSCOWOSC  
( 
  NAZWA_MIEJSCOWOSCI IN VARCHAR2  
) AS  
BEGIN 
  INSERT INTO MIEJSCOWOSC(ID_MIEJSCOWOSCI,NAZWA) VA
LUES 
(SEQ_MIEJSCOWOSC.nextVal,NAZWA_MIEJSCOWOSCI); 
END WSTAWMIEJSCOWOSC
1

to ma być JEDNA PROCEDURA a nie jeden insert. Nie da się tego zrobić jednym insertem. Ogólnie to ma być coś takiego

crete proc (xKraj varchar2, xMiasto varchar2, xUlica varchar2)
begin
  begin  
    select id into i_id from tab where kraj = xKraj;
  EXCEPTION
  WHEN NO_DATA_FOUND THEN
--      dodaj kraj i miasto do tabeli najpierw pobierając ich id z sekwencji
  END;
--sprawdzić czy id miasto null i jak tak to dodać jak wyżej

--dodać adres
end;
0

tak może niejasno wyraziłem się chodziło mi o jedną procedurę dzięki

1 użytkowników online, w tym zalogowanych: 0, gości: 1