I'd like to create a stored procedure that recovers just one floor from table FL_D and insert any value in the tables: site, bl, fl
for example, if I want recover fl_id=A04 bl_id=001 I must insert into fl (site_id=001, bl_id=001, fl_id=A04) - insert into bl (bl_id='001', site_id='001') - insert into site (site_id='001') and finally delete from fl_d, bl_d, site_d
I tried this:
CREATE OR REPLACE PROCEDURE BL_FLOOR (BUILD_IN VARCHAR2, FLOOR_IN VARCHAR2) AS
BEGIN
DECLARE
VAR_FL_ID FL.FL_ID%TYPE;
VAR_BL_ID BL.BL_ID%TYPE;
VAR_SITE_ID SITE.SITE_ID%TYPE;
CURSOR CURSORE IS
SELECT SITE_ID,
BL_ID,
FL_ID
FROM FL_D
WHERE BUILD_IN = BL_ID
and FLOOR_IN = FL_ID;
BEGIN
OPEN CURSORE;
LOOP
FETCH CURSORE INTO VAR_SITE_ID,VAR_BL_ID,VAR_FL_ID;
EXIT WHEN CURSORE%NOTFOUND;
BEGIN
INSERT INTO SITE
(SELECT *
FROM SITE_D
WHERE SITE_ID = VAR_SITE_ID
AND NOT EXISTS
(SELECT *
FROM SITE
WHERE SITE_ID = SITE_D.SITE_ID));
COMMIT;
END;
BEGIN
INSERT INTO BL
(SELECT *
FROM BL_D
WHERE BL_ID = VAR_BL_ID
AND NOT EXISTS
(SELECT *
FROM BL
WHERE BL_ID = BL_D.BL_ID));
END;
BEGIN
INSERT INTO FL
(SELECT *
FROM FL_D
WHERE FL_ID = VAR_FL_ID
AND NOT EXISTS
(SELECT *
FROM FL
WHERE FL_ID = FL_D.BL_ID
AND FL_ID = FL_D.FL_ID));
END;
BEGIN
DELETE FL_D
WHERE FL_ID = VAR_FL_ID;
COMMIT;
DELETE BL_D
WHERE BL_ID = VAR_BL_ID;
COMMIT;
DELETE SITE_D
WHERE SITE_ID = VAR_SITE_ID;
COMMIT;
END;
END LOOP;
<>
CLOSE CURSORE;
END;
END;
/
Bookmarks