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) ;
大神 求解啊 !!!!

解决方案 »

  1.   

    to_date(v_stime,'yyyy-mm-dd')
    看下你的v_stime格式,格式应该也要符合的,oracle无cast
      

  2.   

    例:SQL> set serveroutput on;
    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 程序.
      

  3.   

    sql server 与oracle 语法是有区别的。楼主直接用sql语法在oracle数据库执行当然不行啊。