自动将参数传递给 oracle plsql 函数

Posted

技术标签:

【中文标题】自动将参数传递给 oracle plsql 函数【英文标题】:Pass parameters automatically to oracle plsql function 【发布时间】:2012-01-31 05:38:05 【问题描述】:

我为库存和销售比较写了两个plsql functions。一个为find_prodcuts_sold,另一个为find_usage_from_stock

我可以通过从find_usage_from_stock 函数减少find_prodcuts_sold 函数来获得库存和销售之间的差异。为此,我应该将From dateTo date 传递给这两个函数。 (From dateTo date 取自 stock 表中的 stock_date 列)。然后我的函数返回给定日期范围的值。

现在我想创建一个line chart 使用我的函数来获得股票和 slaes 之间的差异。图表应自动构建。没有用户通过 From dateTo date

来自stock table 的示例stock_date 列。

stock_date

30-JAN-12
26-JAN-12
24-JAN-12
23-JAN-12
18-JAN-12
15-JAN-12
13-JAN-12
12-JAN-12
11-JAN-12
08-JAN-12
06-JAN-12

我想自动将以下日期传递给我的函数。

From        To
26-JAN-12   30-JAN-12
24-JAN-12   26-JAN-12
23-JAN-12   24-JAN-12
18-JAN-12   23-JAN-12
15-JAN-12   18-JAN-12
13-JAN-12   15-JAN-12
12-JAN-12   13-JAN-12
11-JAN-12   12-JAN-12
08-JAN-12   11-JAN-12
06-JAN-12   08-JAN-12

我该怎么做?

【问题讨论】:

【参考方案1】:

您可以使用LAG 或LEAD 解析函数:

select stock_date, lead(stock_date, 1, null) over (order by stock_date) next_date
from stock_table

然后使用查询结果作为您的输入,即:

SELECT find_usage_from_stock(t.product_id, t.start_date, t.end_date) as usage_from_stock, 
       find_prodcuts_sold(t.product_id, t.start_date, t.end_date) as prodcuts_sold, 
       t.product_id, t.start_date
FROM (select stock_date as start_date, 
             lead(stock_date, 1, null) over (order by stock_date) as end_date, 
             product_id
      from stock_table) t

注意:我在前导函数中使用 null 作为空值,也许您需要输入其他内容

【讨论】:

A.B.Cade,你的答案是正确的。但我不知道如何将您的答案返回的日期作为参数传递给我的函数。我怎样才能做到这一点 ?有以下两个功能。 find_usage_from_stock(p_id,from_date,to_date);find_prodcuts_sold(p_id,from_date,to_date); 你是如何运行这些函数的?使用脚本(plsql)?创建数据库视图? basiccaly 您可以在 select 语句中使用它们,即 select find_usage_from_stock(p_id,t.stock_date,t.next_date) from (select stock_date, lead(stock_date, 1, null) over (order by stock_date) next_date from stock_table) t A.B.Cade,我使用我的函数在 oracle apex 中创建图表。 @Bishan,我对 oracle apex 不熟悉,但是从我在一些教程中看到的,您可以从 sql 查询构建图表。如果我是对的,那么我上一条评论中的示例可以作为一个开始(我不知道在 p_id 中放什么) A.B.Cade,感谢您的上一个示例。我的问题还没有解决。但你的上一个例子让我开始了我的工作。对不起 p_id :) 它是 product_id

以上是关于自动将参数传递给 oracle plsql 函数的主要内容,如果未能解决你的问题,请参考以下文章

将函数参数传递给oracle中的游标

将数组作为参数传递给 plsql 过程

如何将 :new 作为参数传递给 oracle 客户函数?

将值从 Oracle 对象类型参数传递到 PLSQL 表类型参数

[react] 在React中怎么将参数传递给事件?

将参数传递给查询访问 VBA