So füllen Sie die Datenbank mit Prozeduren auf
Ich habe ungefähr 15 verschiedene Tabellen, die mit verschiedenen Daten und verschiedenen Entitätsbeziehungen gefüllt sind.
Ich muss ein Skript erstellen, das meine Datenbank mit dem Inhalt dieser Tabellen füllt.
Nachdem das Skript fertig ist, starte ich es in cmd mit sqlplus und später STARTPfad zur Datei
Ich habe zwei verschiedene SQL-Dateien, eine mit dem Namen db_spec.sql und eine andere mit dem Namen db_body.sql.
n meiner Datei db_body.sql habe ich eine Prozedur zum Speichern von Daten aus zwei Tabellen mit einer 1: N-Beziehung erstell
Erster Tisch
CREATE TABLE LOCATION (
ID_LOCATION INTEGER NOT NULL,
LOCATION_NAME VARCHAR2 (20) NOT NULL,
POSTCODE INTEGER NOT NULL
);
ALTER TABLE LOCATION
ADD (CONSTRAINT PK_LOCATION PRIMARY KEY (ID_LOCATION));
Zweite Tabelle
CREATE TABLE ADDRESS (
ID_ADDRESS INTEGER NOT NULL,
STREET VARCHAR2 (20) NOT NULL,
HOUSE_NUMBER INTEGER NOT NULL,
FK_ID_LOCATION INTEGER NOT NULL
);
ALTER TABLE ADDRESS
ADD (CONSTRAINT PK_ADRESS PRIMARY KEY (ID_ADRESS));
ALTER TABLE ADRESS
ADD (CONSTRAINT FK_ADRESS_ID_LOCATION FOREIGN KEY
(FK_ID_LOCATION) REFERENCES LOCATION(ID_LOCATION));
Jetzt muss ich sie mit Daten füllen. Sagen wi
LOCATION_NAME = "London" POSTOCDE = "394505" ... und so weiter
Ich habe dieses Skript erstellt, aber während ich es ausführe, wird nichts angezeigt, sodass es offensichtlich einen Fehler enthält.
db_spec.sql script
CREATE OR REPLACE PACKAGE apartment AS
PROCEDURE fill_location(location_number NUMBER);
PROCEDURE fill_address(number_of_addresses NUMBER);
END apartment;
db_body.sql script
SET SERVEROUTPUT ON
SET LINESIZE 400
SET TIMING ON
CREATE OR REPLACE PACKAGE BODY address AS
PROCEDURE fill_location(location_number NUMBER) IS
p_location_name VARCHAR2(20);
p_postcode NUMBER (10,2);
BEGIN
FOR num IN 1..location_number LOOP
p_location_name := 'Location';
p_postcode := dbms_random.value(1000,9600);
p_postcode := p_postcode ||' '|| TO_CHAR(num);
INSERT INTO LOCATION (ID_LOCATION, LOCATION, POSTCODE)
VALUES (num, p_location_name, p_postcode);
dbms_output.put_line(num);
END LOOP;
END fill_location;
PROCEDURE fill_address(number_of_adresses NUMBER)IS
p_street_name VARCHAR(20);
p_house_number NUMBER (10,2);
p_id_address NUMBER(10);
CURSOR data IS
SELECT ID_LOCATION
FROM LOCATION;
BEGIN
FOR num_loop IN data LOOP
FOR num IN 1..number_of_adresses LOOP
p_street_name := 'Ulica';
p_house_number := dbms_random.value(1,99);
p_street_name := p_street_name ||' '|| TO_CHAR(num);
SELECT NVL(MAX(p_id_address)+1,1)
INTO p_id_address
FROM ADDRESS;
INSERT INTO ADDRESS (ID_ADDRESS, FK_ID_LOCATION, STREET, HOUSE_NUMBER)
VALUES (p_id_address, num_loop.ID_LOCATION, p_street_name, p_house_number);
dbms_output.put_line(num_loop.ID_LOCATION);
END LOOP;
END LOOP;
END fill_address;
END;
SHOW ERRORS;
Kann ihr mir bitte helfen, das Problem zu beheben, damit der Code ausgeführt wird und funktioniert? Jede Eingabe wird geschätzt!
Btw oprema_stanovanja.polni_kraj = address.fill_location