plsql转换大小写 Oracle中对像名大小写敏感性的深入解析
Oracle中对像名大小写敏感性的深入解析
一般情况下 使用者在进行 Oracle开发或管理里都不会对ORACLE对像名大小写进行区别 因为ORALCE在普通情况下会将所有小写都转换为大写进行处理 所以可以说是大小写不敏感的 但是实际ORACLE内部有它一套完整的对像名处理方式 本文将从实例进行分析与探讨ORACLE对像名大小写敏感性的处理机制
可能很多人在工作已经了解到 ORACLE在创建对像时是可以加引号的 如果不加引号则不能使用特别字符 只能使用以字母开头的命名 如果加了引号就可以在对像名里使用任何字符 包括数字开头 下划线 逗号等等 在导出 SQLSERVER 的对像创建脚本时一般是加了引号的 所以经常有人说脚本在ORACLE中运行后对像不能访问的问题
注
本文是以ORACLE 为测试分析版本
本文中提到的ORACLE对像名包括ORACLE中的表名 视图名 字段名 函数名等等
以下为创建表及访问使用不同命名方式的一个实例 测试结果如下
Connected to Oracle<fp class='fp-owjkz'></fp>i Enterprise Edition Release <fp class='fp-d6z7f'></fp><fp class='fp-wmpp1'></fp><fp class='fp-hpt8x'></fp><fp class='fp-vfqsz'></fp><fp class='fp-tflp6'></fp><fp class='fp-nwbfa'></fp><fp class='fp-w36v5'></fp><fp class='fp-nwbfa'></fp><fp class='fp-8oy28'></fp> Connected as *****SQL> create table mytable<fp class='fp-0has1'></fp> <fp class='fp-mdvna'></fp> ( <fp class='fp-k1yiy'></fp> C<fp class='fp-0has1'></fp> VARCHAR<fp class='fp-hpt8x'></fp>(<fp class='fp-6nsze'></fp>) <fp class='fp-t3tnn'></fp> );Table createdSQL> select * from <fp class='fp-gi5hf'></fp>MYTABLE<fp class='fp-ldnil'></fp><fp class='fp-dv85w'></fp>;C<fp class='fp-ip1cm'></fp><fp class='fp-yymuc'></fp><fp class='fp-9n67w'></fp><fp class='fp-0ysx6'></fp><fp class='fp-sfckh'></fp><fp class='fp-yymuc'></fp><fp class='fp-sfckh'></fp>SQL> select * from MYtable<fp class='fp-mkmfn'></fp>;C<fp class='fp-ldnil'></fp><fp class='fp-9n67w'></fp><fp class='fp-sfckh'></fp><fp class='fp-0ysx6'></fp><fp class='fp-sfckh'></fp><fp class='fp-yymuc'></fp><fp class='fp-0ysx6'></fp>SQL> select * from <fp class='fp-gi5hf'></fp>mytable<fp class='fp-mkmfn'></fp><fp class='fp-2s7xd'></fp>;select * from <fp class='fp-m13lr'></fp>mytable<fp class='fp-ip1cm'></fp><fp class='fp-m13lr'></fp>ORA<fp class='fp-9n67w'></fp><fp class='fp-4td07'></fp><fp class='fp-4td07'></fp><fp class='fp-d6z7f'></fp><fp class='fp-vriui'></fp><fp class='fp-pk0n5'></fp>: 表或视图不存在SQL> drop table mytable<fp class='fp-mkmfn'></fp>;Table droppedSQL> SQL> SQL> create table <fp class='fp-gi5hf'></fp>mytable<fp class='fp-ip1cm'></fp><fp class='fp-2s7xd'></fp> <fp class='fp-mdvna'></fp> ( <fp class='fp-dir9x'></fp> C<fp class='fp-mkmfn'></fp> VARCHAR<fp class='fp-mdvna'></fp>(<fp class='fp-okrig'></fp>) <fp class='fp-lw6ch'></fp> );Table createdSQL> select * from <fp class='fp-dv85w'></fp>mytable<fp class='fp-0has1'></fp><fp class='fp-gi5hf'></fp>;C<fp class='fp-mkmfn'></fp><fp class='fp-0ysx6'></fp><fp class='fp-sfckh'></fp><fp class='fp-sfckh'></fp><fp class='fp-0ysx6'></fp><fp class='fp-yymuc'></fp><fp class='fp-0ysx6'></fp>SQL> select * from mytable<fp class='fp-0has1'></fp>;select * from mytable<fp class='fp-mkmfn'></fp>ORA<fp class='fp-sfckh'></fp><fp class='fp-4td07'></fp><fp class='fp-8oy28'></fp><fp class='fp-owjkz'></fp><fp class='fp-lw6ch'></fp><fp class='fp-hpt8x'></fp>: 表或视图不存在SQL> select * from MYTABLE<fp class='fp-mkmfn'></fp>;select * from MYTABLE<fp class='fp-mkmfn'></fp>ORA<fp class='fp-yymuc'></fp><fp class='fp-tflp6'></fp><fp class='fp-8oy28'></fp><fp class='fp-q8gpb'></fp><fp class='fp-lw6ch'></fp><fp class='fp-pk0n5'></fp>: 表或视图不存在
测试结果汇总
√表示允许访问 ×表示不允许访问

读取创建 mytable<fp class='fp-mkmfn'></fp> MYTABLE<fp class='fp-ip1cm'></fp> <fp class='fp-azv7k'></fp>mytable<fp class='fp-ldnil'></fp><fp class='fp-h1kag'></fp> <fp class='fp-9be5e'></fp>MYTABLE<fp class='fp-mkmfn'></fp><fp class='fp-h1kag'></fp> mytable<fp class='fp-0has1'></fp> √ √ × √ MYTABLE<fp class='fp-0has1'></fp> √ √ × √ <fp class='fp-eugal'></fp>mytable<fp class='fp-0has1'></fp><fp class='fp-wfyxo'></fp> × × √ × <fp class='fp-fuof9'></fp>MYTABLE<fp class='fp-ldnil'></fp><fp class='fp-ymvsu'></fp> √ √ × √
总结
读取创建 小写字母 大写字母 加引号小写字母 加引号大写字母小写字母 √ √ × √大写字母 √ √ × √加引号小写字母 × × √ ×加引号大写字母 √ √ × √
分析结论
ORACLE在创建对像时如果没有加引号 对存入数据字典时都会将对像名小写字母转换成大写字母存储 如mytable将转换成MYTABLE 如果创建时加了引号 则以引号内的实际字符存储
访问时如果没加引号则会将小写字母转换成大写字母再访问 如mytable将转换成MYTABLE 如果加了引号则以引号内的实际字符访问
lishixinzhi/Article/program/Oracle/201311/17688