Sql Oracle过程-选择/插入-需要多个结果才能返回-
我见过类似的问题,但我似乎无法让它正常工作。我正在研究一个过程,它的作用相当于一个简单的select语句。闭包是主表的名称。如果需要这些信息,我会使用TOAD&APEXSql 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
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;
/