没有找到合适的产品?
联系客服协助选型:023-68661681
提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
原创|使用教程|编辑:郝浩|2013-05-06 15:19:53.000|阅读 283 次
概述: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@ke049m.cn
文章转载自:慧都控件



本文将为大家介绍一些MyEclipse开发过程中能用到的EJB开发工具,欢迎下载最新版体验!
本文主要介绍如何在MVVM应用程序中使用虚拟源,欢迎下载最新版组件体验!
Parasoft C/C++test是一款功能强大的代码测试与分析工具,专为提升代码质量、确保软件安全与可靠性而设计。要在 Ubuntu 桌面环境中使用这一强大的工具,第一步就是完成其安装与许可证配置。
注意: Cogent DataHub 软件 v11 包含一些新功能,您的目标操作系统可能不支持这些功能。
相关产品
dotConnect for Oracle不仅可以高效地连接到Oracle数据库,还提供了新的开发工具和技术。
最新文章 MORE
半岛外围网上直营相关的文章 MORE
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@ke049m.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢
半岛外围网上直营