sql 转 oracle 后 生成的存储过程 出现错误

qwretee 2012-08-07 02:47:33
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) ;
大神 求解啊 !!!!
...全文
102 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
junjian8811 2012-08-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zhangandli 的回复:]

to_date(v_stime,'yyyy-mm-dd')
看下你的v_stime格式,格式应该也要符合的,oracle无cast
[/Quote]用这个简单明了的。。。
ORAClE SE 2012-08-07
  • 打赏
  • 举报
回复
sql server 与oracle 语法是有区别的。楼主直接用sql语法在oracle数据库执行当然不行啊。
人生无悔 2012-08-07
  • 打赏
  • 举报
回复
例:

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 程序.
人生无悔 2012-08-07
  • 打赏
  • 举报
回复
to_date(v_stime,'yyyy-mm-dd')
看下你的v_stime格式,格式应该也要符合的,oracle无cast

3,499

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧