Function 表中我的日期与服务器中sysdate之间的比较

Function 表中我的日期与服务器中sysdate之间的比较,function,plsql,oracle10g,Function,Plsql,Oracle10g,在比较服务器上的当前日期名称和表内容上的日期名称后,我试图编写函数返回day\u id **我的代码是 create or replace FUNCTION GETSYSDATE return char is v_day char(20) ; v_day_id days.day_id%type ; v_day_name days.day_name%type ; begin select day_id, to_char(sysdate, 'day', 'nls_date_la

在比较服务器上的当前日期名称和表内容上的日期名称后,我试图编写函数返回
day\u id

**我的代码是

 create or replace 
 FUNCTION GETSYSDATE
 return char 
 is
 v_day char(20) ;
 v_day_id days.day_id%type ;
 v_day_name days.day_name%type ;
 begin
 select day_id, to_char(sysdate, 'day', 'nls_date_language=arabic'), day_name
 into v_day_id,v_day,v_day_name
 from days
 where v_day_name = v_day ;
 return v_day_id ;
 end;
但不幸的是,没有找到任何数据

注意!:
day\u name
的数据类型是
varchar(20字节)


您的筛选器正在使用尚未初始化的局部变量;事实上,您正在尝试设置它们,同时使用它们进行过滤,这没有多大意义

where v_day_name = v_day
。。。永远不会匹配表中的任何记录

我想这正是你想要的:

create or replace function getsysdate return days.day_id%type is
  v_day_id days.day_id%type;
begin
  select day_id
  into v_day_id
  from days
  where day_name = to_char(sysdate, 'day', 'nls_date_language=arabic');
  return v_day_id;
end;
/

我不知道您的
days
表是如何填充的,但我猜
day\u id
是1-7,而
day\u name
是相应的日期,在您所在的地区,您不可能通过简单的
TO\u CHAR
轻松获得。因此显示了基于该假设的函数,但可能ID顺序错误。我将其显示为匿名块中的赋值,并使用普通SQL。

根据我对您的问题的理解,您有一个填写了will days name的表格,您希望查询服务器当前日期的等效日期id。
因此,脚本中存在多个错误,如:
由于希望
GETSYSDATE
返回
DAY\u ID
,您需要将return语句声明为Number或
DAYS.DAY\u ID%TYPE

您的
select
where
语法中存在错误条件。 ... 愿此功能对您有所帮助

CREATE Function GETSYSDATE RETURN number
 is
 v_day_id days.DAY_ID%TYPE;
 begin
   select day_id
   into v_day_id
   from days
   where DAY_NAME = to_char(sysdate, 'day', 'nls_date_language=arabic') ;
   return v_day_id ;
   exception when no_data_found then
  return -1;
 end;

CREATE Function GETSYSDATE RETURN number
 is
 v_day_id days.DAY_ID%TYPE;
 begin
   select day_id
   into v_day_id
   from days
   where DAY_NAME = to_char(sysdate, 'day', 'nls_date_language=arabic') ;
   return v_day_id ;
   exception when no_data_found then
  return -1;
 end;