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

Antworten auf die Frage(4)

Ihre Antwort auf die Frage