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;