- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们有一个 C# 组件,可以处理将任意大小的元素列表附加到 IN 子句中以进行半任意 SQL SELECT
查询。本质上,这归结为接收类似的东西:
SELECT COUNT(*) FROM a WHERE b IN (...)
...其中“...”是允许组件修改的查询的唯一部分。
目前该组件将插入一组以逗号分隔的命名绑定(bind)参数,然后将相应的 IDbDataParameter 对象附加到命令并执行;该组件知道它必须绑定(bind)的参数的类型。这很有效,直到调用代码提供的参数集大于数据库愿意接受的参数集。这里的目标是通过 ODP.NET 获得如此大的数据集来处理针对 Oracle 11gR2 的查询。
由于以下方法被那些设定要求的人认为是 Not Acceptable ,因此这项任务有些复杂:
CREATE TYPE
的东西这个问题的解决方案不需要只执行一个查询。
我正在尝试通过使用从其他地方获取的代码将子句绑定(bind)为一个数组来完成这项工作:
IList<string> values;
//...
OracleParameter parameter = new OracleParameter();
parameter.ParameterName = "parm";
parameter.DbType = DbType.String;
parameter.Value = values.ToArray();
int[] sizes = new int[values.Count];
for (int index = 0; index < values.Count; index++)
{
sizes[index] = values[index].Length;
}
parameter.ArrayBindSize = sizes;
//...
命令随后执行而没有抛出异常,但 COUNT 返回的值为零(与预期值相比,在 SQLDeveloper 中使用返回相同参数集的嵌套 SELECT
运行查询) .到目前为止,浏览 ODP.NET 文档并没有带来任何乐趣。
这方面的问题是:
(我知道这类似于 this (unanswered) question ,但该场景并未提及对方法有相同的限制。)
最佳答案
好吧,既然不允许使用全局临时表,那么至少可以创建普通表吗?如果是这样,这里有一个方法:
使用以下命令文本创建一个 OracleCommand 对象:
@"BEGIN
CREATE TABLE {inListTableName}
(
inValue {dbDataType}
)
INSERT INTO {inListTableName}(inValue) VALUES(:inValue);
END"
将命令对象上的 ArrayBindCount 设置为您在列表中需要的项目数。
将 {inListTableName}
替换为 Guid.NewGuid().ToString()
。
将 {dbDataType}
替换为您要在 in 子句中使用的值列表的正确 oracle 数据类型。
将一个 OracleParameter 添加到名为“inValue”的 OracleCommand,并将该参数的值设置为一个数组,该数组包含您希望在 in 子句中使用的值。如果您有哈希集(我建议使用它来避免发送不必要的重复项),请在其上使用 .ToArray()
来获取数组。
执行这个命令。这是您的准备命令。
然后使用以下 sql 片段作为 select sql 语句中 in 子句的值部分:(SELECT {inListTableName}.inValue FROM {inListTableName})
例如:
SELECT FirstName, LastName FROM Users WHERE UserId IN (SELECT {inListTableName}.inValue FROM {inListTableName});
执行此命令以获取读取器。
最后,使用以下命令文本的另一个命令:
DROP TABLE {inListTableName};
这是您的清理命令。执行这个命令。
您可能想要创建一个备用模式/用户来创建 inListTable
,以便您可以向您的用户授予适当的权限,以便仅在该模式中创建表。
所有这些都可以封装在具有以下接口(interface)的可重用类中:
public interface IInListOperation
{
void TransmitValueList(OracleConnection connection);
string GetInListSQLSnippet();
void RemoveValueList();
}
TransmitValueList
将创建您的准备命令,添加参数并执行准备命令。
GetInListSQLSnippet
只会返回 (SELECT {inListTableName}.inValue FROM {inListTableName});
RemoveValueList
清理。
此类的构造函数将采用值列表和 oracle db 数据类型,并生成 inListTableName
。
如果您可以使用全局临时表,我建议您不要创建和删除表。
编辑:我想补充一点,如果您有涉及 NOT IN
列表或其他不等运算符的子句,这种方法很有效。以下面的例子:
SELECT FirstName, LastName FROM Users WHERE Status == 'ACTIVE' OR UserID NOT IN (1,2,3,4,5,6,7,8,9,10);
如果您使用拆分 NOT IN
部分的方法,您最终会得到无效的结果。以下除 UserIds 1-10 之外的所有用户将返回所有用户,而不是所有用户。
SELECT FirstName, LastName FROM Users WHERE UserID NOT IN (1,2,3,4,5)
UNION
SELECT FirstName, LastName FROM Users WHERE UserID NOT IN (6,7,8,9,10);
关于C#/ODP.NET : large IN clause workaround,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25401787/
出于某种原因,有两个 div带有 ID 的“cye-workaround-body”和“cye-workaround-body-image”,它们被添加到 下面一些网站,它在页脚下方创建了一个大空间
我已经有了一个解决方案,但只适用于 JavaScript。不幸的是,Twig 中不存在 while 循环。 我在 JavaScript 中的 Twig-target: var x = 10; // t
由于 Play 模板层缺乏泛型支持,因此遇到了 catch 22 的情况。 我有几个购物车屏幕,它们都需要一个用户和一个付款 + 可选的自定义字段。 case class Conference(
我正在阅读一篇关于“Scott Meyers 的双重检查锁定的危险”的论文。 http://www.aristeia.com/Papers/DDJ_Jul_Aug_2004_revised.pdf 作
following example适用于 Firefox 4,但不适用于 Internet Explorer 8: HTML: A B C CSS: div:not(.first) { col
我正在使用 markdonw v2,rmarkdown包裹。在整个 .Rmd 文件中,我创建了指向网站或图像的链接 [Link1][pathLink1] ![Image1][pathImage1] 然
众所周知,在 C 中作为参数传递时,数组会退化为指针。但是数组的数组只会退化为数组的指针;因此,如果我们将原始数组本身包含在一个数组中,我们可以在将封闭数组传递给函数后检索原始数组长度。这是一个测试这
使用Python watchdog文件系统事件监视库我注意到,在 Windows Server 2003 下使用时,它会进入“轮询模式”,从而停止使用异步操作系统通知,因此,在大量文件更改下会严重降低
是否有任何 IE 的变通方法使我能够使用 border-image?我正在开发一个网站,它在除 IE 之外的所有浏览器中都能正常工作。我需要模仿这些酒吧 我可以使用 ie-css3.htc hack
这是我的场景:我有一系列 Activity .我对那些 Activity 设置了超时这将断开用户的连接,以防它暂时处于非 Activity 状态。但我想将用户重定向到最后一个屏幕,以防他登录 当我断开
目前,我的主要网站上有 50 多个微型网站。也就是说,我有一个主要的顶级域,并且在该域的子文件夹中有 50 多个微型站点(并且还在不断增长)。 以前,我为单独的微型站点(不同的 GA 跟踪 ID)使用
好的,所以这个问题主要与:有没有更好的方法来做到这一点? 我有一个电话簿应用程序,您可以向其中添加用户、删除用户等,并且为每个人分配一个不同的 ID#。 Person 类将 lastIDused 存储
当 float 元素有边距时,我遇到了 WebKit 渲染 float 元素宽度的错误。 以下呈现在 Firefox (3.6) 和 WebKit (Chromium 5.0) 中的预期效果:
我在 iframe 外部有一个可拖动的东西,在其中有一个可放置的目标。在这里,我将 iframe 显示为包含由其 src 属性加载的 HTML 片段。 我使
考虑 3 个表 - Student(Id INT NOT NULL PRIMARY KEY, Name VARCHAR(100)); Test(Id INT NOT NULL PRIMARY KEY,
我发现 LESS 有一个有问题的 JavaScript 求值器,至少我使用它的方式是这样,即在将 *.less 文件上传到 Web 服务器之前在客户端将它们编译成 *.css。 我知道编译可能更经常在
有这个 where 子句: 第一个和第二个占位符?可以有值: 1 || NULL 第三个占位符是动态添加的(数组) IF(ISNULL(?),1,xy.id) IN (IF(ISNULL(?
我试图仅在页面投影到墙上时(通过投影仪,当有人进行演示时)才将样式应用于页面。目前,我只能在全屏模式下在 Opera 中获得它。 有没有办法让@media projection在其他浏览器中生效?另外
所以我正在尝试将动画 CSS 放入电子邮件签名中。我让它在 iOS/Mac 电子邮件客户端中工作,但 Gmail 和 Outlook 似乎阻止了部分代码。有没有人知道解决方法? 我现在在电子邮件中使用
我目前在 chrome 中使用伪选择器 :focus-within 但是根据 caniuse.com它在 Edge 和 IE 中不可用,我找到了一个巧妙的解决方法: .focus-within-cla
我是一名优秀的程序员,十分优秀!