CREATE OR REPLACE FUNCTION fn_gdj_overdue
(
v_stime IN VARCHAR2,
v_dyear IN NUMBER
)
RETURN NUMBER
AS
v_delta DATE;
v_year NUMBER(10,0);
v_ret NUMBER(1,0);BEGIN
v_delta := SYSDATE - CAST(v_stime AS DATE) ;
v_year := sqlserver_utilities.datediff('YEAR', '1900-01-01 00:00:00', v_delta) ;
IF v_year > v_dyear THEN
v_ret := 1 ;
ELSE
IF v_year < v_dyear THEN
v_ret := 0 ;
ELSE
IF ( sqlserver_utilities.datepart('MM', v_delta) > 1
OR sqlserver_utilities.datepart('DD', v_delta) > 1
OR ( sqlserver_utilities.datepart('HH', v_delta) >= 10 ) ) THEN
v_ret := 1 ;
ELSE
v_ret := 0 ;
END IF;
END IF;
END IF;
RETURN v_ret;
END;
提示 错误:FUNCTION DBO_HGGPS_PLAT_XUCHEN.FN_GDJ_OVERDUE 编译错误错误:PLS-00382: 表达式类型错误
行:13
文本:v_delta := SYSDATE - CAST(v_stime AS DATE) ;错误:PL/SQL: Statement ignored
行:13
文本:v_delta := SYSDATE - CAST(v_stime AS DATE) ;
大神 求解啊 !!!!
(
v_stime IN VARCHAR2,
v_dyear IN NUMBER
)
RETURN NUMBER
AS
v_delta DATE;
v_year NUMBER(10,0);
v_ret NUMBER(1,0);BEGIN
v_delta := SYSDATE - CAST(v_stime AS DATE) ;
v_year := sqlserver_utilities.datediff('YEAR', '1900-01-01 00:00:00', v_delta) ;
IF v_year > v_dyear THEN
v_ret := 1 ;
ELSE
IF v_year < v_dyear THEN
v_ret := 0 ;
ELSE
IF ( sqlserver_utilities.datepart('MM', v_delta) > 1
OR sqlserver_utilities.datepart('DD', v_delta) > 1
OR ( sqlserver_utilities.datepart('HH', v_delta) >= 10 ) ) THEN
v_ret := 1 ;
ELSE
v_ret := 0 ;
END IF;
END IF;
END IF;
RETURN v_ret;
END;
提示 错误:FUNCTION DBO_HGGPS_PLAT_XUCHEN.FN_GDJ_OVERDUE 编译错误错误:PLS-00382: 表达式类型错误
行:13
文本:v_delta := SYSDATE - CAST(v_stime AS DATE) ;错误:PL/SQL: Statement ignored
行:13
文本:v_delta := SYSDATE - CAST(v_stime AS DATE) ;
大神 求解啊 !!!!
看下你的v_stime格式,格式应该也要符合的,oracle无cast
SQL> declare
2 v_time varchar2(20) :='2012/03/04';
3 begin
4 dbms_output.put_line(to_date(v_time,'yyyy-mm-dd'));
5 end;
6 /
04-3月 -12 已順利完成 PL/SQL 程序.