我正在使用Oracle SQL Developer并且构建了一个相当大的查询。该查询将按月或按季度运行。我想知道是否有一种方法可以在顶部执行声明语句,然后在代码中引用这些创建的变量。这样,当有人想要运行查询时,他们只需更改代码顶部的日期,而不得不深入研究所有日期。我是Oracle SQL Developer的新手,但我知道在我构建的其他sql代码中,我可以简单地声明变量然后设置它,然后在代码中调用变量名。下面是我知道如何操作的示例,但我在Oracle SQL Developer中遇到了麻烦。
示例:我有一个数据库,其中包含商业,业务类型(小,中,大)存款数量,存款金额和存款日期。我想建立一个查询,输出存款数量和存款金额的季度摘要,并能够改变业务的季度和大小。
示例代码来自我以前的SQL,因为这是我尝试做的一个例子,因为我无法用表名等公开我的代码。
Declare @busstype,@qbegindate,@qenddate
Set @busstype = 'small'
Set @qbegindate = '01-JAN-2013'
Set @qenddate = '01-MAR-2013'
Select business,numberofdeposits,depositamount
From business_transactions
Where ('@qbegindate'<=depositdate<='@qenddate'
And businesstype = '@busstype')
Group By Business
结果将列出企业名称,然后列出总存款和总金额。 我知道这段代码不对,但它只是我想在Oracle SQL Developer中做的一个例子。我建立的查询工作正常我只是觉得挖掘代码更改日期和标准很痛苦,并想知道如何做这样的事情,因为我已经发现我无法在ORACLE Sql中执行此操作显影剂。
答案 0 :(得分:1)
以下是预定义变量的示例:
set feedback off
var abc varchar2
begin
:abc := 'abc';
end;
/
select :abc as a from dual;
输出:
A
--------------------------------
abc
答案 1 :(得分:1)
公用表表达式允许在查询顶部定义变量。出于性能和风格的原因,这通常不是一个好方法 使用公用表表达式。优点是此查询可以在任何 IDE中运行,并且它是完全独立的。
--Variables - change these before running.
with busstype as (select 'small' value from dual),
qbegindate as (select date '2013-01-01' value from dual),
qenddate as (select date '2013-03-01' value from dual)
--Query - do not modify code below.
select business,numberofdeposits,depositamount
from business_transactions
where depostiddate between
(select value from qbegindate)
and
(select value from qenddate)
and businesstype = (select value from busstype)
group by business, numberofdeposits,depositamount;