orakel vinden waar een datum in een lijst valt

dus ik maak een orakeldatabase voor mijn universitaire cursussen bij een luchtvaartmaatschappij. Nu heb ik een tabel met de naam staff_allocations die personeel toewijst voor vluchten in de Flight-tabel.

CREATE TABLE FLIGHT (
  FLIGHT_ID NUMBER(11) PRIMARY KEY,
  ROUTE_ID NUMBER(11) NOT NULL,
  PLANE_ID NUMBER(11) NOT NULL,
  PILOT_ID NUMBER(11) NOT NULL,
  DEPARTURE_TIME TIMESTAMP NOT NULL,
  ARRIVAL_TIME TIMESTAMP NOT NULL,
  FREE_SEATS NUMBER (4)
);

CREATE TABLE STAFF_ALLOCATION (
    FLIGHT_ID NUMBER(11) NOT NULL,
    EMPLOYEE_ID NUMBER(11) NOT NULL
);

nu verwijst de route_id in de vluchttabel naar de routentabel.

CREATE TABLE ROUTE (
  ROUTE_ID NUMBER(11) PRIMARY KEY,
  START_ID VARCHAR2(3) NOT NULL,
  DESTINATION_ID VARCHAR2(3) NOT NULL,
  TRANSIT_ID VARCHAR2(3),
  IS_ACTIVE VARCHAR2(1),
  DISTANCE NUMBER (8,2),
  BASE_PRICE NUMBER (6,2)   
);

waar start-ID, bestemmings-ID en doorvoer-ID allemaal verwijzen naar verschillende luchthavencodes (LHR, HAM, etc.)

dus ik probeer een trigger te maken die erachter komt voordat ik de staff_allocation invoegen, of het personeel is toegewezen aan een andere vlucht waarvan de tijd overlapt met de nieuwe. het moet ook controleren of het personeel zich daadwerkelijk in hetzelfde land bevindt als waar de vlucht vandaan komt.

dus zoiets als dit:

zoek naar welke vluchtmedewerker al is toegewezen. vergelijk de vertrektijd van nieuwe vluchten met bestaande vertrektijden van vluchten. als de vluchttijden niet botsen, kijk dan of het personeel al in het land van de nieuwe start_id is

kan iemand me helpen met een van beide voorbeeldcode of door me in de juiste richting te wijzen in wat ik zou moeten zien/gebruiken? dit is mijn eerste keer dat ik iets met orakel maak.

gejuich.

0

2 antwoord

De eerste controle is vrij eenvoudig. Als u het vertrek en de landing weet van de vlucht die u wijzigt, kunt u controleren of er nog een andere vlucht voor de werknemer bestaat, waarvan de aankomstdatumstijd groter is dan de vertrekdatum van de huidige vlucht en de vertrekdatum van die vlucht is vóór de aankomstdatum van de huidige vlucht.

Als een dergelijke vlucht bestaat, overlapt deze met uw huidige vlucht. Maar dit is meer logica dan Oracle.

De andere controle is moeilijker (voor een database). U moet de laatste aankomst voor een specifieke werknemer vinden en het land van aankomst kiezen als het land waarin de werknemer arriveert. Merk op dat dit hypothetisch is. Iemand had als passagier naar huis kunnen gaan, of met de bus. Je moet ook zorgen dat je een startpunt hebt voor elke medewerker. Dus je moet alles toestaan ​​voor iemands eerste vlucht, of je moet het land registreren bij de medewerker zelf. De laatste oplossing 'reist niet' erg goed, het is slechts een vaste locatie en het vertelt niet waar de werknemer op een bepaalde datum zal zijn. Dus ik zou alleen toewijzing toestaan ​​voor werknemers die nieuw zijn en zich niet druk maken over de rest voor deze opdracht.

Het grootste probleem waarmee u te maken krijgt, is dat u geen query kunt uitvoeren op een tabel in een trigger op rijniveau in dezelfde tabel. Dus om dit uit te werken, moet u de ingevoegde records onthouden en een tabelniveau schrijven na het invoegen van de trigger om de controle uit te voeren.

Ik zou je graag wat code geven, maar mensen blijven zeggen dat studenten hun eigen code moeten maken. Dus ik laat de implementatie aan jou over, terwijl ik mijn eigen huiswerk ga doen. :)

1
toegevoegd

Ik denk dat je weet over triggersyntaxis en pl/sql.

Ik raad u aan dbms_output.put_line te controleren om uw trigger te debuggen of een tool te gebruiken die stappunten ondersteunt.

Als u overboord wilt gaan (woordspeling bijna niet bedoeld), moet u controleren of reeds bestaande vluchttoewijzingen die beginnen na de start die u invoert, starten in het land waar de ingevoegde plaats arriveert, anders vervalt de 3 vlucht.

U wilt vlucht B invoegen. Vlucht A gaat van VS naar Mexico, vlucht C gaat van Mexico naar Ons. Vervolgens voer je vlucht B in, van Mexico tot Guatemala. Het is geldig, maar verbreekt vlucht C.

goede vlucht.

1
toegevoegd