【问题标题】:Creating Easy Way to update variables in large code创建简单的方法来更新大型代码中的变量
【发布时间】:2014-04-18 17:34:39
【问题描述】:

我正在使用 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 中执行此操作开发者。

【问题讨论】:

  • 我不了解 sqldeveloper,但在 sqlplus 中,您可以使用“define”实现所需的功能。然后,您可以通过在“where &begindate...”中为定义的值添加前缀来引用它们,例如“where &begindate...”

标签: oracle oracle-sqldeveloper


【解决方案1】:

这是一个带有预定义变量的示例:

set feedback off
var abc varchar2

begin
:abc := 'abc';
end;
/

select :abc as a from dual;

输出:

A                              
--------------------------------
abc   

【讨论】:

  • +1 但值得注意的是,这仅在 SQL Developer 中与“运行脚本 (F5)”一起使用时才有效。
  • 您可以将脚本放在一个文件中并使用@"\yourpPath\yourscript.sql" 执行
【解决方案2】:

通用表表达式允许在查询顶部定义变量。出于性能和风格的原因,这通常不是一个好方法 使用公用表表达式。优点是此查询可以在任何 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;

【讨论】:

  • 感谢您的回复。我会试试这些。这个项目被搁置了几个星期,所以我还没有回来。如果我让它工作,我会在上面发布。
猜你喜欢
  • 2011-02-02
  • 2016-02-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多