Oracle 存储过程和自定义数据类型

2023-11-24

我有一个 Oracle 存储过程,它采用两个参数:自定义数据类型和字符串。

在Oracle中调用存储过程,我会执行以下操作:

EXECUTE MY_STORED_PROCEDURE(MYTYPE_T(99, 231), 'mystring')

我如何使用 C# 执行此操作?我知道我需要将命令设置为存储过程,但是如何将第一个参数指定为自定义数据类型?

Update:

MYTYPE_T is TABLE OF NUMBER通过创建

CREATE OR REPLACE TYPE mytype_t AS TABLE OF NUMBER ; 

您将无法轻松地使用已弃用 System.Data.OracleClient但你可以利用甲骨文的ODP使用 UDT。如果这不是一个选项,我不确定如何通过 C# 中的参数和 System.Data 来完成此操作。

ODP 确实附带了很多示例,上面的链接中有示例。

我将添加更多链接,希望能有所帮助:

  1. 视觉工作室 ODP 指数
  2. 这准确地向您展示了如何 利用 ODT 创建您的自定义 类包装并调用它们(做 请注意,这是中途, 他们使用该工具逐步完成 在其上方创建自定义类型 示例——本演练是 非常彻底,应该可以让你 直接到达您需要去的地方)
  3. Download: 现在这家伙也 安装示例文件,这是 另一个很好的例子 你需要做什么:安装后 goto [您的目录路径 安装]..\product\11.2.0\client_1\odp.net\samples\4\UDT\object1.cs

让 Visual Studio 的 ODT 工具为您的 UDT 创建类(例如 IOracleCustomType 等)确实值得。然后您可以深入研究并修改它们以满足您的需要。然后,一旦一切都说完了(来自 object1.cs 的片段):

    Person p1   = new Person();
p1.Name     = "John";
p1.Address  = "Address1";
p1.Age = 20;

// Establish a connection to Oracle
OracleConnection con = new OracleConnection(constr);
con.Open();

// Update Person object and insert it into a database table
OracleCommand cmd = new OracleCommand(sql1, con);
cmd.CommandType = CommandType.StoredProcedure;
OracleParameter param1 = new OracleParameter();

param1.OracleDbType   = OracleDbType.Object;
param1.Direction      = ParameterDirection.InputOutput;

// Note: The UdtTypeName is case-senstive
param1.UdtTypeName     = "SCOTT.ODP_OBJ1_SAMPLE_PERSON_TYPE";   
param1.Value           = p1;

cmd.Parameters.Add(param1);

另请注意,Person 类必须实现IOracle自定义类型(可以通过#2 中的链接创建)

/* Person Class
   An instance of a Person class represents an ODP_OBJ1_SAMPLE_PERSON_TYPE object
   A custom type must implement INullable and IOracleCustomType interfaces
*/
public class Person : INullable, IOracleCustomType

上面是完整的自定义类型,但您需要的是关联数组 ODP 绑定:

http://weblogs.asp.net/ricardoperes/archive/2009/05/14/odp-net-associative-arrays.aspx

你会想要使用

param1.CollectionType = OracleCollectionType.PLSQLAssociativeArray;

一切都应该就位

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Oracle 存储过程和自定义数据类型 的相关文章

随机推荐

  • 跟踪 Core Animation 动画

    我有两个在屏幕上移动的圆圈 这些圆圈都是包含其他 UIView 的 UIView 每个圆圈之外的区域是透明的 我编写了一个函数来创建一个 CGPath 它将两个圆与四边形连接起来 我将这条路径填充到跨越整个屏幕的透明 CALayer 中 由
  • “在成员函数之外的封闭类的定义中需要默认成员初始值设定项” - 我的代码格式是否错误?

    struct foo struct bar bar no error w o this line bar data nullptr no error w o this line foo noexcept default no error w
  • Racket/Scheme 中的 zip 功能

    给定两个列表 返回一个列表 其元素是大小为二的列表 这样对于i th 列表 第一个元素是i 第一个原始列表的第一个元素 第二个元素是i 第二个原始列表的第一个元素 如果一个列表小于另一个列表 则生成的列表具有最小的大小 因此 如果其中一个列
  • 如何在 Protractor / AngularJS 测试中重用代码

    我们在几个 JS 文件中对 AngularJS 应用程序进行了几个 Protractor 端到端测试 它们工作得很好 但是 整个测试中有很多重复的代码 我们希望将其干燥 例如 每次登录时 我们都必须单击文本元素 输入用户名和密码 然后单击
  • 如何将 Angular2 RC1 与 systemjs 捆绑在一起

    在发布候选版本之前 Angular 提供了一个捆绑文件 自候选版本发布以来 不再有捆绑文件 包括 angular2 和 rxjs 我的应用程序现在在 7 秒内发出 671 个请求来加载 这阻碍了发展 有谁知道如何捆绑 Angular 和 r
  • JavaScript 事件处理程序参数

    我有以下 JavaScript 代码 var ans el document createElement input ans el setAttribute id unique int value ans el setAttribute t
  • 将数据从 DBGrid 导出到 Excel

    我想知道是否有人可以将数据从 DBGrid 导出到 Excel 我正在使用 Delphi 7 Excel 2007 和 ADO 任何帮助将不胜感激 如果您想要快速导出原始数据 只需使用类似以下内容导出记录集 ADO Dataset reco
  • 替换旧的 GetAppUsers 调用以查看使用我的应用程序的用户朋友?

    旧 REST API 中一个非常有用的调用是Friends getAppUsers 此调用会返回正在使用某个应用程序的所有朋友 遗憾的是 这并不在打开图API Stack Overflow 上有一篇关于它的好文章 使用 Graph API
  • 使用 ACM 的证书在 elasticbeanstalk 中强制使用 https

    我已经配置了一个可扩展的 EB Elasticbeanstalk rails puma 实例 我已通过 ACM Amazon Certificate Manager 申请了 https 并将其应用到我的负载均衡器 我的网站现已启用 HTTP
  • ASP.NET MVC 认为我的虚拟目录是一个控制器

    我在 IIS 中的 MVC 网站下有一个名为 Files 的虚拟目录 该目录与我的 Views 目录处于同一级别 当我将 MVC 应用程序中的文件链接到 Files 目录下的文件时 出现以下错误 路径控制器 文件 图像 1c7f7eb8 5
  • 快速比较字符串可选与非可选

    在 Swift 中比较字符串时 您可以将非可选字符串与可选字符串进行比较 像这样 文本是可选的 并且它是空的 UITextField text True 是因为相等运算符本身解开字符串吗 对于每一个Equatable键入 还为选项定义了操作
  • 如何让 Django 2.0 使用 Oracle 11g 语法而不是 12c?

    这是我的开发环境 Windows 7 x64 Python 3 6 3 64位 虚拟环境 姜戈2 0 CX Oracle 6 1 Oracle 11 2 企业版 64 位 在远程计算机上 我没能做到migrate 姜戈管理 py迁移 因为D
  • 向 Visual Studio 2010 Express 添加库

    似乎无法找到如何添加库的明确答案 项目属性有很多地方可以添加文件路径 但我想知道我是否不应该编辑所有这些路径 有人可以告诉我每个可能条目的用途 如果有更多条目 以及我应该编辑哪些条目 或者方便的教程 我会列出我所知道的条目 目前正在尝试添加
  • 无法解析用户名以确保我已登录网站

    我已经用 python 编写了一个脚本来登录网站并解析用户名以确保我确实能够登录 使用我在下面尝试过的方法似乎可以让我到达那里 但是 我在脚本中使用了从 chrome 开发工具中获取的硬编码 cookie 来获得成功 我尝试过 import
  • 将键盘快捷键绑定到 WPF 视图模型中的命令

    我有一个应用程序 其中我有一个UserControl里面有一个工具栏 这个工具栏有一个按钮Execute反过来 它的命令绑定到ICommand视图模型作为属性公开的派生类
  • R 系统时间的输出中时区消失

    我正在尝试将系统日期和时间输出到文本文件 当我这样做时 时区就会消失 示例如下 gt Sys time 1 2012 05 24 09 58 38 CDT gt currentTime lt Sys time gt currentTime
  • `this` 在默认参数下如何工作?

    所以 ES6 恰好在几个小时前标准化 带来了默认参数对于类似于 PHP Python 等中的函数 我可以执行以下操作 function foo bar dum return bar foo 1 1 foo dum foo undefined
  • Spring Boot 日志记录和 Google Cloud Platform 日志查看器

    我正在 Google Cloud Platform 中运行 Spring Boot 应用程序 并通过 Google Platform Logs Viewer 查看日志文件 在使用 Spring Boot 并仅使用简单的 servlet 之前
  • 如何在 PySpark 中使用列值作为字典的键?

    我有一个小的 PySpark DataFramedf index col1 0 1 1 3 2 4 还有一本字典 LOOKUP 0 2 1 5 2 5 3 4 4 6 我现在想添加一个额外的列col2 to df 等于LOOKUP的值col
  • Oracle 存储过程和自定义数据类型

    我有一个 Oracle 存储过程 它采用两个参数 自定义数据类型和字符串 在Oracle中调用存储过程 我会执行以下操作 EXECUTE MY STORED PROCEDURE MYTYPE T 99 231 mystring 我如何使用