Sql Oracle过程-选择/插入-需要多个结果才能返回-

Sql Oracle过程-选择/插入-需要多个结果才能返回-,sql,oracle,oracle-apex,insert-into,procedures,Sql,Oracle,Oracle Apex,Insert Into,Procedures,我见过类似的问题,但我似乎无法让它正常工作。我正在研究一个过程,它的作用相当于一个简单的select语句。闭包是主表的名称。如果需要这些信息,我会使用TOAD&APEX Tbl_Web_Closures ( RECORDID NUMBER, BEGDATE DATE, ENDDATE DATE, STLOCATION VARCHAR2(50 BYTE), DESCRIPTION VARCHAR2(400 BYTE

我见过类似的问题,但我似乎无法让它正常工作。我正在研究一个过程,它的作用相当于一个简单的select语句。闭包是主表的名称。如果需要这些信息,我会使用TOAD&APEX

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
我已经清楚地了解了一个事实,即不能在过程中使用简单的select语句,而需要某种形式的into语句

我尝试了很多变化,但仍然不能得到我想要的结果。我不仅需要一个结果,还需要所有与查询匹配的结果

那是

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);
我尝试过很多变化,包括

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;​
另一个

  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;
我已经修改过,尝试过不同的方法,等等。我似乎无法正确地表达出来

不推荐。您可以创建表%ROWTYPE的记录。创建pl/sql类型的记录集合。然后用值填充该表并返回。链接:

更好。在过程中定义一个out游标。用select填充该过程。完成。链接:


我想我基本上明白了

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