oracle如何让表名不区分大小写?

解决方案 »

  1.   


    Oracle 表名不来就不区分大小写呀?
    不知道楼主想表达的是什么意思?
      

  2.   

    查询的时候,from 肯定是要大小写的区别的!
      

  3.   


    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>
      

  4.   


    SQL 大写是为了提高效率, 在硬解析的时候, Oracle 会先把SQL 全部转换成大写。 如果写成了大写,就会省略这一步。 
      

  5.   

    http://hi.csdn.net/link.php?url=http://blog.csdn.net%2Fwh62592855楼主看看这个吧
    看了你就什么都明白了
      

  6.   


    访问不了,你要单独把文章的链接靠过来不要前面的http://hi.csdn.net/link.php?url=
      

  7.   


    有这样一部吗?把sql都转成大写?
      

  8.   

    http://topic.csdn.net/u/20091028/12/1279c360-33fa-43d0-bba3-a0971870549f.html?57302你问的另一个问题,和这个是一致的,对于Oracle的对象名,都是不区分大小写的,除非建立的时候加了"
      

  9.   


    上次看书是这么说的,难道记错了?还望inthirties 指点. 共同讨论下..
      

  10.   

    啊!!!!!
    那看来我以前给的所有链接都是错了的……http://blog.csdn.net/wh62592855/archive/2009/09/24/4589068.aspx
      

  11.   

    oracle的对象默认是不分大小写的
      

  12.   


    没有看过,不过对于sql的硬解析,是完全区分sql的写法的。也就是大小写不一样的完全相同的sql是被当作不同的sql来解析的。所以在sqlarea和sql的动态视图里这样的sql是不会作为一条的。 既然是这样的,那么这一步是多余的,不过在硬解析的过程,进行语法和词法分析,然后在数据字典里检查涉及到的对象和列的有效,这个过程会根据你这里的对象名和列名来查找, 接着进行一些转换,判断权限,产生exe plan,一切OK,放入share pool 放入时把sql转成ascii码 计算hash值。这是我的理解,所以这里传成大些的话,就会有一样的hash值,也就只有一条了,但是大小写不一致 却会在解析一次,所以推断没有这个过程。如果可以的话,把你看到的资料再查一查,也许有什么上下文的。
      

  13.   


    http://blog.csdn.net/wh62592855/archive/2009/10/19/4696880.aspx
    以前上网搜过一些关于硬解析和软解析方面的资料
    有兴趣可以看看
      

  14.   

    本来就不分的呀?。
    要是想在查询字典表时,where子句中不分的话,就在where子名中"="两边都用upper()就好了
      

  15.   


    ----正解,加一句:若楼主要让表名区分大小写的话,在创建表名时就用双引号,比如:
    create table "myTb"(Id number(4,0), name varchar2(20));select * from myTb; --选择会出错:没有此表....
    select * from "myTb"; --正确!
      

  16.   

    如果不区分的话, 我在vb语言中调用一条sql语句时怎么就区分大小写呢?例如:
       在vb中使用
        MyDB.OpenRecordset(“select * from table_a”, dbOpenSnapshot)
       运行出现异常,
    但是如果sql中用大写的表明就可以了
      

  17.   


    谢inthirties... 我要复习下看过的知识了..
      

  18.   

    ----正解,加一句:若楼主要让表名区分大小写的话,在创建表名时就用双引号,比如: 
    create table "myTb"(Id number(4,0), name varchar2(20)); select * from myTb; --选择会出错:没有此表.... 
    select * from "myTb"; --正确!
    20楼的老兄,能够解释一下这是为什么吗?我以前也遇到过这个问题。
    你上面说的是对的,但为什么我在查数据字典(select * from tab;)时,其里边的表名是myTb而不是“myTb”呀??
      

  19.   


    找到了以前看的资料了, SQL 语句优化里面的:因为oracle总是先解析sql语句,把小写的字母转换成大写的再执行google 下会找到很多类似的文章.. 不知道这个转化过程是在哪个阶段完成的?先把这个贴收藏下..
      

  20.   


    Oracle对此sql将进行几个步骤的处理过程:
        1、语法检查(syntax check)
        检查此sql的拼写是否语法。
        2、语义检查(semantic check)
        诸如检查sql语句中的访问对象是否存在及该用户是否具备相应的权限。
        3、对sql语句进行解析(prase)
        利用内部算法对sql进行解析,生成解析树(parse tree)及执行计划(execution plan)。
        4、执行sql,返回结果(execute and return)
        其中,软、硬解析就发生在第三个过程里。所以对与把小写的字母转换成大写的再执行的说法,疑惑中....
      

  21.   


    我觉得,这里是说对了一步,都用大写,是一种规范,这样的话,至少避免了大小写区分的sql的重复解析,对于这样的情况,避免了多余的一次hard parse,确是对性能有帮助,但是对于sql解析的都转成大写,这里倒是无处考究的。你可以自己做做实验,看看sqlarea和sql视图就知道叻。
      

  22.   

    我觉得应该没有自动转换这个说法吧。不然ORACLE为什么还要推荐在书写同样的SQL语句时尽量保持大小写一致,这样就避免重复解析。
    如果有小写自动都转为大写的话,就不存在上面这条建议了。而且我记得学习优化的时候有一条就是说“即便是内容相同,大小写不同的的同一条SQL语句,它也是需要被重新解析的”。当时好像还说有个什么参数可以设定这个等级的,也就是说你可以让ORACLE不区分大小写,只要两条语句内容完全一样,就不需要重新解析。
      

  23.   

    TO 戴明明同学:我觉得你引用的那段话是不是指的是对象名呀
    比如说
    select * from dept;
    select * from DePt;
    这两条语句查询结果都一样
    因为ORACLE在内部存储的表名是大写DEPT,这个时候会自动进行转换。
    可是至于解析嘛……说不明还是要重新解析一次的个人观点哦 呵呵