C# 从Oracle函数返回数据?

C# 从Oracle函数返回数据?,c#,function,oracle11g,C#,Function,Oracle11g,您好,我在Oracle中创建了以下函数。 我必须将date-1和date-2参数传递到函数中,函数应该将另一个日期返回给我 请参阅下面的代码 create or replace function GETD(p_d1 in date, p_d2 in date ) return DATE as l_result DATE; begin SELECT EDIT_Date into

您好,我在Oracle中创建了以下函数。 我必须将date-1和date-2参数传递到函数中,函数应该将另一个日期返回给我

请参阅下面的代码

create or replace function GETD(p_d1   in date, 
                                p_d2   in date ) return DATE 
   as 
       l_result    DATE; 
   begin 
    SELECT EDIT_Date into l_result FROM qa.employees  WHERE qa.employee_join_date BETWEEN TO_DATE(p_d1, 'MM/DD/YYYY') AND TO_DATE(p_d2, 'MM/DD/YYYY') AND ROWNUM <= 1
    ;
       return l_result; 
  end; 
该函数被编译,当我传递参数以执行该函数时,我得到以下错误“不是有效月份”。 谁能告诉我哪里出了问题吗

谢谢
Justin

首先,您不应该对日期变量调用
来指定日期。如果执行此操作,将强制Oracle首先使用会话的
NLS\u date\u格式将日期转换为字符串,然后使用指定的格式掩码将字符串转换回日期。如果您的
NLS\u DATE\u格式
恰好与指定的格式掩码不匹配(并且,由于
NLS\u DATE\u格式
由客户端控制,某些用户和会话将不可避免地使用不同的日期格式),您将得到一个错误

假设您的意图只是忽略任何时间组件,那么您应该改用
trunc
函数

create or replace function GETD(p_d1   in date, 
                                p_d2   in date ) 
  return DATE 
as 
  l_result    DATE; 
begin 
  SELECT EDIT_Date 
    into l_result 
    FROM qa.employees  
   WHERE qa.employee_join_date BETWEEN trunc(p_d1) AND trunc(p_d2) 
     AND ROWNUM <= 1;

  return l_result; 
end; 
或者使用
to_DATE

SELECT GETD(to_date('27-JUN-12', 'DD-MON-RR'), to_date('28-JUN-12', 'DD-MON-RR')) 
  FROM DUAL
然后,无论客户的
NLS\u DATE\u格式如何,您的呼叫都将正常工作

SELECT GETD(date '2012-06-27', date '2012-06-28') 
  FROM DUAL
SELECT GETD(to_date('27-JUN-12', 'DD-MON-RR'), to_date('28-JUN-12', 'DD-MON-RR')) 
  FROM DUAL