2011-11-14 33 views
0

我想编写一个函数,返回给定月份中带来的产品。将月份传递给pl/sql函数?

我想这

create or replace 
function myfun(mymonth date) 
    return date 
is 
    cursor cur 
    is 
     select * 
     from products 
     where purchase_date=mymonth; 
begin 
    for i in cur 
    loop 
     dbms_output.put_line(i.product_id || ', ' || 
          i.description || ', ' || 
          i.product_name || ', ' || 
          i.quantity || ', ' || 
          i.price || ', ' || 
          i.purchase_date); 
    end loop; 
    return 1; 
end; 

这给我的错误。 我如何将月份传递给pl/sql函数并检索数据。

+0

请给我们提供错误信息 –

+0

什么是yout表结构?你在传什么?你的函数说它返回一个DATE,但你试图返回1这是一个数字。您在这里发布的内容存在很多问题,您需要提供更多信息才能解决问题。 – Ollie

回答

1

传递一个日期('01 -MAY-2003' ),并使用最新的功能,使其工作:

create or replace 
function myfun(mymonth date) 
    return date 
is 
    cursor cur 
    is 
     select * 
     from products 
     where purchase_date >= TRUNC(mymonth, 'MM') 
      and purchase_date < ADD_MONTHS(TRUNC(mymonth,'MM') , 1); 

输入一个月使用TRUNC(x, 'MM')意味着你可以在任何日期在德通查询将从该月的第一天开始运行。

或者,您可以使用返回输入月份最后一天的开始的LAST_DAY()函数。由于Oracle DATE数据类型可以同时包含日期和时间,因此您必须留意时间值。

+0

给我错误。 '8/30 PL/SQL:ORA-00936:缺少表达式 6/8 PL/SQL:SQL语句被忽略 10/1 PLS-00103:遇到以下符号之一时出现符号“END”:' –

+2

Typo in示例代码。应删除最后一行中的“=”符号。 –

+0

希望你不介意编辑APC :) –

0

我认为你需要的是只有一个月,从对功能的帕拉姆月份PURCHASE_DATE列比较...

我会做这样

cursor cur 
is 
    select * 
    from products 
    where TO_CHAR(purchase_date,'MM') >= TO_CHAR(mymonth, 'MM') 

如果你也想包括这一年,你可以使用'RRRRMM'作为TO_CHAR的参数,而不是'MM'