【发布时间】:2012-02-27 19:38:54
【问题描述】:
我有一个 Oracle 9 数据库,我的 Delphi 2006 应用程序使用类似这样的 SQL 语句将数据读取到 TSimpleDataSet(实际上它当然更复杂):
select * from myschema.mytable where ID in (1, 2, 4)
我的应用程序在一天中经常启动并执行此查询,每次在 in 子句中使用不同的值。
我的 DBA 通知我,这会在数据库服务器上造成过多的负载,因为每次运行都会重新解析查询。他们建议使用bind variables,而不是在客户端构建SQL语句。
我熟悉在 Delphi 中使用参数化查询,但从上面链接的文章中,我感觉绑定变量并不完全是什么。此外,我需要这些准备好的语句才能在应用程序的不同运行中工作。
有没有办法在数据库中准备一个包含in 子句的语句,然后使用从TSimpleDataSet 传入的不同参数执行它,这样每次我的应用程序运行时都不需要重新解析它跑吗?
【问题讨论】:
-
你确定你真的需要使用 TSimpleDataSet 或 dbExpress 吗?看来如果性能很重要,也许您应该切换到纯 Oracle 数据库组件并放弃 dbExpress 和 TSimpleDataSet?
-
@WarrenP 如果可能的话,我想留在 dbExpress,因为我围绕它构建了一大堆其他组件。不过,出于好奇,您想到了哪些仅适用于 Oracle 的原生数据库组件?
-
商业和高性能:devart.com/odac
-
商业,我强烈推荐Direct Oracle Access。