Search code examples
sqloracle-databaseoracle-apexinsert-intoprocedures

Oracle Procedures -Select/Insert Into - Need Multiple Results to Return -


I've seen questions similar to this but I can't seem to get this to properly work. I'm working on a procedure where it's pretty much acts as a simple select statement. Closures is the name of the main table. I'm using TOAD & APEX if that information is needed.

Tbl_Web_Closures
(
RECORDID          NUMBER,
BEGDATE           DATE,
ENDDATE           DATE,
STLOCATION        VARCHAR2(50 BYTE),
DESCRIPTION       VARCHAR2(400 BYTE),
STATUS            NUMBER,
TYPEOF            NUMBER,
INACTIVEDATE      DATE,
AGENCY            NUMBER,
CITY              NUMBER,
ROUTEDESCRIPTION  VARCHAR2(4000 BYTE),
NAMEEVENT         VARCHAR2(40 BYTE),
TIMESTART         DATE,
TIMEEND           DATE

I've gotten a clear understanding of the fact hat you can't use a simple select statement in a procedure and that you need some form of an into statement.

I have attempted many variations and still can't get the results I am looking for. I need not just one result but all that match the query.

Which is

SELECT "STLOCATION" AS "Location",
   "BEGDATE" AS "Begin Date",
   "ENDDATE" AS "End Date",
   "TBL_WEBCLOSURES"."DESCRIPTION" AS "Description",
   "TBL_TYPE"."TYPESIT" AS "Type",
   "TBL_CITY"."CITY" AS "City"

    FROM "TBL_CITY" "TBL_CITY",
   "TBL_TYPE" "TBL_TYPE",
   "TBL_STATUS" "TBL_STATUS",
   "TBL_AGENCY" "TBL_AGENCY",
   "TBL_WEBCLOSURES" "TBL_WEBCLOSURES"

    WHERE     "TBL_AGENCY"."AGENCYID" = "TBL_WEBCLOSURES"."AGENCY"
   AND "TBL_STATUS"."STATUSID" = "TBL_WEBCLOSURES"."STATUS"
   AND "TBL_TYPE"."TYPEID" = "TBL_WEBCLOSURES"."TYPEOF"
   AND "TBL_CITY"."CITYID" = "TBL_WEBCLOSURES"."CITY"
   AND "TBL_WEBCLOSURES".AGENCY = '2'
   AND ENDDATE = TRUNC (SYSDATE + 5);

I've tried numerous variations including

create or replace procedure            my_Procedure (v_my_var in  char default null
                                    ,cv_1     OUT TBL_WEBCLOSURES%rowtype) as rt TBL_WEBCLOSURES%rowtype;
 begin


 SELECT *
 into   rt
 FROM TBL_WEBCLOSURES 
 WHERE  ENDDATE = TRUNC (SYSDATE + 5);



 END my_Procedure;​

Another one

  CREATE OR REPLACE PROCEDURE "ABC6" (
   stlocation      IN     VARCHAR2,
 o_stlocation       OUT TBL_WEBCLOSURES%ROWTYPE,
   BEGDATE         IN     DATE,
 o_begdate          OUT TBL_WEBCLOSURES%ROWTYPE,
   ENDDATE         IN     DATE,
 o_enddate          OUT TBL_WEBCLOSURES%ROWTYPE,
  DESCRIPTION     IN     VARCHAR2,
 o_description      OUT TBL_WEBCLOSURES%ROWTYPE,
   TYPESIT         IN     NUMBER,
 o_typesit          OUT TBL_WEBCLOSURES%ROWTYPE,
   CITY            IN     NUMBER,
 o_city             OUT TBL_WEBCLOSURES%ROWTYPE)
IS
BEGIN
   SELECT "STLOCATION" AS "Location",
      "BEGDATE" AS "Begin Date",
      "ENDDATE" AS "End Date",
      "TBL_WEBCLOSURES"."DESCRIPTION" AS "Description",
      "TBL_TYPE"."TYPESIT" AS "Type"
      "TBL_CITY"."CITY" AS "City"

  INSERT INTO o_stlocation,
      o_begdate,
      o_enddate,
      o_description,
      o_typesit,
      o_city
 FROM "TBL_CITY" "TBL_CITY",
   "TBL_TYPE" "TBL_TYPE",
   "TBL_STATUS" "TBL_STATUS",
   "TBL_AGENCY" "TBL_AGENCY",
   "TBL_WEBCLOSURES" "TBL_WEBCLOSURES"
 WHERE     "TBL_AGENCY"."AGENCYID" = "TBL_WEBCLOSURES"."AGENCY"
       AND "TBL_STATUS"."STATUSID" = "TBL_WEBCLOSURES"."STATUS"
       AND "TBL_TYPE"."TYPEID" = "TBL_WEBCLOSURES"."TYPEOF"
       AND "TBL_CITY"."CITYID" = "TBL_WEBCLOSURES"."CITY"
       AND "TBL_WEBCLOSURES".AGENCY = '2'
       AND ENDDATE = TRUNC (SYSDATE + 5);
    END;

I've modified, tried different ways, etc. I just can't seem to get it to come out correctly.


Solution

  • I think I pretty much figured it out.

    CREATE OR REPLACE PROCEDURE roadclosure_notif4
    IS
      road_refcur2   SYS_REFCURSOR;
      v_stlocation   TBL_WEBCLOSURES.stlocation%TYPE;
      v_enddate      TBL_WEBCLOSURES.DESCRIPTION%TYPE;
      BEGIN
      OPEN road_refcur2 FOR
         'SELECT "STLOCATION",
    
         "ENDDATE"
    
    FROM "TBL_CITY" "TBL_CITY",
       "TBL_TYPE" "TBL_TYPE",
       "TBL_STATUS" "TBL_STATUS",
       "TBL_AGENCY" "TBL_AGENCY",
       "TBL_WEBCLOSURES" "TBL_WEBCLOSURES"
    WHERE     "TBL_AGENCY"."AGENCYID" = "TBL_WEBCLOSURES"."AGENCY"
       AND "TBL_STATUS"."STATUSID" = "TBL_WEBCLOSURES"."STATUS"
       AND "TBL_TYPE"."TYPEID" = "TBL_WEBCLOSURES"."TYPEOF"
       AND "TBL_CITY"."CITYID" = "TBL_WEBCLOSURES"."CITY"
       AND "TBL_WEBCLOSURES".AGENCY = 2
       AND ENDDATE = TRUNC (SYSDATE + 5)';
    
      DBMS_OUTPUT.PUT_LINE ('Location    End Date');
    
    
     LOOP
      FETCH road_refcur2 INTO v_stlocation, v_enddate;
    
      EXIT WHEN road_refcur2%NOTFOUND;
      DBMS_OUTPUT.PUT_LINE (v_stlocation || '     ' || v_enddate);
     END LOOP;
    
     CLOSE road_refcur2;
    END;
     /