oracle的函数返回一个表怎么写?
来源:互联网 发布:淘宝卖家注册子账号 编辑:程序博客网 时间:2024/06/11 18:47
我有一个很长的sql做查询,我想直接写一个函数或者存储过程,但是网上的例子都不行,大家有没有好的方法,函数要带参数的
Answer:
2014-10-12 20:04 提问者采纳热心网友123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110Oracle 需要通过 返回一个游标来处理。
-- 测试表数据。
select
*
from
test_main;
ID VALUE
---------- --------------------
1 ONE
3 THREE
2 TWO
-- 返回结果集的函数.
CREATE
OR
REPLACE
FUNCTION
Get_Test_Main_All
RETURN
SYS_REFCURSOR
IS
return_cursor SYS_REFCURSOR;
BEGIN
OPEN
return_cursor
FOR
'SELECT * FROM test_main'
;
RETURN
return_cursor;
END
;
/
-- 普通的查询,来查看结果.
SELECT
Get_Test_Main_All()
FROM
dual;
GET_TEST_MAIN_ALL()
--------------------
CURSOR
STATEMENT : 1
CURSOR
STATEMENT : 1
ID VALUE
---------- --------------------
1 ONE
3 THREE
2 TWO
-- 存储过程调用, 来获取结果.
DECLARE
-- 调用函数的返回值.
testCursor SYS_REFCURSOR;
-- 存储单行数据.
testRec test_main%ROWTYPE;
BEGIN
-- 调用返回结果集的函数.
testCursor := Get_Test_Main_All();
-- 循环,遍历结果.
LOOP
-- 游标向前.
FETCH
testCursor
INTO
testRec;
-- 无数据的情况下,退出循环.
EXIT
WHEN
testCursor%NOTFOUND;
-- 输出调试信息.
dbms_output.put_line( TO_CHAR(testRec.id) ||
' '
|| testRec.value);
END
LOOP;
END
;
/
1 ONE
3 THREE
2 TWO
PL/SQL 过程已成功完成。
--------------------------------------------------------------------------------
上面的是使用动态SQL处理的。
下面是正常SQL处理的。
CREATE
OR
REPLACE
FUNCTION
Get_Test_Main
RETURN
SYS_REFCURSOR
IS
return_cursor SYS_REFCURSOR;
BEGIN
OPEN
return_cursor
FOR
SELECT
*
FROM
test_main;
RETURN
return_cursor;
END
;
/
SQL>
SELECT
Get_Test_Main()
FROM
dual;
GET_TEST_MAIN()
--------------------
CURSOR
STATEMENT : 1
CURSOR
STATEMENT : 1
ID VALUE
---------- --------------------
2 TWO
--------------------------------------------------------------------------------
上面的是没有参数的
下面是有参数的
CREATE
OR
REPLACE
FUNCTION
Get_Test_Main (
p_id
INT
)
RETURN
SYS_REFCURSOR
IS
return_cursor SYS_REFCURSOR;
BEGIN
OPEN
return_cursor
FOR
SELECT
*
FROM
test_main
WHERE
id = p_id;
RETURN
return_cursor;
END
;
/
SQL>
SELECT
Get_Test_Main(2)
FROM
dual;
GET_TEST_MAIN(2)
--------------------
CURSOR
STATEMENT : 1
CURSOR
STATEMENT : 1
ID VALUE
---------- --------------------
2 TWO
返回游标的函数,不是 “表值函数”
SQL>
SELECT
*
FROM
Get_Test_Main(2);
SELECT
*
FROM
Get_Test_Main(2)
*
ERROR 位于第 1 行:
ORA-00933: SQL 命令未正确结束
0 0
- oracle的函数返回一个表怎么写?
- oracle 用函数查询怎么直接返回一个表
- 一个oracle函数返回数组的例子
- oracle 自定义函数 返回一个表类型
- oracle 自定义函数 返回一个表类型
- 怎么用php写一个日志功能的函数
- 写一个函数,判断不同模式处理器的返回值
- 写一个函数能够返回模块的帮助文档
- 写一个函数返回参数值为1的个数
- 写一个函数返回参数值为1的个数
- 写一个函数返回参数值为1的个数
- 写一个函数返回参数值为1的个数
- 写一个函数返回参数二进制中 1 的个数
- 写一个函数,返回二进制中1的个数
- 写一个函数返回参数二进制中 1 的个数
- 写一个函数返回参数二进制中 1 的个数
- 写一个函数返回参数二进制中1的个数
- 写一个函数返回参数二进制中1的个数
- 对象是什么时候被release的?
- Webbrowser控件史上最强技巧全集
- 【知乎】出身富贵人家到底有什么地方值得人向往?
- action 植栈
- Android手机上监听短信的两种方式
- oracle的函数返回一个表怎么写?
- Android短信的发送和广播接收者实现短信的监听
- 【web】--你不曾领略的CSS
- 阿甘学java视频--lesson7
- 栈在O(1)时间内求min值
- Android监听器
- dw1000 sniffer mode
- 微信平台红包接口调用教程
- jquery validate 基础(二)之validate