oracle 存储过程 传参数,如果是希望传参值也被利用起来,存储过程里面虽有IN,但OUT必不可少。

原创 2015年09月12日 19:43:30
oracle 存储过程 传参数,如果是希望传参值也被利用起来,存储过程里面虽有IN,但OUT必不可少。
oracle 存储过程 传参数,如果是希望传参值也利用起来,如果在 存储过程里面该参数只写 IN,而不写OUT,那只会返回部分数据。而加上OUT,最终写成IN OUT,则完全无问题,请大家看注释部分。
            int point = 0; string MYSTATUS = ""; int kkk = 0;
            //存储过程的参数声明
            OracleParameter[] parameters ={
                                 new OracleParameter("MYMEMBER_CODE",OracleType.VarChar,50),
                                new OracleParameter("point",OracleType.VarChar,30),
                                 new OracleParameter("MYSTATUS",OracleType.VarChar,20)
                                                };
            parameters[0].Value = strvip; parameters[1].Value = point; parameters[2].Value = MYSTATUS;
            parameters[0].Direction = ParameterDirection.InputOutput; parameters[1].Direction = ParameterDirection.Output; parameters[2].Direction = ParameterDirection.Output;
            try
            {
                OracleAccess.logger.Debug(" p_GetVipBalanceStoredProcedure 执行前 " + DateTime.Now.ToLongDateString() + DateTime.Now.ToLongTimeString() + strvip );

                if (exist_vipProcedure(strvip))
                {
                    YHJ_StoredProcedure.RunProcedure("p_GetVipBalanceStoredProcedure", parameters);

                    OracleAccess.logger.Debug(" p_GetVipBalanceStoredProcedure 执行后 " + DateTime.Now.ToLongDateString() + DateTime.Now.ToLongTimeString() + strvip);

                    kkk = Convert.ToInt32(parameters[2].Value);
                    if (kkk >= 1)
                    {
                        vipinf myvipinf = new vipinf();
                        myvipinf.str_point = parameters[1].Value.ToString();//myvipinf.str_grade=parameters[2].Value.ToString();myvipinf.str_coupon_int=parameters[3].Value.ToString();
                        myvipinf.str_membercode = parameters[0].Value.ToString();//第一个参数不加OUT 只返回前5个字符,如果加了OUT则返回完整字符。
			 myvipinf.str_discount = "0.9";
                        return myvipinf;
                    }

                }
                

            }
            catch (Exception e)
            {
                OracleAccess.logger.Debug(" p_GetVipBalanceStoredProcedure 执行前 " + DateTime.Now.ToLongDateString() + DateTime.Now.ToLongTimeString() + strvip+e.Message.ToString());
                throw e;
            } 

存储过程:

CREATE OR REPLACE PROCEDURE  p_GetVipBalanceStoredProcedure ( MYMEMBER_CODE IN OUT VARCHAR2 , point OUT VARCHAR2,MYSTATUS OUT VARCHAR2 ) 


IS
    point_old     INT;
    point_updated INT;
    yhjerror      EXCEPTION;
    tempint       INT;
    tempa         INT;
      myresult INT;
BEGIN
    myresult:=0;MYSTATUS:='';

SELECT M.POINTS INTO point_old  FROM  MEMBERSHIP M WHERE TRIM(M.MEMBER_CODE) = MYMEMBER_CODE;

    myresult:=SQL%ROWCOUNT;

	point:=point_old;
    MYSTATUS:=myresult;
    IF ((myresult<>1) OR (myresult=0)) THEN
        BEGIN
            MYSTATUS:=0;
        end;
    END IF ;

END p_GetVipBalanceStoredProcedure;


赵强老师:Oracle数据库从10g到11g(5)过程、函数和触发器

学习并掌握使用PL/SQL程序开发Oracle数据库的存储过程、存储函数和触发器;并掌握如何在Java程序中调用存储过程、存储函数。
  • 2018年04月05日 07:05

Oracle存储过程调用带参的存储过程

Oracle存储过程包含三部分:过程声明,执行过程部分,存储过程异常。 Oracle存储过程可以有无参数存储过程和带参数存储过程。  一、无参程序过程语法 1 create or replace...
  • kevinelven
  • kevinelven
  • 2017-05-25 13:28:14
  • 6450

oracle存储过程--参数类型研究(in,out,in out)

###########################in############################ create or replace procedure pro_eight(p_on...
  • lushuaiyin
  • lushuaiyin
  • 2013-07-10 11:46:06
  • 6034

Oracle数据库中使用存储过程时对传入和传出参数的使用说明

  1.         创建一个名称为BB的存储过程,根据传入的参数来获取一条记录.CREATE PROCEDURE BB @IDP INT  ASSELECT * FROM chatroom_in...
  • lllxy
  • lllxy
  • 2007-08-11 23:25:00
  • 2951

Oracle存储过程传参,参数使用date日期类型的参数,返回结果集

存储过程中使用date日期类型的参数,需要定义日期类型date的变量重新赋值一次,赋值的过程貌似会做一次转换,之后才能正常使用,不然使用这个日期查询结果不准确,经常会得到无效的结果。 CREAT...
  • yujia_zhuo
  • yujia_zhuo
  • 2017-03-10 10:21:47
  • 2551

Oracle数据库学习笔记四——存储过程的值传递和引用传递

编程语言中的4种子例程: 由两种行为定义,即形式值是否返回以及参数列表是值传递还是引用传递。 如果返回输出,子例程就是函数,如果不返回,就是过程。 所以4中子例程为: 1.值传递函数 2.引...
  • w1014074794
  • w1014074794
  • 2015-04-18 22:21:40
  • 1576

Oracle存储过程及举例(几种参数情况的存储过程)

Oracle存储过程及举例(几种参数情况的存储过程)
  • u013882957
  • u013882957
  • 2017-05-06 22:22:50
  • 5758

Oracle数据库(触发器、存储过程、函数、包)

Oracle触发器、存储过程、函数、包
  • u013412772
  • u013412772
  • 2016-10-06 15:34:30
  • 3556

ORACLE存储过程传入参数值无法使用

CREATE OR REPLACE PROCEDURE UpdateBankAccount ( ID number, USERCODE varchar2, DOCTY...
  • litepos
  • litepos
  • 2010-12-17 11:24:00
  • 2293

ORACLE存储过程的参数问题

关于存储过程中大家有很多人可能遇见过就是编译OK。但是却是错误的,不能执行。在PL/SQL Devleoper中可以看见这个过程带个红叉。所以把这个问题整理一下。做个记录为了说明问题先创建一个表cre...
  • leo2u
  • leo2u
  • 2007-05-31 09:32:00
  • 1607
收藏助手
不良信息举报
您举报文章:oracle 存储过程 传参数,如果是希望传参值也被利用起来,存储过程里面虽有IN,但OUT必不可少。
举报原因:
原因补充:

(最多只允许输入30个字)