2017-12-19 6 views
0

私は、2つの日付間の販売情報(日付、番号)をエクスポートする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

は、私はあなたのプロシージャに2つのパラメータを渡す必要があるとしていると思います。それでは、あなたはsale_dateとP_from_dateとP_to_dateとの間にsales_dateを使用するだけです。 –

答えて

2

あなたの日付範囲を渡すことができるように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')を開始しようとしました。 end; DBMS出力の編集には何もありません:申し訳ありませんが、set serveroutput onを忘れました。 – 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.