64位oracle不支持多层嵌套子查询???!!!

lxh_1763 2011-02-23 11:56:42
select (select b.字段 from
(select 字段 from 表1 where 表1.列 = 表2.列) b
) c
from 表2 ;

这种sql在32位的oracle里面执行没有问题,在64位就报 表2.列 不存在,这玩意咋解决啊...

不能执行的环境:
windowsserver2008
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bi


可以执行的环境:
windowsserver2003
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
...全文
904 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
lxh_1763 2011-02-26
  • 打赏
  • 举报
回复
还是改sql算了,向ANSI SQL 标准看齐。
oracle用起来确实没有sqlserver方便。
顺带发现一个问题:从9i开始就号称面向对象,那么如何定义表类型?sqlserver有表值函数,在oracle实现时就只能拐个弯,用类型数组的方式来实现(虽然定类的时候关键字还是table,但其实只能按数组的语法去编辑数据),这点看来实在是有点伪面向对象了。
还有一点就是oracle的临时表实在是没有sqlserver的临时表用起来方便,临时表不能直接在代码中进行定义结构(动态创建是可以,可惜返回的时候如果是基于事务的,代码一结束就销毁了,客户端无法接收;基于连接的就实在是无法控制在多个不同对象中的临时表名称),必须先行定义。转到不同DB的时候工作量实在是太大,真不知道那些支持多DB的软件是怎么弄的,可能是人多力量大吧。
一点小看法,拍砖的尽管拍,不怕人批评,就怕高手们不出声。
谢谢楼上的诸位了,之前说好的,下午结贴。
quanhj 2011-02-25
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 lxh_1763 的回复:]
引用 21 楼 quanhj 的回复:
我的是windows 2008 server(64) R2+ oracle11.1.0.7.0 可以执行多层嵌套呀。

这位仁兄,我的报如下错误:
正在检查操作系统要求...
要求的结果: 5.0,5.1,5.2,6.0 之一
实际结果: 6.1
检查完成。此次检查的总体结果为: 失败 <<<<
问题: Oracle Database 11g……
[/Quote]


我是选择的强制性安装,目前为止 还没有发现有什么问题。
oracle_dba_11 2011-02-25
  • 打赏
  • 举报
回复
我很多同事都是64位的,也没发现这种问题啊。你换个环境试试
lxh_1763 2011-02-25
  • 打赏
  • 举报
回复
这个。。。这样吧,我给个测试语句。

最新测试结果表示 win64_11gR2_database_1of211.2.0.1.0 也不支持2层以上.
给大伙一个测试语句:
select (select * from (select a.dummy from dual a where a.dummy = dual.dummy)) from dual;
有环境的麻烦帮忙测试下哪些个64位的版本能支持,麻烦将操作系统版本和oracle版本报上来,报小版本号.

目前只发现32位下oracle10.2.0.1.0_x32可以;还有一位仁兄说
windows 2008 server(64) R2+ oracle11.1.0.7.0 也可以,但估计其操作系统版本肯定在6.1以下.
sy_ivysunlenovo 2011-02-25
  • 打赏
  • 举报
回复
[Quote=引用楼主 lxh_1763 的回复:]
select (select b.字段 from

(select 字段 from 表1 where 表1.列 = 表2.列) b
) c
from 表2 ;
[/Quote]
兄弟 ,最后面的 from 表2 错了吧
SELECT * 
FROM (
SELECT B.VALUE
FROM (
SELECT *
FROM (
WITH
TAB1 AS
(SELECT 'A' ID,'DKJSALK' NAME FROM DUAL UNION ALL
SELECT 'B' ID,'TERSDSK' NAME FROM DUAL UNION ALL
SELECT 'C' ID,'ERSDSDS' NAME FROM DUAL),
TAB2 AS
(SELECT 'A' ID,2322 VALUE FROM DUAL UNION ALL
SELECT 'A' ID,8980 VALUE FROM DUAL)
SELECT TAB2.*,
TAB1.NAME
FROM TAB1,TAB2
WHERE TAB1.ID = TAB2.ID)
) B
) C
lxh_1763 2011-02-25
  • 打赏
  • 举报
回复
windows 2008 server(64) R2(6.0,6.1) 版本上,能装上的oracle10g以上版本,包括10.2.0.4\10.2.0.3\11.1.0.7.0\11.2 都不能执行
select (select * from (select a.dummy from dual a where a.dummy = dual.dummy)) from dual;

且windows 2008 server(64) R2(6.0,6.1) 无论装哪个10g以上版本,都无法成功安装EM,提示EM配置失败,需手工配置,服务里面也没这个服务,很是崩溃.
书到用时方恨少啊...
quanhj 2011-02-24
  • 打赏
  • 举报
回复
我的是windows 2008 server(64) R2+ oracle11.1.0.7.0 可以执行多层嵌套呀。
lxh_1763 2011-02-24
  • 打赏
  • 举报
回复
我试试装个64位的10.2.0.1.0试下看,我在windowsserver8上装10.2.0.4.0是肯定不行的,不管是客户端32位sqlplus还是服务端64位sqlplus执行都会报无效列名。谢谢各位了,反正咱们也不能要求别人改,只有自己想办法适应了。
xman_78tom:ANSI SQL 标准不管是哪个版本都不支持 sql 语句中子查询引用表名进行多层嵌套吗?那我个人认为这个标准不够好,sqlserver改得好!

谢谢,这个贴再挂两天,供大家讨论一下,周六结贴。谢谢各位!
yanran_hill 2011-02-24
  • 打赏
  • 举报
回复
我的机器是windows7 X64+oracle_10.2.0.4 X64,运行也没有问题,虽然我也安装了32位的客户端,不过我启动的是64位的sqlplus

Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> select (select (select ID from city_code a where a.id=b.city_id ) from rep_
statusmsg b where b.city_id=c.id)
2 from city_code c ;

(SELECT(SELECTIDFROMCITY_CODEAWHEREA.ID=B.CITY_ID)FROMREP_STATUSMSGBWHEREB.CITY_

--------------------------------------------------------------------------------

1

2

3


SQL>
lxh_1763 2011-02-24
  • 打赏
  • 举报
回复
不支持windows2008 6.1版本7200的oracle版本有:
10203_vista_w2k8_x86_production_db;
102010_win64_x64_database;
oracle10.2.0.1.0_x32;
win64_11gR1_database_111070;

两个32位的纯属测测,别拍砖.
迷失的空间 2011-02-24
  • 打赏
  • 举报
回复
学习了,居然有这样的问题。。。。
lxh_1763 2011-02-24
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 quanhj 的回复:]
我的是windows 2008 server(64) R2+ oracle11.1.0.7.0 可以执行多层嵌套呀。
[/Quote]
这位仁兄,我的报如下错误:
正在检查操作系统要求...
要求的结果: 5.0,5.1,5.2,6.0 之一
实际结果: 6.1
检查完成。此次检查的总体结果为: 失败 <<<<
问题: Oracle Database 11g 未在当前操作系统中经过认证。
建议案: 确保在正确的平台上安装软件。

原来服务器是6.1版本7200. 我晕死啊,10g10.2.0.1.0也只支持6.0以下,oracle11.1.0.7.0也一样.我咋样才能使用这个oracle所谓的bug呢?
lxh_1763 2011-02-24
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 quanhj 的回复:]
我的是windows 2008 server(64) R2+ oracle11.1.0.7.0 可以执行多层嵌套呀。
[/Quote]

确定?两层及以上嵌套引用表名没有问题?那我去下载个去.刚试试64位的10g10.2.0.1.0,报未通过检测,无法安装.
lxh_1763 2011-02-23
  • 打赏
  • 举报
回复
嘿嘿,1楼又是你啊,谢谢你了,才帮我解决了一个问题.
这个问题真是存在,一层嵌套
select (select 字段 from 表1 where 表1.列 = 表2.列) b from 表2 ;
没有问题,两层就不行了.真是很痛苦.
minitoy 2011-02-23
  • 打赏
  • 举报
回复
不会吧
hezhanyan 2011-02-23
  • 打赏
  • 举报
回复
应该不会有这个问题,执行报什么错误吗,还是执行完毕没有反应
xman_78tom 2011-02-23
  • 打赏
  • 举报
回复
原自 ANSI SQL 标准

微软向来是标准终结者:)
lxh_1763 2011-02-23
  • 打赏
  • 举报
回复
不晓得为啥要认为其是个BUG?原因何在?sqlserver反正是支持这样。
碧水幽幽泉 2011-02-23
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 xman_78tom 的回复:]
根据 oracle 给出的解释,sql 语句中子查询引用表名只允许一层嵌套。两层的是个 bug。
http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:1853075500346799932#1859169400346361423
[/Quote]
sql 语句中子查询引用表名只允许一层嵌套。两层的是个 bug。
lxh_1763 2011-02-23
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 xman_78tom 的回复:]
根据 oracle 给出的解释,sql 语句中子查询引用表名只允许一层嵌套。两层的是个 bug。
http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:1853075500346799932#1859169400346361423
[/Quote]
擦,这个特性我实在是很喜欢啊,而且也不明白会引起oracle啥地方不适,为啥要把这种写法看成是bug,逼着多做视图么?
加载更多回复(8)

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧