首页 > 数据库 >Oracle 存储过程多数据集返回-程序处理

Oracle 存储过程多数据集返回-程序处理

时间:2023-05-24 10:22:05浏览次数:42  
标签:存储 cur 程序处理 cmd System Oracle using type ds

oracle 存储过程返回数据集是以游标参数的形式返回,同时返回多个数据集就相当于多几个输出类型的游标参数,而在程序处理中如何处理这种多结果集的存储过程?

今天研究了Delphi7 和 c# 两种语言,D7 ODBC 方式连接,OraStoreProced 对象无法处理多个对象,查看其父类TCustomOraQuery,不想c# 断开式数据集可以接收多个集合,即DataSet 等同于 List
  • 示例

Oracle

--包头
create or replace package mypackage is
type cur_type is ref cursor;
procedure pr_get_data(cur1 out cur_type,cur2 out cur_type);
end;
--包体
create or replace package body mypackage is
procedure pr_get_data(cur1 out cur_type,cur2 out cur_type) as
begin
  open cur1 for select * from sales;
  open cur2 for select * from t1;
end;
end;

c# 调用

  • C# 示例
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Oracle.ManagedDataAccess.Client;

namespace WinStoreProced
{
    public partial class Form1 : Form
    {
        private string connstr = "Data Source=(DESCRIPTION =(ADDRESS =(PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = ORCL)));User Id=t1;Password=tt123;";

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            using (OracleConnection conn = new OracleConnection(connstr)) {
                try
                {
                    conn.Open();
                    Text = "Success";
                    using (OracleCommand cmd = conn.CreateCommand())
                    {
                        cmd.CommandType = CommandType.StoredProcedure;
                        cmd.CommandText = "mypackage.pr_get_data";
                        cmd.Parameters.Clear();
                        cmd.Parameters.Add("data1", OracleDbType.RefCursor, ParameterDirection.Output);
                        cmd.Parameters.Add("data2", OracleDbType.RefCursor, ParameterDirection.Output);
                        cmd.Prepare();
                        try
                        {
                            OracleDataAdapter oda = new OracleDataAdapter(cmd);
                            DataSet ds = new DataSet();
                            oda.Fill(ds);
                            dataGridView1.DataSource = ds.Tables[0];
                            dataGridView2.DataSource = ds.Tables[1];
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show(ex.Message);
                        }


                    }
                }
                catch(Exception ex) {
                    MessageBox.Show(ex.Message);
                }
            }
        }
    }
}

  • 结果
    image

标签:存储,cur,程序处理,cmd,System,Oracle,using,type,ds
From: https://www.cnblogs.com/sundh1981/p/17427256.html

相关文章

  • oracle归档命令整理
    问题背景:一般处理数据库问题中,归档问题遇到比较频繁,如归档满了是否可以清理,是否进行了备份,问题是否会复发,如何诊断处理方案:查看数据库备份情况,如有备份则可清理,若无备份可及时备份进行处理colSTART_TIMEfora30colEND_TIMEfora30colstatusfora10selectSESSION_KEY,INPU......
  • linux nfs共享存储服务
    目录一、nfs服务二、nfs优点三、配置文件四、共享文件配置过程五、实验1.创建共享文件(两台终端共享)              一、nfs服务概念:网络上共享文件系统的协议,运行多个服务器之间通过网络共享文件和目录服务端:将指定目录标记......
  • oracle切换mount状态时报错
    1、https://blog.csdn.net/weixin_43424368/article/details/107781240SQL>alterdatabaseopen;alterdatabaseopen*ERRORatline1:ORA-01113:file1needsmediarecoveryORA-01110:datafile1:'/u01/app/oracle/oradata/guangxi/system01.dbf'——————......
  • oracle_将一个数据库的某一张表复制到另一个数据库(表名与表结构结构相同,数据库不同)
    数据库:数据库A表名:student数据库A的库名:school_A数据库B表名:studentinsertintostudent--要把数据插入数据库B中的student表select*fromstudent@school_A--数据库A:school_A中的student表(注意1:school_A需要是登录状态注意2:输入@时,一般会有提示,也可根据......
  • Mac下存储环境变量相关文件
    配置bash首先,说明下MacOS系统的环境变量主要由下面几个文件和文件夹所决定,并且他们的加载顺序如下:/etc/profile/etc/paths/etc/bashrc~/.bash_profile 或 ~/.bashrc ~/.bash_login其中,/etc/profile, /etc/paths, /etc/bashrc 是系统级别配置文件,系统启动就会加载......
  • SharedPreferences存储数据
    适用范围:保存少量的数据,且这些数据的格式非常简单:字符串型、基本类型的值。比如应用程序的各种配置信息(如是否打开音效、是否使用震动效果、小游戏的玩家积分等),解锁口令密码等  核心原理:保存基于XML文件存储的key-value键值对数据,通常用来存储一些简单的配置信息。通过DDMS的F......
  • Oracle 中如何手工提交Cluster Table的事务
    ++++创建测试表SQL>connroger/rogerConnected.SQL>createclustert_cluster(idnumber(2));Clustercreated.SQL>createtablet_0610......
  • Oracle为什么不需要double write?
    近期看到朋友圈转发了几篇关于MySQLinnodbdoublewrite的文章;感觉都还不错。突然想到为什么Oracle没有这个东西?PostgreSQL是否也有类似机制?在网上搜了一下,发现有人之前简单写过类似文章。。。。但是;毫无疑问,没有一篇能够完全分析透彻的的。 所以,我想来好好说一下这个问题。 首......
  • 59.怎样修改oracle数据库的db_name
    通常来说,oracle数据库的db_name一般是在创建实例时就已经确定好了,很少去修改它。。。但是如果要修改的话,一般按照如下方法:比如说将orcl1 修改成orcl21.exportORACLE_SID=orcl1  sqlplus/assysdbacreatepfilefromspfile;2.修改initorcl1.ora 文件--->in......
  • ORACLE11g备份干货分享
    ORACLE11g做备份非常方便,因为有rman这样的工具支持。只需要对备份概念和工具命令了解清楚就可以。但这些细节了解和使用起来,也会遇到很多细节问题。今天整理后,形成这篇文章以便后期使用少走弯路。RMAN>run{2>sql'altersystemcheckpoint';3>sql'altersystemar......