如何在SQL查询中选择静态字符串并确保其类型为VARCHAR2?

如何在SQL查询中选择静态字符串并确保其类型为VARCHAR2?,sql,oracle,plsql,Sql,Oracle,Plsql,我有一个在远程数据库上执行的查询: select /*+ DRIVING_SITE(rd) */ 'test' as tst, rd.id from mytable@remotedb rd 执行此查询时,我得到: ORA-22992: cannot use LOB locators selected from remote tables mytable@remotedb是INTEGER或VARCHAR2 如果我将'test'作为tst删除,则没有问题,因此静态字符串'test'似乎以某种方式

我有一个在远程数据库上执行的查询:

select /*+ DRIVING_SITE(rd) */ 'test' as tst, rd.id from mytable@remotedb rd
执行此查询时,我得到:

ORA-22992: cannot use LOB locators selected from remote tables
mytable@remotedb
INTEGER
VARCHAR2

如果我将
'test'作为tst删除,则没有问题,因此静态字符串
'test'
似乎以某种方式被格式化为
CLOB
,而不是我假设的
VARCHAR2


我需要将其强制转换为
VARCHAR2
?这似乎很奇怪。。。是否有更好的方法在查询中创建静态返回字符串,以确保它们是
VARCHAR2

不确定,但我注意到查询从远程表中选择了“mt.id”,但远程表的别名是“rd”

请尝试以下操作:

select /*+ DRIVING_SITE(rd) */ 'test' as tst, rd.id from mytable@remotedb rd

我希望这会有所帮助。

我怀疑该错误与LOB无关,我怀疑您是对的,这是一个Oracle错误。尝试解决方法(即用较旧的Oracle语法替换ANSI语法),如果有效,在升级数据库之前,这可能是您必须忍受的。

每个Oracle实例的版本是什么?@OMG Ponies:10.2.0.4.0/64位用于两个数据库。@OMG Ponies:charset不同,但是:本地使用US7ASCII,远程数据库使用WE8ISO8859P1。这个问题我无法解决,但通过谷歌搜索我发现错误发生在与不匹配版本相关的语法问题上。其中一个谷歌搜索结果:-可能尝试一些想法-例如,在表或视图上使用同义词;在字符串周围加上_CHAR()怎么样?@RenderIn-有点这样认为,但觉得值得一提。FWIW,我运行了一个大致相当的测试,发现在11G下没有报告任何问题。Oracle语法修复了它,但这不是一个很好的景象。由于我的数据与远程数据库中的数据紧密相连,我决定将所有数据迁移到远程数据库中。