1、新建一个存储过程(Procedure)。
2、修改存储过程,这个存储过程有一个输入参数(pid)跟一个输出参数(name),即通过用户id查询用户名称并将名称返回。
3、调试存储过程,找到刚刚创建的存储过程右击并点击test选项。
4、在打开的窗口内修改id值并点击左上角的倒三角形图标开始调试。
5、按CTRL+N进行单步进入调试,CTRL+O单步调试,CTRL+T退出调试,也可以点击调试工具进行调试。
6、变量查看,在窗口下方可输入变量名称观察变量的变化情况。
7、调试完成后就可以检查调试结果。
该包用于 动态获取包中存储过程或者函数的参数。
create or replace package SF_GET_ARGUMENTS_PKG is
-- Author : SANFU
-- Created : 2020/7/22 14:40:49
-- Purpose : 动态获取包中存储过程或者函数的参数
PROCEDURE get_arguments(p_pkg_name in VARCHAR2, p_obj_name in VARCHAR2);
PROCEDURE pf_get_arguments(p_pkg_name in VARCHAR2,
p_obj_name in VARCHAR2);
end SF_GET_ARGUMENTS_PKG;
/
create or replace package body SF_GET_ARGUMENTS_PKG is
/============================================
Author : CZH
Created : 2020-07-22 15:00:12
ALERTER :
ALERTER_TIME :
Purpose :
Arg_number : 2
P_PKG_NAME :包名
P_OBJ_NAME :存储过程名或函数名
============================================/
PROCEDURE get_arguments(p_pkg_name in VARCHAR2, p_obj_name in VARCHAR2) IS
v_pkg_name varchar2(100) := upper(p_pkg_name);
v_obj_name varchar2(100) := upper(p_obj_name);
v_arg_number NUMBER;
cursor data_cur is
select tPACKAGE_NAME,
tOBJECT_NAME,
tARGUMENT_NAME,
tIN_OUT,
count(tARGUMENT_NAME) over(PARTITION BY tOBJECT_NAME) arg_number,
row_number() over(partition by tOBJECT_NAME order by tPOSITION asc) rank_position
from sysuser_arguments t
where tPACKAGE_NAME = v_pkg_name
and tOBJECT_NAME = v_obj_name
and tPOSITION <> 0;
begin
select count(1)
into v_arg_number
from sysuser_arguments t
where tPACKAGE_NAME = v_pkg_name
and tOBJECT_NAME = v_obj_name
and tPOSITION <> 0;
dbms_outputput_line('/============================================');
dbms_outputput_line(' Author : SANFU');
dbms_outputput_line(' Created : ' ||
TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS'));
dbms_outputput_line(' ALERTER : ');
dbms_outputput_line(' ALERTER_TIME : ');
dbms_outputput_line(' Purpose : ');
dbms_outputput_line(' Obj_Name : ' || v_obj_name);
dbms_outputput_line(' Arg_Number : ' || v_arg_number);
for rec in data_cur loop
dbms_outputput_line(' ' || recARGUMENT_NAME || ' :');
end loop;
dbms_outputput_line(' ============================================/');
end get_arguments;
--获取参数
PROCEDURE pf_get_arguments(p_pkg_name in VARCHAR2,
p_obj_name in VARCHAR2) IS
v_pkg_name varchar2(100) := upper(p_pkg_name);
v_obj_name varchar2(100) := upper(p_obj_name);
v_attr varchar2(100);
cursor data_cur is
select tPACKAGE_NAME,
tOBJECT_NAME,
tARGUMENT_NAME,
tIN_OUT,
count(tARGUMENT_NAME) over(PARTITION BY tOBJECT_NAME) arg_number,
row_number() over(partition by tOBJECT_NAME order by tPOSITION asc) rank_position
from sysuser_arguments t
where tPACKAGE_NAME = v_pkg_name
and tOBJECT_NAME = v_obj_name
and tPOSITION <> 0;
begin
dbms_outputput_line(v_pkg_name || '' || v_obj_name || '(');
for rec in data_cur loop
if recin_out = 'IN' then
v_attr := '';
elsif recin_out = 'OUT' then
v_attr := '';
elsif recin_out = 'IN/OUT' then
v_attr := '';
end if;
if data_cur%ROWCOUNT = recarg_number then
dbms_outputput_line(lower(recARGUMENT_NAME) || ' =>' ||
' ' || v_attr || lower(recARGUMENT_NAME));
else
dbms_outputput_line(lower(recARGUMENT_NAME) || ' =>' ||
' ' || v_attr || lower(recARGUMENT_NAME) || ',');
end if;
end loop;
dbms_outputput_line(');');
end pf_get_arguments;
end SF_GET_ARGUMENTS_PKG;
/
你好:首先来说,function的作用通常是对某一类通用的东西进行的处理,之后返回处理结果,这样的话,一般就用到了return,procedure中因为涉及到多参数的输入输出,那么就可以用out来实现,return的作用可能是结束这个procedure;所以他们要具体情况具体分析,out是有他的独特好处的,和in相对应的
pro5_out本来就是一个存储过程,所以你直接调用就可以了,另外你下面调用的时候写的是一个pl/sql块,所以需要参照pl/sql块的写法,不然的话就会出现value3没有声明的情况,可以参照上面的declare那一段就可以了。
用ExecuteReader方法去执行这个存储过程,会返回一个DataReader对象,这里面就包含了Cursor类型的输出参数值,其实就是查询结果集。就按普通的select处理就好了。
以上就是关于oracle中怎么执行带有输出参数的存储过程,在程序中我知道怎么调用,全部的内容,包括:oracle中怎么执行带有输出参数的存储过程,在程序中我知道怎么调用,、ORACLE 获取包中存储过程或函数的参数、oracle函数中可以有return为什么还要out参数等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)