Oracle缺少表达式,其中where - 查询由SqlProvider生成

问题描述 投票:1回答:2

我正在尝试查询连接速度非常慢的Oracle数据库,并且fzxswpoi表中的表的行数非常高。为了我的目的,我必须使用SqlDataProvider,因此并非所有行都在内存中。

问题是,当我添加IQueryable的where子句时,它会生成一个格式错误的选择。这是扔query

我在MSSQL中尝试了同样的事情,它只是起作用。

'ORA-00936: missing expression'

安装细节:

.NET Framework 4.7.1

<package id =“FSharp.Core”version =“4.6.2”targetFramework =“net471”/> <package id =“FSharp.Data”version =“3.0.1”targetFramework =“net471”/> <package id =“SQLProvider”version =“1.1.50”targetFramework =“net471”/> <package id =“System.ValueTuple”version =“4.4.0”targetFramework =“net471”/>

type sql = SqlDataProvider<Common.DatabaseProviderTypes.ORACLE, "Data Source=localhost;PASSWORD=somePassword;USER ID=someUserId", ResolutionPath="C:\\Program Files (x86)\\Oracle Developer Tools for VS2017\\odp.net\\managed\\common\\"> let ctx = sql.GetDataContext() type OrderDTO = { Id: decimal; SomeColumn: string } [<EntryPoint>] let main _ = let someList = query { for order in ctx.Scheme.Tablea do // remove the where and it's working where (order.Id = 2M) take 1 select { Id = order.Id; SomeColumn = order.SomeColumn } } // missing expression thrown next line let firstItem = someList |> Seq.head printfn "%A" firstItem 0 // return an integer exit code ,安装了VS 2017 18.3.0.0的ODAC。

Oracle版本:

Oracle Database 11g快捷版11.2.0.2.0版 - 64位生产 PL / SQL版本11.2.0.2.0 - 生产 核心11.2.0.2.0生产 适用于64位Windows的TNS:版本11.2.0.2.0 - 生产 NLSRTL版本11.2.0.2.0 - 生产

表定义:

CREATE TABLE“SCHEME”。“TABLEA” (“ID”NUMBER(*,0), “SOME_COLUMN”VARCHAR2(20 BYTE), “SOME_COLUMN2”VARCHAR2(20 BYTE) )

我怎样才能解决问题?生成的查询如下:

"C:\Program Files (x86)\Oracle Developer Tools for VS2017"

oracle f# type-providers
2个回答
1
投票

要调试查询,请挂钩SqlQueryEvent。这是我用过的一些代码:

select * from (SELECT order.ID as "ID",order.SOME_COLUMN as "SOME_COLUMN" FROM SCHEME.TABLEA order WHERE ((order.ID = :param1))) where ROWNUM <= 1 -- params :param1 - 2M;

如果您的查询适用于SQL Server,而不适用于Oracle,则很有可能是一个错误。当我在一段时间之前使用SQLProvider进行一些Access查询时,我在生成的查询中发现了错误。我修复了它们并提交了PR--这实际上非常容易。


0
投票

该问题与以下问题有关:let logSqlEvent eventData = eventData |> sprintf "Executing SQL: %O" |> Debug.WriteLine QueryEvents.SqlQueryEvent |> Event.add logSqlEvent

我在查询中使用了order关键字。看似问题是因为生成的查询包含一个注释,在分号出现之后,但这不是问题。

© www.soinside.com 2019 - 2024. All rights reserved.