调用Oracle存储过程并获取out参数值

简介: 原文: http://tech.it168.com/oldarticle/2006-04-02/200604021512359.shtml http://www.cnblogs.com/m-cnblogs/archive/2012/02/23/2364906.

原文:

http://tech.it168.com/oldarticle/2006-04-02/200604021512359.shtml

http://www.cnblogs.com/m-cnblogs/archive/2012/02/23/2364906.html

 

1.创建测试存储过程:
  SQL> create or replace procedure proc_test(p1 IN varchar2,p2 OUT varchar2) is
  2 begin
  3 SELECT p1 INTO p2 FROM dual;
  4 end proc_test;
  5 /

  过程被创建

2.主要C# 代码以及注意点:
  using ORAC = System.Data.OracleClient;
  private void button1_Click(object sender, System.EventArgs e)
  {
    try
    {
      string str_Sql = @"call proc_test(:p1,:p2)"; 
      /*不能用:call proc_test(?,?)或者call proc_test(@p1,@p2),这样会报ORA-01036:非法的变量名/编号错误 */
      ORAC.OracleCommand cmd = new ORAC.OracleCommand(str_Sql,this.oracleConnection1);
      /*cmd.CommandType = CommandType.StoredProcedure;-注意这种方式调用存储过程,不能指定CommandType为StoredProcedure */

      ORAC.OracleParameter pram1 = new ORAC.OracleParameter("p1",ORAC.OracleType.VarChar,10);
      pram1.Value = "test";

      cmd.Parameters.Add(pram1);

      ORAC.OracleParameter pram2 = new ORAC.OracleParameter("p2",ORAC.OracleType.VarChar,10);
      pram2.Direction =ParameterDirection.Output;

      cmd.Parameters.Add(pram2);

      if(this.oracleConnection1.State == System.Data.ConnectionState.Closed)
      {
        this.oracleConnection1.Open();
      }

      cmd.ExecuteNonQuery();

      this.textBox1.Text = cmd.Parameters[1].Value.ToString();
    }
    catch(Exception ex)
    {
      MessageBox.Show(ex.Message);
    }
    finally
    {
      this.oracleConnection1.Close();
    }
  }

 

参数说明

parameter.Value=赋值

当这个值为null时,不能直接赋值,负责页面就会报错:未将对象应用到对象的实例

当为null时需转化为System.DBNull.Value即可

 

相关文章
|
1月前
|
SQL 存储 Oracle
一篇文章带你学会 Oracle 存储过程的基本介绍和高阶用法(上)
一篇文章带你学会 Oracle 存储过程的基本介绍和高阶用法
|
21天前
|
存储 SQL Oracle
oracle 存储过程导出sql语句 导出为文件
oracle 存储过程导出sql语句 导出为文件
48 0
|
1月前
|
SQL 存储 Oracle
一篇文章带你学会 Oracle 存储过程的基本介绍和高阶用法(下)
一篇文章带你学会 Oracle 存储过程的基本介绍和高阶用法
|
1月前
|
存储 SQL Oracle
Oracle存储过程与自定义函数的调用:异同与实战场景
【4月更文挑战第19天】Oracle的存储过程与自定义函数各有特色,存储过程用于封装复杂SQL操作,常在批量处理和数据维护中使用,通过CALL或EXECUTE调用;而自定义函数则用于简单计算和查询,返回单一值,可直接在SQL语句中调用。了解两者异同,如返回值方式、调用方式和应用场景,能提升数据库管理效率。实战场景包括:使用存储过程定期清理过期数据,用自定义函数在查询中动态计算字段值。
|
1月前
|
存储 SQL Oracle
Oracle存储过程:数据王国的魔法师
【4月更文挑战第19天】Oracle存储过程是封装复杂SQL操作的魔法工具,存储在数据库中以便重复调用。它们提供高效执行和安全,类似于预编译的程序。创建存储过程涉及定义名称和参数,如示例所示,创建一个根据员工ID获取姓名和薪资的`get_employee_info`过程。调用存储过程可提高代码可读性和性能,使数据库管理更为便捷。
|
20天前
|
Oracle 关系型数据库 数据库
已解决:idea 连接 oracle 数据库 避雷
已解决:idea 连接 oracle 数据库 避雷
19 2
|
1天前
|
Oracle 数据可视化 关系型数据库
Oracle数据库安装及使用Navicat连接oracle2
Oracle数据库安装及使用Navicat连接oracle
18 1
|
10天前
|
Oracle 关系型数据库 数据库
实时计算 Flink版产品使用问题之连接到Oracle数据库但无法读取到数据,是什么导致的
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
17天前
|
SQL Oracle 关系型数据库
探索 Linux 命令 `db_archive`:Oracle 数据库归档日志的工具
探索 Linux 中的 `db_archive`,实际与 Oracle 数据库归档日志管理相关。在 Oracle 中,归档日志用于恢复,当在线重做日志满时自动归档。管理员可使用 SQL*Plus 查看归档模式,通过 `RMAN` 进行备份和恢复操作。管理归档日志需谨慎,避免数据丢失。了解归档管理对 Oracle 管理员至关重要,确保故障时能快速恢复数据库。
|
18天前
|
SQL Oracle 关系型数据库
改变Oracle数据库连接端口
改变Oracle数据库连接端口
25 4

热门文章

最新文章

推荐镜像

更多