zoukankan      html  css  js  c++  java
  • ORACLE对像名大小写敏感性相关的深入分析

    ORACLE对像名大小写敏感性相关的深入分析
    注:
    1、 本文是以ORACLE9.2为测试分析版本
    2、 本文中提到的ORACLE对像名包括ORACLE中的表名、视图名、字段名、函数名等等。
     
    一般大家在进行Oracle开发或管理里都不会对ORACLE对像名大小写进行区别,因为ORALCE在普通情况下会将所有小写都转换为大写进行处理,所以可以说是大小写不敏感的。但是实际ORACLE内部有它一套完整的对像名处理方式。本文将从实例进行分析与探讨ORACLE对像名大小写敏感性的处理机制。
     
    可能有些人员在工作已经了解到,ORACLE在创建对像时是可以加引号的,如果不加引号则不能使用特别字符,只能使用以字母开头的命名。如果加了引号就可以在对像名里使用任何字符,包括数字开头、下划线、逗号等等。在导出SQLSERVER2000的对像创建脚本时一般是加了引号的,所以经常有人说脚本在ORACLE中运行后对像不能访问的问题。
     
    以下是笔者对创建表及访问使用不同命名方式的一个实例,是笔者的机器上测试结果:
     
    Connected to Oracle9i Enterprise Edition Release 9.2.0.7.0
    Connected as *****
     
    1 SQL> create table mytable1
    2 (
    3 C1 VARCHAR2(6)
    4 );

    Table created
    SQL> select * from "MYTABLE1";

    C1
    ------
    SQL> select * from MYtable1;

    C1
    ------
    SQL> select * from "mytable1";

    select * from "mytable1"
    ORA-00942: 表或视图不存在
    SQL> drop table mytable1;

    Table dropped
    1 SQL> create table "mytable1"
    2 (
    3 C1 VARCHAR2(6)
    4 );
     
    Table created
    SQL> select * from "mytable1";

    C1
    ------
    SQL> select * from mytable1;

    select * from mytable1
    ORA-00942: 表或视图不存在
    SQL> select * from MYTABLE1;

    select * from MYTABLE1
    ORA-00942: 表或视图不存在
     
     
    下表为笔者的测试结果汇总:
    √表示允许访问,×表示不允许访问。
    实例:
    读取
    创建
    mytable1
    MYTABLE1
    “mytable1”
    “MYTABLE1”
    mytable1
    ×
    MYTABLE1
    ×
    “mytable1”
    ×
    ×
    ×
    “MYTABLE1”
    ×
     
    总结归纳:
    读取
    创建
    小写字母
    大写字母
    加引号小写字母
    加引号大写字母
    小写字母
    ×
    大写字母
    ×
    加引号小写字母
    ×
    ×
    ×
    加引号大写字母
    ×
     
     
     
     
     
     
     
     
    以下为根据笔者对ORACLE数据字典及实际测试总结分析结论:
    ORACLE在创建对像时如果没有加引号,对存入数据字典时都会将对像名小写字母转换成大写字母存储,如mytable将转换成MYTABLE;如果创建时加了引号,则以引号内的实际字符存储。
    访问时如果没加引号则会将小写字母转换成大写字母再访问,如mytable将转换成MYTABLE;如果加了引号则以引号内的实际字符访问。
    ORACLE在读取数据字典时只要发现对像名里有小写字母或者是除字母汉字以外开头的字符都认为是大小写敏感的,并且要求在访问时需要加上引号。
  • 相关阅读:
    Mysql5.6主从复制-基于binlog
    mysql 1449 : The user specified as a definer ('root'@'%') does not exist 解决方法
    socket recv阻塞与非阻塞error总结
    linux socket talkclient talkserver示例
    linux-socket connect阻塞和非阻塞模式 示例
    OPENSSL FIPS
    epoll的LT和ET使用EPOLLONESHOT
    如何在socket编程的Tcp连接中实现心跳协议
    linux网络编程:splice函数和tee( )函数高效的零拷贝
    Linux网络编程--sendfile零拷贝高效率发送文件
  • 原文地址:https://www.cnblogs.com/linximf/p/2257141.html
Copyright © 2011-2022 走看看