2017-12-19 4 views
0

두 날짜 사이에 판매 정보 (날짜, 숫자)를 내보내는 SELECT가 있습니다.Oracle SQL. 프로 시저의 데이터 범위

SELECT SALE_DATE, SALE_NUM 
from SALES 
where sale_date between '&fromdate' AND '&todate'; 

하지만 절차로 이것을 만들고 싶습니다. 그것을하는 방법? 내가 시도하는 것 : 절차의

create or replace procedure SALE_DATES(var_saledate in SALES.SALE_DATE%TYPE) 
AS 
BEGIN 
DECLARE Cursor c4 IS 
SELECT SALE_DATE, SALE_NUM 
from SALES 
where sale_date = var_saledate AND var_saledate between '&fromdate' AND '&todate'; 
BEGIN FOR item IN c4 

    LOOP 
    DBMS_OUTPUT.PUT_LINE 
    ('Date= ' || item.sale_date || ', Sale number: ' || item.sale_num); 
    END LOOP; 
    END; 
    END; 

시작 :

begin SALE_DATES(.....); 
end; 

내가 괄호에 어떤 매개 변수를 사용해야합니까?

+2

나는 당신이 당신의 순서로 두 개의 매개 변수를 전달해야하려고 생각합니다. 그럼 당신은 어디서나 sale_date를 P_from_date와 P_to_date 사이에 사용할 수 있습니다 –

답변

2

두 가지 매개 변수를 사용하면 날짜 범위를 전달할 수 있습니다 ... 나는 더 많은 표준 명명 규칙을 사용하여 좀 더 명확하게 설명했습니다. P_from_date 및 P_to_date :

CREATE OR REPLACE PROCEDURE get_sales 
(P_from_date IN DATE 
,P_to_date IN DATE 
) 
AS 

    CURSOR C_get_sales 
    IS 
    SELECT 
    s.sale_date 
    ,s.sale_num 
    FROM 
    sales  s 
    WHERE s.sale_date BETWEEN P_from_date AND P_to_date 
    ; 

BEGIN 

    FOR R_this_sale IN C_get_sales LOOP 

    DBMS_OUTPUT.PUT_LINE 
    ('Date= ' || R_this_sale.sale_date || ', Sale number: ' || R_this_sale.sale_num) 
    ; 
    END LOOP; 

END; 
+0

어떻게 프로 시저를 호출합니까? 나는 SALE_DATES ('& from_Date', '& to_date')를 시작하려고 노력했다. 끝; 하지만 DBMS 출력 편집에는 아무 것도 없습니다. 죄송합니다. serveroutput을 설정하지 않았습니다. – Fingolfin

1
SQL> set serveroutput on; -- for dbms_output.put_line to take effect 

    SQL> CREATE OR REPLACE PROCEDURE SALE_DATES(v_sale_date_from 
    sales.sale_date%type, v_sale_date_to sales.sale_date%type) 
    AS 
    Cursor c4 IS 
    select SALE_DATE, SALE_NUM 
     from SALES 
     where sale_date between v_sale_date_from AND v_sale_date_to ; 
    BEGIN 
    FOR item IN c4 

     LOOP 
     DBMS_OUTPUT.PUT_LINE ('Date= ' || item.sale_date || ', Sale number: ' || item.sale_num); 
     END LOOP; 
    END;/ 


    SQL> exec SALE_DATES(to_date('&dt1','dd.mm.yyyy'),to_date('&dt2','dd.mm.yyyy'));/ 
    -- assuming your nls_date_format is dd.mm.yyyy, when prompted enter 19.12.2017 as an example. 
관련 문제