- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试调用一个将自定义数据类型 table of numbers
作为参数之一的过程。
这是类型的定义:
create type num_list as table of number;
以及程序的定义:
create or replace procedure my_procedure
(listofnumbers num_list,
v_value char)
is
begin
update my_table
set my_column = v_value
where my_row_id in (select column_value
from table(listofnumbers));
end;
使用 ODP.NET 和 C#,我声明如下:
var row_ids = new int[] { 1, 2 };
using (var oracleConn = new Oracle.DataAccess.Client.OracleConnection(myConnectionString))
{
oracleConn.Open();
var cmd = new Oracle.DataAccess.Client.OracleCommand("my_procedure", oracleConn);
cmd.CommandType = CommandType.StoredProcedure;
var param1 = new Oracle.DataAccess.Client.OracleParameter("listofnumbers", Oracle.DataAccess.Client.OracleDbType.Array, ParameterDirection.Input);
param1.CollectionType = Oracle.DataAccess.Client.OracleCollectionType.PLSQLAssociativeArray;
param1.UdtTypeName = "num_list";
param1.Value = row_ids;
cmd.Parameters.Add(param1);
var param2 = new Oracle.DataAccess.Client.OracleParameter("v_value ", Oracle.DataAccess.Client.OracleDbType.Char, ParameterDirection.Input);
param2.Value = "Y";
cmd.Parameters.Add(param2);
cmd.ExecuteNonQuery();
}
抛出的异常说明:
Invalid parameter binding Parameter name: listofnumbers
我在定义参数时缺少哪些属性?
最佳答案
编辑:5 月 14 日
由于我的回答未被接受,这里有一个可能有用的链接:
不幸的是,我不能玩这个,因为我有不支持 UDT 的 x64 ODP.NET。
但是,由于您的 UDT 是一个集合,您是否尝试过在 param1 上设置 Size 属性?
param1.Size = row_ids.Length;
现在,它不是 UDT,但这是一个代码片段,我如何绑定(bind)到包规范中定义的类型:
TYPE t_stringlist IS TABLE OF VARCHAR2(4000);
string[] values = new string[] { "AAA", "BBB" };
OracleParameter parameter = new OracleParameter();
parameter.Name = "my_param";
parameter.CollectionType = OracleCollectionType.PLSQLAssociativeArray;
parameter.OracleDbType = OracleDbType.Varchar2;
parameter.ArrayBindSize = new int[values.Length];
parameter.ArrayBindStatus = new OracleParameterStatus[values.Length];
parameter.Size = values.Length;
for (int i = 0; i < values.Length; ++i)
{
parameter.ArrayBindSize[i] = 4000;
parameter.ArrayBindStatus[i] = OracleParameterStatus.Success;
}
parameter.Value = values;
我不确定您可以将 ArrayBindSize 设置为什么值。
此外,您可以考虑为您的 UDT 创建一个类型工厂:
http://download.oracle.com/docs/html/E15167_01/featUDTs.htm
无论如何,我希望你能在这里找到对你有帮助的东西。
关于c# - 过程参数中 Oracle UDT 的绑定(bind)无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4271605/
我有 table emp(id,name,list>) 。这里地址是cassandra UDT定义为create TYPE address (hno int,street text); 。我试图使用下
官方文档告诉我们不要对主键使用 UDT。这有什么特别的原因吗?这样做的潜在缺点是什么? 最佳答案 这句话是为了劝阻用户不要对 PK 列不加区别地使用 UDT。 UDT 在其当前版本中的主要动机(即,考
假设我有一组 UDT。我按如下方式填充它: public type udtEmp Id as long Name as string end type dim col as new C
Cassandra 表和UDT CREATE TYPE IF NOT EXISTS phone_type( code TEXT, phone TEXT, ); CREATE TABLE I
我有一个 Java 应用程序,其中有 Spark-1.4.0 和 Cassandra-2.1.5 以及 Cassandra-Spark-connection-1.4。 0-M1. 在此应用程序中,我尝
多年来,我一直避免在 VBA 中使用 Public Type UDT,因为它们很难传递,而且我从来没有真正费心去理解为什么……直到现在 - 它是只需创建一个类模块并改为使用实际对象就更容易了。 但最近
我编写了一个返回用户定义类型的函数。 如果函数出现任何错误,我如何返回一个空的 UDT? 我尝试将函数设置为“无”,但它抛出“需要对象”错误。 提前致谢。 最佳答案 如果可能,请改用类/对象。甚至可以
This is my mssql UDT create type ConditionUDT as Table ( Name varchar(150), PackageId int );
这是我接收 UTD 消息的程序。我打算用它通过 wifi 接收 640*480 YUV 图像。我应该设置多大的缓冲区?是否可以在接收到第一张图像后设置缓冲区以找出实际大小? 下面是我的全部代码,但基本
我使用 UDT 库发送我的数据。但似乎无法正确发送 unsigned char* 数据。一方面我发送它就像 int rc = UDT::sendmsg(socket, full_data, size,
可以对卡住列使用聚类键吗? 也许: CREATE TYPE user_details ( email varchar, password varchar, createdAt timest
我想知道PostgreSQL的JDBC驱动42.2.8是否支持UDT映射? 我在 SQLData 实现上苦苦挣扎了一段时间,但遇到了错误: org.postgresql.util.PSQLExcept
我正在使用 netty + udt + rendezvous 测试此示例的修改版本: http://netty.io/4.0/xref/io/netty/example/udt/echo/rendez
我想要一种通用的方法来为任何 C++ 用户定义的类型创建唯一的编译时标识符。 例如: unique_id::value == 0 // true unique_id::value == 1 // tr
我有一个循环,它读取一堆 XML 文件,对于每个文件,它验证 XML 中的数据并将其加载到一些 UDT 中,然后对数据进行一些工作。 然后它返回到循环的开头,UDT 仍然有来自前一个 XML 的数据。
我尝试使用 SparkSQL (v.1.3.0) 访问 PostgreSQL 数据库。在这个数据库中,我有一个表 CREATE TABLE test ( id bigint, values dou
我需要根据 IP 地址存储有关用户位置的记录,但我不确定如何最好地对其进行建模。 对于每个地址,我们需要记录机器的详细信息(ipaddress、agentId)和机器的位置(isocode、城市)。此
我正在尝试通过 DB2 使用嵌套结构化类型 (UDT),但遇到了一些问题。 以下是为用例创建类型、表、函数和转换的 SQL 语句。每个语句都执行得很好,但是在尝试执行简单的操作时会发生错误从 t_au
我正在 Cassandra 2.1 中尝试使用 UDT,并且遇到了 InvalidTypeExeception。 我将表格设置为: session.execute("CREATE TYPE myke
我有一个 COM 服务器,其方法当前返回一个整数: [ object, uuid("..."), dual, helpstring("IMyCOMServer Inte
我是一名优秀的程序员,十分优秀!