Oracle声明和使用日期

时间:2015-06-12 21:02:45

标签: oracle oracle-sqldeveloper

所以我已经使用SQL Server大约7年了,只是改变了工作,很多我们的产品都在Oracle SQL Developer中。第1天,不是享受甲骨文,而是希望最好。

我正在尝试做我认为非常简单和容易的事情,但我找到的所有方法都不起作用。我运行下面的错误。

  

绑定变量“Startdt”未声明匿名块已完成

我尝试过几种不同的方式,包括Enddt是怎样的。 DealerNbr工作得很好。查询本身我从SSRS报告中提取,但我必须声明变量,以便我可以测试/添加列。 SSRS工作正常。

DECLARE 
  DealerNbr NUMBER;
  Startdt DATE;
  Enddt DATE;
BEGIN
  DealerNbr := 18913;
  Startdt   := TO_DATE ('2012-01-01','mm,dd,yyyy');
  Enddt     := '2012-12-31';
END;

select prq_payee_nbr ,
prq_status_cd 
from payable_requisitions 
where prq_payee_nbr = :DealerNbr
and prq_status_cd <> 'V' 
and prq_dt between :Startdt and :Enddt
order by prq_dt

基本我只是想做最基本的事情。在SQL Server中它将是:

Declare @DealerNbr Int
,@Startdt date
,@EndDt date

Set @DealerNbr = '18913'
Set @Startdt = '2012-01-01'
Set @Enddt = '2012-12-31'

Select * 
from payable_requistion
where prq_payee_nbr = @DealerNbr
and prq_dt between @Startdt and @EndDt

1 个答案:

答案 0 :(得分:2)

VARIABLE cur REFCURSOR;
/

DECLARE
  DealerNbr NUMBER := 18913;
  Startdt   DATE   := DATE '2012-01-01';
  Enddt     DATE   := DATE '2012-12-31';
BEGIN
  OPEN :cur FOR
  select prq_payee_nbr ,
         prq_status_cd 
  from   payable_requisitions 
  where  prq_payee_nbr = DealerNbr
  and    prq_status_cd <> 'V' 
  and    prq_dt between Startdt and Enddt
  order by prq_dtl;
END;
/

PRINT cur;

或者

VARIABLE Startdt VARCHAR2;
VARIABLE Enddt VARCHAR2;
VARIABLE DealerNbr NUMBER;

BEGIN
  :DealerNbr := 18913;
  :Startdt   := '2012-01-01';
  :Enddt     := '2012-12-31';
END;
/

select prq_payee_nbr ,
       prq_status_cd 
from   payable_requisitions 
where  prq_payee_nbr = :DealerNbr
and    prq_status_cd <> 'V' 
and    prq_dt between TO_DATE( :Startdt, 'YYYY-MM-DD' )
              and     TO_DATE( :Enddt,   'YYYY-MM-DD' )
order by prq_dtl;