如果不确定oracle函数的返回值类型,该怎么写这个function。

mysql支持ifnull(),我想让oracle也支持,就写了一个函数:
CREATE OR REPLACE FUNCTION ifnull (col IN VARCHAR2, val IN INTEGER)
RETURN INTEGER IS
begin
return nvl(col,val);
end;
这样的话,只能在col为null的时候返回整型val,而当col不为空的时候,返回值就不是integer了,就会报错。像这种不确定返回值类型的函数,该怎么写,求教~~

oracle 有的decode函数
decode(当前字段a, 如果a是这个值,那么是这个,否则是这个);

例如:
decode(col, null, val, -1);--如果是null,返回val,否则返回-1;

另外,为了让这个函数适合用到sql中, 建议你把integer换成number。追问

你好,我现在的视图是从mysql迁到oracle里的,里边用到了好多ifnull()函数。oracle里可以用nvl()这个函数来实现相同的功能。如果col是null则返回val,val是整型,如果不是null就返回col的名字。我在sql里这么用:select ifnull(字段名,0) from xt_user。如果“字段名”是null,则返回0,如果不是null就返回这个字段的值。

追答

刚试了一下, 貌似真的不行,nvl是系统内置函数,
这样,你只能替换了··

追问

CREATE OR REPLACE FUNCTION ifnull (col IN VARCHAR2, val IN VARCHAR2)
RETURN varchar2 IS
begin
if col='' or col is null then return val;else return col;end if;
end;
我这么写的,貌似行了,但是不理解我的val是varchar2类型,竟然还能接收整型参数:select ifnull(datatype,2)+1 from eq_bxsq;当datatype是null的时候,能算出结果是3。

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-12-19
ORACLE 是NUMBER,不是INTEGER。追问

你好,我现在的视图是从mysql迁到oracle里的,里边用到了好多ifnull()函数。oracle里可以用nvl()这个函数来实现相同的功能。如果col是null则返回val,val是整型,如果不是null就返回col的名字。我在sql里这么用:select ifnull(字段名,0) from xt_user。如果“字段名”是null,则返回0,如果不是null就返回这个字段的值。

追答

ORACLE 没有ifnull 只有DECODE ,NVL
所以这样是不可以的。
只有写函数了(FUNCTION)判断,不然无法实现迁移
if 字段名='' or 字段名is null then
return null;
else
return '0';
end if;
最好用VARCHAR
不然可能有转换错误
如果MYSQL有NUMBER的话可以用NUMBER

本回答被提问者采纳

如果不确定oracle函数的返回值类型,该怎么写这个function。
decode(当前字段a, 如果a是这个值,那么是这个,否则是这个);例如:decode(col, null, val, -1);--如果是null,返回val,否则返回-1;另外,为了让这个函数适合用到sql中, 建议你把integer换成number。

帮看一下oracle的这个function怎么写?
你好像发重复了.CREATE OR REPLACE FUNCTION fun_get_met_cas_diagnose(inpatient VARCHAR2)RETURN t_table IS rs t_table := t_table();BEGIN rs.extend(1);SELECT obj_table(t.icd_code, t.row_num, t.diag_name)INTO rs(1)FROM (SELECT d.icd_code, d.diag_name, rownum row_num ...

帮看一下oracle的这个function怎么写?
CREATE OR REPLACE FUNCTION fun_get_met_cas_diagnose(inpatient VARCHAR2)RETURN t_table IS rs t_table := t_table();BEGIN rs.extend(1);SELECT obj_table(t.icd_code, t.row_num, t.diag_name)INTO rs(1)FROM (SELECT d.icd_code, d.diag_name, rownum row_num FROM met_cas_di...

oracle 中function函数怎么使用?能否帮我详细分析一下,谢谢~
自定义函数的语句格式是:create or replace function 函数名 return 返回值类型 is [声明部分]begin 主体语句; return 结果; [exception 异常处理部分;] end;调用:select 函数名 from dual;或者像执行procedure一样调用也可以 begin 函数名; end;

oracle的函数返回一个表怎么写
Oracle 需要通过 返回一个游标来处理。-- 测试表数据。select * from test_main; ID VALUE--- --- 1 ONE 3 THREE 2 TWO -- 返回结果集的函数.CREATE OR REPLACE FUNCTION Get_Test_Main_AllRETURN SYS_REFCURSORIS return_cursor SYS_REFCURSOR;BEGIN OPEN return_cursor FOR ...

求oracle中的function的所有语法定义,以及注意事项!
自定义函数语法:CREATE OR REPLACE FUNCTION 函数名 RETURN 返回值类型 IS 声明部分;BEGIN 函数体;RETURN 变量;END;函数与存储过程的区别:(1)语法上除了创建对象的关键字不同之外,函数还多了一个RETURN关键字,它确定了该函数返回值的数据类型.(2)存储过程可以没有返回值,但函数必须有返回值,即使发生...

如何oracle function 返回结果集
select xx from dual好像本身只能返回一行数据,无法返回多行数据 以下是我做一个返回游标的函数。create or replace package types as type mytype is ref cursor;end;create or replace function oraclefunc(col_in varchar)return types.mytype is mycursor types.mytype;restr varchar2(4096);beg...

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

oracle 函数 return问题
return vachar2 是指返回参数的类型是vachar2格式的字符 vachar2 是oracle中规定的一种数据类型,和vachar类似,但是vachar2 是长度可以变化的,例如,咱们熟悉的CHAR的长度是固定的,VARCHAR2的长度是可以变化的, 存储字符串“ABC",对于CHAR (10),表示你存储的字符将占10个字节(包括7个空字符),...

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...

相似回答