cómo llenar la database usando procedimientos

Tengo alnetworkingedor de 15 tablas diferentes llenas de datos diferentes y relaciones de entidades diferentes.

Necesito crear un script que llene mi database con el contenido de esas tablas.

Una vez finalizado el script, lo ejecuto en cmd, usando sqlplus y luego START path to file

Tengo dos files sql diferentes, uno llamado db_spec.sql y otro db_body.sql.

En mi db_body.sql he creado un procedimiento para almacenar datos de dos tablas que tienen una relación 1: N.

Primera table

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

Segunda table

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

Ahora necesito poblarlos usando datos. Digamos

LOCATION_NAME = "London" POSTOCDE = "394505" … y así sucesivamente

Creé este script, pero a medida que lo ejecuto, no aparece nada, por lo que obviamente hay algún error en él.

script db_spec.sql

 CREATE OR REPLACE PACKAGE apartment AS PROCEDURE fill_location(location_number NUMBER); PROCEDURE fill_address(number_of_addresses NUMBER); END apartment; 

script db_body.sql

 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; 

¿Pueden ayudarme a solucionar el problema para que el código funcione y funcione bien? Cualquier input es apreciada!

Btw oprema_stanovanja.polni_kraj = address.fill_location

No pasa nada

A less que me lo COMMIT;COMMIT;
En function de la captura de pantalla que emitió, agregue a / al final de su cuerpo y las definiciones de procedimientos.

En primer lugar, el package publicado no se comstack sin errores.

Debería corregir lo siguiente primero:

  1. FOR LOOP instrucciones FOR LOOP con END LOOP
  2. Finalice BEGIN de procedimientos con END <procedure_name_here>
  3. Los nombres de las variables PL / SQL deben ser diferentes al nombre de la columna para evitar ambigüedades en la instrucción INSERT. [No puede tener LOCATION el nombre de la columna y la variable PL / SQL con el mismo nombre. Oracle no puede resolver cuál se usará en el INSERT]

Para comenzar, he arreglado el procedimiento fill_location continuación. Proceda de manera similar para el otro procedimiento.

 create or replace package body apartment 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_location_name := p_location_name ||' '|| to_char(num); insert into location (id_location, location_name, postcode) values (num, p_location_name, p_postcode); dbms_output.put_line(num); end loop; end fill_location; 

Repare los errores / sugerencias anteriores hasta que obtenga 'PL / SQL comstackdo con éxito'. Si obtiene 'comstackdo con errores' use "mostrar errores" para encontrar y corregir cualquier otro error.