Проходя месяц к функции pl / sql? - PullRequest
0 голосов
/ 14 ноября 2011

Я хочу написать функцию, которая возвращает товары, доставленные за определенный месяц.

Я пробовал это

 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 функции и получить данные.

Ответы [ 2 ]

1 голос
/ 14 ноября 2011

Передайте дату ('01-май-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 голосов
/ 16 ноября 2011

Я думаю, что вам нужно только сравнить месяц из столбца purchase_date с месяцем в параметре функции ...

Я бы сделал это следующим образом

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

Если вы хотите включить также год, вы можете использовать 'RRRRMM' в качестве параметра TO_CHAR вместо 'MM'

...