关于oracler的create function

之前问了个找出错误数据的问题,高手帮写了一段function
create or replace function is_valid_date(p_yyyymmdd varchar2)return number is i_date date;
begin
if i_date=to_date(p_yyyymmdd,'yyyymmdd') then
return 1;
end if ;
exception when others then
return 0;
end;
这一段是要找出时间格式错误的,然后编译成功
执行语句
select * from zp_ryxx where is_valid_date(substr(pcsj,1,8))=0

提示
ORA-06503: PL/SQL:Function returned without value
ORA-06512: at “ZHXT_DBA.IS_VALID_DATE", line 8
查看错误堆栈的程序源?

怎么解决,或者这个FUNCTION应该怎么写,要求找出pcsj字段时间时间格式错误的方法,pcsj字段是varchar2(14),但是里面存在着有些错误数据
如:(2009 40311111111,)不能用 to_date(pcsj,'yyyymmdd')来转换,导致查询的不方便,高手来帮忙
按一楼的方法我改了,自定义函数是正确了,但是实际运用后确没有结果,我在表里面还特意加了个错误的日期,但是用这个自定义函数确检索不出来,能不能再看看啊

该程序有·逻辑问题,就是只有当 i_date = to_date(p_yyyymmdd,'yyyymmdd') 判断结果是 true以及程序出现异常时有返回值,分别是 1 和 0, 但 i_date = to_date(p_yyyymmdd,'yyyymmdd') 结果是 false 时没有返回值, 应该改为:

......
begin
if i_date=to_date(p_yyyymmdd,'yyyymmdd') then
return 1;
else
return 0;
end if ;
......
温馨提示:内容为网友见解,仅供参考
无其他回答

关于oracler的create function
该程序有·逻辑问题,就是只有当 i_date = to_date(p_yyyymmdd,'yyyymmdd') 判断结果是 true以及程序出现异常时有返回值,分别是 1 和 0, 但 i_date = to_date(p_yyyymmdd,'yyyymmdd') 结果是 false 时没有返回值, 应该改为:...begin if i_date=to_date(p_yyyymmdd,'yyyymmdd') t...

oracle中自定义的函数怎么编译
1、打开pl\/sql软件并登录到指定数据库。2、点击左上方像纸片的按钮,然后点击“sql窗口”3、在弹出窗口中编写自定义函数。4、编写完毕后,直接点击左上角像齿轮的按钮(即执行按钮),就可以编译了。

怎么测试,oracle function函数
怎么测试,oracle function函数 比如你定义了一个函数:create FUNCTION y2 (inx2 number)return number is Result number(2);begin Result := inx2*inx2;return(Result);end y2;

Oracle创建函数(根据雇员的薪资,佣金计算出雇员的年薪) year_salary...
create or replace function year_salary(salary int) --输入参数return int --输出参数类型is commission_pct int;--定义输出参数begin commission_pct:=salary*12; --输出参数计算方法 return(commission_pct); --返回值end;执行 select year_salary(100) from dual --比如月薪100结果应该是120...

oracle 中function函数怎么使用?能否帮我详细分析一下,谢谢~
oracle中的Function有两种,一种是系统内置的函数(直接拿来用就行),一种是自定义的(自己写的完成特定功能的)。function可以在DML语句中执行。如select upper('AaBbCcDd') '大写' from dual 其中upper就是系统自带的函数,是把参数中的字符串变成大写字符。自定义函数的语句格式是:create or replace...

oracle存储过程权限有哪些
Oracle 存储过程(Stored Procedure)是一段预定义的程序,可以被存储在数据库中并在需要时被调用执行。与其他程序一样,存储过程需要适当的权限设置,以便只有授权用户才能访问和执行它。下面是 Oracle 存储过程常用的权限:CREATE PROCEDURE 权限:允许用户创建存储过程。ALTER PROCEDURE 权限:允许用户修改已经...

oracle中function和procedure是什么意思
oracle中function是函数,而procedure是存储过程。函数:函数用于返回特定数据。执行时得找一个变量接收函数的返回值。语法如下:create or replace function function_name (argu1 [mode1] datatype1,argu2 [mode2] datatype2, ...)return datatype is begin end;存储过程:存储过程(Stored Procedure...

oracle 直接创建函数 和在包体里创建函数有什么区别
如果直接create 函数,函数不会出现在包里,而是在function目录下面,如果在包里创建,则会出现在包里,他们两者有什么区别。答:直接创建的函数,是数据公共函数。在调用函数的时候直接调用函数名带上参数就可以。而建在包体里的函数是私有函数,在有在包体里才能直接用函数名带参数调用。外部程序要调用 ...

ORACLE 创建的函数 可以返回两个值吗,该怎么做?
以前我也想过。不过后来貌似没有成功。Oracle 里 用procedure可以添加输出的值,但是Function的话只能return一个值。。楼上所说的返回记录集。。但是你还要处理返回的记录集,将其拆开成想要的值。这个。还不如。你吧想要的2个返回值。都拼接在一个varchar2()字符集中 。然后return 这个varchar2(). ...

用oracle的SQL语句计算工人的工龄并用substr查询
create function [dbo].[fn_GetWorkYear](beginday datetime, --开始日期 endday datetime --结束日期 )returns int as begin if @beginday > @endday begin return 0;end declare @workyear int select @workyear = datediff(year, @beginday, @endday)-1--年份差值 if datepart(month...

相似回答