Oracle SQL。程序中的数据范围

问题描述 投票:0回答:2

我有SELECT导出两个日期之间的销售信息(日期,数字)。

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;

我应该在括号中使用什么参数?

sql oracle plsql
2个回答
2
投票

两个参数,所以你可以传递你的日期范围...我已经使用了更多的标准命名约定,并使它更清晰。

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;

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.
© www.soinside.com 2019 - 2024. All rights reserved.