2014-05-22 3 views
0

이와 비슷한 질문을 본 적이 있지만 제대로 작동하지 않을 것 같습니다. 나는 간단한 선택 진술로서 꽤 많은 역할을하는 절차에 대해 연구 중이다. 클로저는 주 테이블의 이름입니다. 정보가 필요한 경우 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 문을 사용할 수 없습니다 사실 모자의 명확한 이해를 놓던 그리고 당신은 문로의 어떤 형태의 필요.

많은 변형을 시도했지만 여전히 원하는 결과를 얻을 수 없습니다. 결과가 하나만 필요하지는 않지만 쿼리와 일치하는 결과 만 있으면됩니다. 내가 수정 한 하나

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; 

, 다른 방법을 시도 또 다른

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

등 난 그냥 할 수있는 등 다양한 변화를 시도했습니다

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

입니다

그것을 제대로 나오지 않는 것 같습니다.

답변

0

나는 꽤 많이 알아 냈다고 생각한다.

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; 
/
0
  1. NOT RECOMENDED. yourtable % ROWTYPE의 레코드를 생성 할 수 있습니다. 레코드 컬렉션을 만듭니다 (pl/sql 형식 임). 그런 다음 테이블에 값을 채우고 돌아옵니다. 링크 : http://docs.oracle.com/cd/B10500_01/appdev.920/a96624/05_colls.htm

  2. 더 나은. 프로 시저에 아웃 커서를 정의하십시오. 그 프로 시저를 select로 채 웁니다. 끝난. 링크 : http://www.oracle-base.com/articles/misc/using-ref-cursors-to-return-recordsets.php

관련 문제