oracle如何让表名不区分大小写?
解决方案 »
- 用 Enterprise manager consle 无法建表??
- 请帮我看一下,这样的批量更新为什么就不行呢?
- 高分求一个组合问题
- 联合查询问题,请高手帮忙!(急)
- 奇怪,简单的格式化命令怎么出现这样的结果? column empno format a10,全格式化成##########了?!咋回事
- 表里面有几千条带扣的字符串需要将扣去掉。
- 如何实现SQL:同时实现sum()和条件count()语句?分组对组内所有数据求和,同时显示组内的符合条件的记录数
- xp中安装oracle9i的时候出现问题
- 再请教union 与 order by的问题。谢谢
- 建立的远程数据连接为什么不能用
- 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,这个时候会自动进行转换。
可是至于解析嘛……说不明还是要重新解析一次的个人观点哦 呵呵