提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
原创|使用教程|编辑:郝浩|2013-05-06 15:19:53.000|阅读 225 次
概述:dotConnect为Oracle允许用户使用PL / SQL阵列,PL/SQL表作为匿名PL / SQL块的参数或作为存储进程的参数。作为一般的阵列,PL/SQL阵列可用于常见数据类型,并可通过指数访问。
# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>
相关链接:
dotConnect为Oracle允许用户使用PL / SQL阵列,PL/SQL表作为匿名PL / SQL块的参数或作为存储进程的参数。作为一般的阵列,PL/SQL阵列可用于常见数据类型,并可通过指数访问。
在示例中将会使用标准的Dept表,以下的示例中就演示了如何使用PL / SQL表类型的参数,更新来自Dept表的记录。
DECLARE i INTEGER; BEGIN i:= 1; FOR rec IN (SELECT DeptNo FROM Scott.Dept WHERE RowNum <= 10 ORDER BY DeptNo) LOOP UPDATE Scott.Dept SET DName = :NameArr(i) WHERE DeptNo = Rec.DeptNo; i:= i + 1; END LOOP; END;
上面给出的了SQL中有一个有PL / SQL表类型的NameArr名字的参数,这个SQL用来自NameArr数组的值,更新Dept表的DName域。
首先,创建一个OracleConnection类的对象,同时打开一个会话:
[C#]
... OracleConnection conn = new OracleConnection( "User Id=Scott;Password=tiger;Data Source=Ora"); conn.Open(); ...
[Visual Basic]
... Dim conn As OracleConnection = new OracleConnection( _ "User Id=Scott;Password=tiger;Data Source=Ora") conn.Open() ...
上面的代码只是一段示例,不要去编译。全部打代码将会在文章的结尾给出。
接着就是创建一个有OracleConnection对象和指定了用于执行的SQL语句的OracleCommand类的实例:
[C#]
... OracleCommand cmd = conn.CreateCommand(); cmd.CommandText = "DECLARE\n" + " i INTEGER;\n" + "BEGIN\n" + " i:= 1;\n" + " FOR rec IN (SELECT DeptNo FROM Scott.Dept\n" + " WHERE RowNum <= 10 ORDER BY DeptNo)\n" + " LOOP\n" + " UPDATE Scott.Dept\n" + " SET DName = :NameArr(i)\n" + " WHERE DeptNo = Rec.DeptNo;\n" + " i:= i + 1;\n" + " END LOOP;\n" + "END;"; ...
... Dim cmd As OracleCommand = conn.CreateCommand() cmd.CommandText = "DECLARE" & VbCrlf & _ " i INTEGER;" & VbCrlf & _ "BEGIN" & VbCrlf & _ " i:= 1;" & VbCrlf & _ " FOR rec IN (SELECT DeptNo FROM Scott.Dept" & VbCrlf & _ " WHERE RowNum <= 10 ORDER BY DeptNo)" & VbCrlf & _ " LOOP" & VbCrlf & " UPDATE Scott.Dept" & VbCrlf & _ " SET DName = :NameArr(i)" & VbCrlf & _ " WHERE DeptNo = Rec.DeptNo;" & VbCrlf & _ " i:= i + 1;" & VbCrlf & _ " END LOOP;" & VbCrlf & _ "END;" ...
现在对于来自SQL的每个参数,应该关联OracleParameter类的对象,以及添加这个对象到OracleCommand对象参数的集合。关联主要是通过下面的参数名称实现的:
[C#]
... cmd.Parameters.Add("NameArr", OracleDbType.VarChar); ...
[Visual Basic]
...
cmd.Parameters.Add("NameArr", OracleDbType.VarChar)
...
然后是指定NameArr名称有PL/SQL表类型的参数。所以需要设置请求值的参数的ArrayLength属性。如果说Dept有4个记录,那么该数组的大小也应该是4种。
C#
... cmd.Parameters["NameArr"].ArrayLength = 4;
[Visual Basic]
... cmd.Parameters("NameArr").ArrayLength = 4 ...
接着需要对NameArr参数的数组项目设置值,数组项目的数量必须是和ArrayLength属性的值一样。
[C#]
... cmd.Parameters["NameArr"].Value = new srting[] { "London", "Berlin", "Geneva", "Vienna" }; ...
[Visual Basic]
... Dim valArr(4) As string valArr(0) = "London" valArr(1) = "Berlin" valArr(2) = "Geneva" valArr(3) = "Vienna" cmd.Parameters("NameArr").Value = valArr ...
现在可以调用OracleCommand类的ExecuteNonQuery ()方法执行SQL:
[C#]
cmd.ExecuteNonQuery();
[Visual Basic]
cmd.ExecuteNonQuery()
示例完整的代码如下:
[C#]
public void UpdateThroughPlSqlTable() { // Create connection object OracleConnection conn = new OracleConnection( "User Id=Scott;Password=tiger;Data Source=Ora"); // Open connection conn.Open(); // Create command object with previously opened connection OracleCommand cmd = conn.CreateCommand(); // Set command text property cmd.CommandText = "DECLARE\n" + " i INTEGER;\n" + "BEGIN\n" + " i:= 1;\n" + " FOR rec IN (SELECT DeptNo FROM Scott.Dept\n" + " WHERE RowNum <= 10 ORDER BY DeptNo)\n" + " LOOP\n" + " UPDATE Scott.Dept\n" + " SET DName = :NameArr(i)\n" + " WHERE DeptNo = Rec.DeptNo;\n" + " i:= i + 1;\n" + " END LOOP;\n" + "END;"; // Add parameters to command parameters collection cmd.Parameters.Add("NameArr", OracleDbType.VarChar); // Set Pl/SQL table length cmd.Parameters["NameArr"].ArrayLength = 4; // Set array parameter value cmd.Parameters["NameArr"].Value = new string[] { "London", "Berlin", "Geneva", "Vienna" }; // Update table cmd.ExecuteNonQuery(); // Dispose command cmd.Dispose(); // Close connection conn.Close(); }
[Visual Basic]
Public Sub UpdateThroughPlSqlTable() ' Create connection object Dim conn As OracleConnection = new OracleConnection( "User Id=Scott;Password=tiger;Data Source=Ora") ' Open connection conn.Open() ' Create command object with previously opened connection Dim cmd As OracleCommand = conn.CreateCommand() ' Set command text property cmd.CommandText = "DECLARE" & VbCrlf & _ " i INTEGER;" & VbCrlf & _ "BEGIN" & VbCrlf & _ " i:= 1;" & VbCrlf & _ " FOR rec IN (SELECT DeptNo FROM Scott.Dept" & VbCrlf & _ " WHERE RowNum <= 10 ORDER BY DeptNo)" & VbCrlf & _ " LOOP" & VbCrlf & " UPDATE Scott.Dept" & VbCrlf & _ " SET DName = :NameArr(i)" & VbCrlf & _ " WHERE DeptNo = Rec.DeptNo;" & VbCrlf & _ " i:= i + 1;" & VbCrlf & _ " END LOOP;" & VbCrlf & _ "END;" ' Add parameters to command parameters collection cmd.Parameters.Add("NameArr", OracleDbType.VarChar) ' Set Pl/SQL table length cmd.Parameters("NameArr").ArrayLength = 4 ' Set array parameter value Dim valArr(4) As string valArr(0) = "London" valArr(1) = "Berlin" valArr(2) = "Geneva" valArr(3) = "Vienna" cmd.Parameters("NameArr").Value = valArr ' Update table cmd.ExecuteNonQuery() ' Dispose command cmd.Dispose() ' Close connection conn.Close() End Sub
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn
文章转载自:慧都控件本文探讨 SQL Server 中 NULL 和空值之间的区别,并讨论如何有效地处理它们。
Unity 是一款功能极其丰富的游戏引擎,允许开发人员将各种媒体集成到他们的项目中。但是,它缺少最令人兴奋的功能之一 - 将 Web 内容(例如 HTML、CSS 和 JavaScript)直接渲染到 3D 场景中的纹理上的能力。在本文中,我们将介绍如何使用 DotNetBrowser 在 Unity3D 中将 Web 内容渲染为纹理。
DevExpress v24.2帮助文档正式发布上线了,请按版本按需下载~
本教程将向您展示如何用MyEclipse构建一个Web项目,欢迎下载最新版IDE体验!
dotConnect for Oracle不仅可以高效地连接到Oracle数据库,还提供了新的开发工具和技术。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@pclwef.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢