oracle中怎么执行带有输出参数的存储过程,在程序中我知道怎么调用,

oracle中怎么执行带有输出参数的存储过程,在程序中我知道怎么调用,,第1张

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参数等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9720217.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存