先明白一些知识点
1. oracle 有函数 和存储过程区分
2. 存储过程和函数的参数 有 in,out,inout型,有游标类型
3. 函数有返回值
最近在搞数据库的调sql语句方法,简直了,心累
1. oracle 的函数和存储过程的调法不一样
存储过程:
可以直接 call ProcName()
函数的调法
declare nRet number;
begin nRet := ProcName(Name1,Name2,Name3);
dbms_output.put_line(nRet);
end;
2.如何获取oracle函数的返回值 这个就是我们今天的一个重点了
(1)用select procName() 取值,可以取函数值,但是不试用有参数的方法
(2)在上面调法最后添加 select nRet from ... 这样取不到这个值,由于oracle机制,不能直接查询
(3) 把值放到游标里 ---我这边验证了取不了
(4)用自定义异常抛出nRet ---是不是特别傻, 但是能取出来
(5)把nRet 存进 temp表,然后查询 -----验证可以,但是涉及额外的查询临时表,删除
(6)单独写了一个函数,把nRet 传进去,Out参数出来 --- 目前在使用的方法
CREATE OR REPLACE FUNCTION pfn_ConvertToOutPut(i_sIn varchar2, i_sOut out varchar2 )
RETURN NUMBER
AS
BEGIN
i_sOut := i_sIn;
return 0;
END;