oracle如何让表名不区分大小写 oracle如何让表名不区分大小写? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Oracle 表名不来就不区分大小写呀?不知道楼主想表达的是什么意思? 查询的时候,from 肯定是要大小写的区别的! SQL> create table D(id number);表已创建。SQL> create table d(id number);create table d(id number) *第 1 行出现错误:ORA-00955: 名称已由现有对象使用SQL> insert into D values(1);已创建 1 行。SQL> insert into d values(1);已创建 1 行。SQL> select * from D; ID---------- 1 1SQL> select * from d; ID---------- 1 1SQL> SQL 大写是为了提高效率, 在硬解析的时候, Oracle 会先把SQL 全部转换成大写。 如果写成了大写,就会省略这一步。 http://hi.csdn.net/link.php?url=http://blog.csdn.net%2Fwh62592855楼主看看这个吧看了你就什么都明白了 访问不了,你要单独把文章的链接靠过来不要前面的http://hi.csdn.net/link.php?url= 有这样一部吗?把sql都转成大写? http://topic.csdn.net/u/20091028/12/1279c360-33fa-43d0-bba3-a0971870549f.html?57302你问的另一个问题,和这个是一致的,对于Oracle的对象名,都是不区分大小写的,除非建立的时候加了" 上次看书是这么说的,难道记错了?还望inthirties 指点. 共同讨论下.. 啊!!!!!那看来我以前给的所有链接都是错了的……http://blog.csdn.net/wh62592855/archive/2009/09/24/4589068.aspx oracle的对象默认是不分大小写的 没有看过,不过对于sql的硬解析,是完全区分sql的写法的。也就是大小写不一样的完全相同的sql是被当作不同的sql来解析的。所以在sqlarea和sql的动态视图里这样的sql是不会作为一条的。 既然是这样的,那么这一步是多余的,不过在硬解析的过程,进行语法和词法分析,然后在数据字典里检查涉及到的对象和列的有效,这个过程会根据你这里的对象名和列名来查找, 接着进行一些转换,判断权限,产生exe plan,一切OK,放入share pool 放入时把sql转成ascii码 计算hash值。这是我的理解,所以这里传成大些的话,就会有一样的hash值,也就只有一条了,但是大小写不一致 却会在解析一次,所以推断没有这个过程。如果可以的话,把你看到的资料再查一查,也许有什么上下文的。 http://blog.csdn.net/wh62592855/archive/2009/10/19/4696880.aspx以前上网搜过一些关于硬解析和软解析方面的资料有兴趣可以看看 本来就不分的呀?。要是想在查询字典表时,where子句中不分的话,就在where子名中"="两边都用upper()就好了 ----正解,加一句:若楼主要让表名区分大小写的话,在创建表名时就用双引号,比如:create table "myTb"(Id number(4,0), name varchar2(20));select * from myTb; --选择会出错:没有此表....select * from "myTb"; --正确! 如果不区分的话, 我在vb语言中调用一条sql语句时怎么就区分大小写呢?例如: 在vb中使用 MyDB.OpenRecordset(“select * from table_a”, dbOpenSnapshot) 运行出现异常,但是如果sql中用大写的表明就可以了 谢inthirties... 我要复习下看过的知识了.. ----正解,加一句:若楼主要让表名区分大小写的话,在创建表名时就用双引号,比如: create table "myTb"(Id number(4,0), name varchar2(20)); select * from myTb; --选择会出错:没有此表.... select * from "myTb"; --正确!20楼的老兄,能够解释一下这是为什么吗?我以前也遇到过这个问题。你上面说的是对的,但为什么我在查数据字典(select * from tab;)时,其里边的表名是myTb而不是“myTb”呀?? 找到了以前看的资料了, SQL 语句优化里面的:因为oracle总是先解析sql语句,把小写的字母转换成大写的再执行google 下会找到很多类似的文章.. 不知道这个转化过程是在哪个阶段完成的?先把这个贴收藏下.. Oracle对此sql将进行几个步骤的处理过程: 1、语法检查(syntax check) 检查此sql的拼写是否语法。 2、语义检查(semantic check) 诸如检查sql语句中的访问对象是否存在及该用户是否具备相应的权限。 3、对sql语句进行解析(prase) 利用内部算法对sql进行解析,生成解析树(parse tree)及执行计划(execution plan)。 4、执行sql,返回结果(execute and return) 其中,软、硬解析就发生在第三个过程里。所以对与把小写的字母转换成大写的再执行的说法,疑惑中.... 我觉得,这里是说对了一步,都用大写,是一种规范,这样的话,至少避免了大小写区分的sql的重复解析,对于这样的情况,避免了多余的一次hard parse,确是对性能有帮助,但是对于sql解析的都转成大写,这里倒是无处考究的。你可以自己做做实验,看看sqlarea和sql视图就知道叻。 我觉得应该没有自动转换这个说法吧。不然ORACLE为什么还要推荐在书写同样的SQL语句时尽量保持大小写一致,这样就避免重复解析。如果有小写自动都转为大写的话,就不存在上面这条建议了。而且我记得学习优化的时候有一条就是说“即便是内容相同,大小写不同的的同一条SQL语句,它也是需要被重新解析的”。当时好像还说有个什么参数可以设定这个等级的,也就是说你可以让ORACLE不区分大小写,只要两条语句内容完全一样,就不需要重新解析。 TO 戴明明同学:我觉得你引用的那段话是不是指的是对象名呀比如说select * from dept;select * from DePt;这两条语句查询结果都一样因为ORACLE在内部存储的表名是大写DEPT,这个时候会自动进行转换。可是至于解析嘛……说不明还是要重新解析一次的个人观点哦 呵呵 代码问题 sql的函数DateDiff.Oracle是哪个呀? 求oracle10g for unixware oracle 学习怎么深入 准备学习oracle了,散点分,也想听听前辈的经验 不用exp/imp,如何导入异出包含clog,blog类型字段的表? 菜鸟混在鸡年,问几个问题给大家拜年 OracleOraHome8lManagementServer服务怎么启动不了? (在线等)请问在ORACLE中怎样定义数组,定义后怎样给数组附值? 关于动态sql4(proc)的问题 oracle恢复到另一台server spool 导出数据导出数据的问题
Oracle 表名不来就不区分大小写呀?
不知道楼主想表达的是什么意思?
SQL> create table D(id number);表已创建。SQL> create table d(id number);
create table d(id number)
*
第 1 行出现错误:
ORA-00955: 名称已由现有对象使用
SQL> insert into D values(1);已创建 1 行。SQL> insert into d values(1);已创建 1 行。
SQL> select * from D; ID
----------
1
1SQL> select * from d; ID
----------
1
1SQL>
SQL 大写是为了提高效率, 在硬解析的时候, Oracle 会先把SQL 全部转换成大写。 如果写成了大写,就会省略这一步。
看了你就什么都明白了
访问不了,你要单独把文章的链接靠过来不要前面的http://hi.csdn.net/link.php?url=
有这样一部吗?把sql都转成大写?
上次看书是这么说的,难道记错了?还望inthirties 指点. 共同讨论下..
那看来我以前给的所有链接都是错了的……http://blog.csdn.net/wh62592855/archive/2009/09/24/4589068.aspx
没有看过,不过对于sql的硬解析,是完全区分sql的写法的。也就是大小写不一样的完全相同的sql是被当作不同的sql来解析的。所以在sqlarea和sql的动态视图里这样的sql是不会作为一条的。 既然是这样的,那么这一步是多余的,不过在硬解析的过程,进行语法和词法分析,然后在数据字典里检查涉及到的对象和列的有效,这个过程会根据你这里的对象名和列名来查找, 接着进行一些转换,判断权限,产生exe plan,一切OK,放入share pool 放入时把sql转成ascii码 计算hash值。这是我的理解,所以这里传成大些的话,就会有一样的hash值,也就只有一条了,但是大小写不一致 却会在解析一次,所以推断没有这个过程。如果可以的话,把你看到的资料再查一查,也许有什么上下文的。
http://blog.csdn.net/wh62592855/archive/2009/10/19/4696880.aspx
以前上网搜过一些关于硬解析和软解析方面的资料
有兴趣可以看看
要是想在查询字典表时,where子句中不分的话,就在where子名中"="两边都用upper()就好了
----正解,加一句:若楼主要让表名区分大小写的话,在创建表名时就用双引号,比如:
create table "myTb"(Id number(4,0), name varchar2(20));select * from myTb; --选择会出错:没有此表....
select * from "myTb"; --正确!
在vb中使用
MyDB.OpenRecordset(“select * from table_a”, dbOpenSnapshot)
运行出现异常,
但是如果sql中用大写的表明就可以了
谢inthirties... 我要复习下看过的知识了..
create table "myTb"(Id number(4,0), name varchar2(20)); select * from myTb; --选择会出错:没有此表....
select * from "myTb"; --正确!
20楼的老兄,能够解释一下这是为什么吗?我以前也遇到过这个问题。
你上面说的是对的,但为什么我在查数据字典(select * from tab;)时,其里边的表名是myTb而不是“myTb”呀??
找到了以前看的资料了, SQL 语句优化里面的:因为oracle总是先解析sql语句,把小写的字母转换成大写的再执行google 下会找到很多类似的文章.. 不知道这个转化过程是在哪个阶段完成的?先把这个贴收藏下..
Oracle对此sql将进行几个步骤的处理过程:
1、语法检查(syntax check)
检查此sql的拼写是否语法。
2、语义检查(semantic check)
诸如检查sql语句中的访问对象是否存在及该用户是否具备相应的权限。
3、对sql语句进行解析(prase)
利用内部算法对sql进行解析,生成解析树(parse tree)及执行计划(execution plan)。
4、执行sql,返回结果(execute and return)
其中,软、硬解析就发生在第三个过程里。所以对与把小写的字母转换成大写的再执行的说法,疑惑中....
我觉得,这里是说对了一步,都用大写,是一种规范,这样的话,至少避免了大小写区分的sql的重复解析,对于这样的情况,避免了多余的一次hard parse,确是对性能有帮助,但是对于sql解析的都转成大写,这里倒是无处考究的。你可以自己做做实验,看看sqlarea和sql视图就知道叻。
如果有小写自动都转为大写的话,就不存在上面这条建议了。而且我记得学习优化的时候有一条就是说“即便是内容相同,大小写不同的的同一条SQL语句,它也是需要被重新解析的”。当时好像还说有个什么参数可以设定这个等级的,也就是说你可以让ORACLE不区分大小写,只要两条语句内容完全一样,就不需要重新解析。
比如说
select * from dept;
select * from DePt;
这两条语句查询结果都一样
因为ORACLE在内部存储的表名是大写DEPT,这个时候会自动进行转换。
可是至于解析嘛……说不明还是要重新解析一次的个人观点哦 呵呵