procedura pl/sql

BG
  • Rejestracja:ponad 9 lat
  • Ostatnio:ponad 9 lat
  • Postów:4
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:

Kopiuj
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

edytowany 3x, ostatnio: bg
somekind
Dobrze jest umieszczać kod w znacznikach, na przyszłość rób to sam.
MM
  • Rejestracja:około 12 lat
  • Ostatnio:6 miesięcy
  • Postów:91
0

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

0

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

BG
  • Rejestracja:ponad 9 lat
  • Ostatnio:ponad 9 lat
  • Postów:4
0

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

0
Kopiuj
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?

abrakadaber
abrakadaber
na pewno nie tak wygląda baza bo to oracle a nie mysql ale lepiej zamiast odpowiedzieć to się próbować popisywać...
BG
  • Rejestracja:ponad 9 lat
  • Ostatnio:ponad 9 lat
  • Postów:4
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

edytowany 1x, ostatnio: bg
mariano901229
  • Rejestracja:ponad 10 lat
  • Ostatnio:8 miesięcy
  • Postów:597
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.

Kopiuj
 
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
edytowany 2x, ostatnio: mariano901229
abrakadaber
abrakadaber
ten twój przykład to o kant stołu rozbić...
abrakadaber
abrakadaber
  • Rejestracja:ponad 12 lat
  • Ostatnio:8 miesięcy
  • Postów:6610
1

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

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

Chcesz pomocy - pokaż kod - abrakadabra źle działa z techniką.
BG
  • Rejestracja:ponad 9 lat
  • Ostatnio:ponad 9 lat
  • Postów:4
0

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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.