oracle如何执行存储过程以及如何返回一个table
之前从来没有用oracle,想问下如何执行oracle的存储过程,之前按照sqlserver的执行方式发现不对。exec存储过程名参数名这样不对吗?没有用sqlpuls,...
之前从来没有用oracle,想问下如何执行oracle的存储过程,之前按照sqlserver的执行方式发现不对。
exec 存储过程名 参数名
这样不对吗?
没有用sqlpuls,使用的青蛙Toad,里面那样执行不对。。
再问下oracle的sp不能返回一个table似的查询结果吗?
只能是一个结果一个结果的返回吗?
只知道好像可以使用游标来是SP返回一个table?
这个要怎样去写? 展开
exec 存储过程名 参数名
这样不对吗?
没有用sqlpuls,使用的青蛙Toad,里面那样执行不对。。
再问下oracle的sp不能返回一个table似的查询结果吗?
只能是一个结果一个结果的返回吗?
只知道好像可以使用游标来是SP返回一个table?
这个要怎样去写? 展开
3个回答
2013-05-16
展开全部
-- 定义类型
CREATE OR REPLACE TYPE MyTable AS OBJECT(A int, B int, C int);
/
CREATE OR REPLACE TYPE MyTableResult IS TABLE OF MyTable;
/
CREATE OR REPLACE FUNCTION getTestTable return MyTableResult
IS
-- 预期返回结果.
return_Result MyTableResult := MyTableResult();
BEGIN
-- 结果追加一行.
return_Result.EXTEND;
-- 设置结果内容.
return_Result(return_Result.COUNT) := MyTable(A => 1, B=>2, C=>3);
-- 结果追加一行.
return_Result.EXTEND;
-- 设置结果内容.
return_Result(return_Result.COUNT) := MyTable(A => 4, B=>5, C=>6);
-- 结果追加一行.
return_Result.EXTEND;
-- 设置结果内容.
return_Result(return_Result.COUNT) := MyTable(A => 7, B=>8, C=>9);
return return_Result;
END getTestTable;
/
SQL> SELECT
2 A, B, C
3 FROM
4 table( getTestTable() );
A B C
---------- ---------- ----------
1 2 3
4 5 6
7 8 9
SQL>
展开全部
过程的执行如下:
begin
sp;
end;
返回一个table使用自定义函数来处理好一些
begin
sp;
end;
返回一个table使用自定义函数来处理好一些
追问
青蛙里这样执行?不行的
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
执行一个带有输出参数的动态游标的存储过程即可
1.在包头要定义一个全局的动态游标
Type REF游标名 IS Ref Cursor;
2.定义一个输出参数为上述游标类型的存储过程
create or replace sp_test(o_list out REF游标名)
..
begin
--打开游标
open o_list..
end
3.执行上述存储过程
declare
REF_CUR 上述动态游标所属包名.REF游标名;
begin
-- Call the procedure
上述存储过程所属包名.sp_test(REF_CUR);
--游标数据处理..
end;
没有环境,大体上是这个流程
1.在包头要定义一个全局的动态游标
Type REF游标名 IS Ref Cursor;
2.定义一个输出参数为上述游标类型的存储过程
create or replace sp_test(o_list out REF游标名)
..
begin
--打开游标
open o_list..
end
3.执行上述存储过程
declare
REF_CUR 上述动态游标所属包名.REF游标名;
begin
-- Call the procedure
上述存储过程所属包名.sp_test(REF_CUR);
--游标数据处理..
end;
没有环境,大体上是这个流程
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询