请注意Oracle对象的大小写
oracle命名规则

oracle命名规则一、概述Oracle命名规则是指在Oracle数据库中定义各种对象(如表、列、索引、约束等)时所遵循的命名规范。
合理的命名规则可以提高数据管理的效率,降低出错率,使数据库更易于维护和管理。
二、命名规则的基本原则1. 命名应该简洁明了,易于理解和记忆。
2. 命名应该准确反映对象的含义和作用。
3. 命名应该避免使用特殊字符和空格,以免造成不必要的麻烦。
4. 命名应该遵循大小写敏感原则。
三、表命名规则1. 表名应该用单数形式,并且尽量简短明了。
2. 表名应该准确反映表内数据的含义和作用。
3. 表名中可以使用下划线分隔单词,但不建议过多使用。
四、列命名规则1. 列名应该用小写字母,并且尽量简短明了。
2. 列名应该准确反映列内数据的含义和作用。
3. 列名中可以使用下划线分隔单词,但不建议过多使用。
五、索引命名规则1. 索引名称应以“IDX_”开头,后面跟上表名和列名,以便于识别。
2. 索引名称应该用小写字母,并且尽量简短明了。
3. 索引名称中可以使用下划线分隔单词,但不建议过多使用。
六、约束命名规则1. 约束名称应以“PK_”或“FK_”开头,分别代表主键和外键。
2. 约束名称应该用小写字母,并且尽量简短明了。
3. 约束名称中可以使用下划线分隔单词,但不建议过多使用。
七、存储过程和函数命名规则1. 存储过程和函数名称应该用大写字母,并且尽量简短明了。
2. 存储过程和函数名称应该准确反映其功能和作用。
3. 存储过程和函数名称中可以使用下划线分隔单词,但不建议过多使用。
八、包命名规则1. 包名称应该用大写字母,并且尽量简短明了。
2. 包名称应该准确反映其功能和作用。
3. 包名称中可以使用下划线分隔单词,但不建议过多使用。
九、触发器命名规则1. 触发器名称应该用大写字母,并且尽量简短明了。
2. 触发器名称应该准确反映其功能和作用。
3. 触发器名称中可以使用下划线分隔单词,但不建议过多使用。
十、总结Oracle命名规则是数据库管理中不可或缺的一部分,良好的命名规则可以提高数据管理的效率和准确性。
oracle忽略大小写语句

Oracle忽略大小写语句的三种实现方法及比较Oracle是一种广泛使用的关系型数据库管理系统,它提供了强大的数据处理能力和灵活的查询语言。
然而,Oracle默认是区分大小写的,这意味着在进行查询时,必须确保输入的字符串和数据库中存储的字符串的大小写一致,否则可能会导致查询结果不准确或者无法找到匹配的记录。
为了解决这个问题,Oracle提供了三种实现查询不区分大小写的方法,分别是:使用LOWER或UPPER函数将字段和查询字符串转换为统一的大小写使用REGEXP_LIKE函数进行正则表达式匹配,并指定不区分大小写的选项使用ALTER SESSION或ALTER SYSTEM命令修改NLS_COMP和NLS_SORT参数,设置全局或会话级别的语言排序规则这三种方法各有优缺点,需要根据具体的场景和需求进行选择和使用。
本文将对这三种方法进行详细的介绍和比较,并给出相应的示例代码和执行结果。
一、使用LOWER或UPPER函数1.1 方法介绍LOWER和UPPER是Oracle内置的字符串函数,它们可以将输入的字符串转换为小写或大写。
使用这两个函数可以实现查询不区分大小写的效果,只需要在查询语句中将字段和查询字符串都转换为同一种大小写即可。
例如:-- 将字段和查询字符串都转换为小写SELECT*FROM table WHERE lower(FAMILY_NAME) like lower('#{familyName}');-- 将字段和查询字符串都转换为大写SELECT*FROM table WHERE upper(FAMILY_NAME) like upper('#{familyName}');1.2 方法优缺点使用LOWER或UPPER函数的优点是简单易用,不需要修改数据库的配置参数,也不需要使用复杂的正则表达式。
使用LOWER或UPPER函数的缺点是性能较低,因为每次查询都需要对字段和查询字符串进行转换,这会增加CPU的开销,并且可能导致索引失效,从而影响查询速度。
oracle sql标准格式

oracle sql标准格式Oracle SQL的标准格式并没有一个固定的标准,因为SQL的编写风格可以因个人、团队或公司的偏好而异。
然而,有一些通用的最佳实践和格式规范,这些规范可以提高SQL的可读性、可维护性和性能。
以下是一些建议的Oracle SQL标准格式:书写规范大小写一致:关键字、表名、列名等的大小写应保持一致。
通常,表名和列名使用大写,而SQL关键字则使用小写。
关键字单独占一行:例如SELECT, FROM, WHERE, AND, GROUP BY, ORDER BY 等关键字应单独占一行。
行缩进和对齐:建议语句中的关键字右对齐,以提高可读性。
空格使用:在SQL语句的算术运算符、逻辑运算符(如AND, OR, NOT)和比较运算符(如=, <>, <=, >=, BETWEEN, AND)前后应加上空格。
注释:对于复杂的SQL语句,应加上注释以解释算法和功能。
注释应单独成行,并放在语句前面。
单行注释使用--,多行注释使用/* */。
表别名:在多表连接时,使用表的别名来引用列,可以提高查询的可读性。
列和条件单独占行:SELECT 后面的每一列(当列数大于1时)和WHERE 后面的每个条件(当条件数大于1时)应单独占一行。
避免使用SELECT *:应明确指出要查询的字段名,而不是使用*。
性能优化建议简化关键SQL语句:避免包含太多的嵌套,以减少执行计划错误的可能性。
使用表别名:在进行多表连接时,为每个字段的使用都带上表别名。
避免使用INSERT INTO ... VALUES:应指定插入的字段名,而不是直接使用VALUES。
减少不必要的类型转换:避免在WHERE 子句中对索引列进行类型转换。
慎重使用索引:索引可以提高查询性能,但也会降低INSERT 和UPDATE 的性能。
应根据实际情况来创建索引。
避免在WHERE 子句中使用使索引失效的表达式:例如,避免使用<>、NOT、IS NULL、IS NOT NULL、LIKE '%xxxx%' 等。
Oracle-10g_11g-密码策略-用户口令-大小写敏感-说明

CORE 10.2.0.5.0 Production
TNS for Linux: Version 10.2.0.5.0 -Production
NLSRTL Version 10.2.0.5.0 - Production
从这里可以看出,在Oracle 10g下,密码是不分大小写。
--这里我们可以继续测试:
我们将sysdba 权限从dave1用户revoke,然后测试:
SQL> conn / as sysdba;
Connected.
SQL> revoke sysdba,sysoper from dave1;
SQL> conn dave1/dave;
Connected.
--还是可以继续使用,不分大小写
把DB 重启一下看看:
SQL> shutdown immediate
ORA-01031: insufficient privileges
SQL> conn / as sysdba;
Usage: orapwdfile=<fname> entries=<users> force=<y/n>ignorecase=<y/n> nosysdba=<y/n>
where
file - name of password file (required),
--创建2个测试用户:
SQL> create user dave1 identified byDavE;
oracle impdp exclude用法

oracle impdp exclude用法可以使用exclude选项来指定要在导入过程中排除的对象或特定类型的对象。
exclude选项可以在导入过程中使用多次。
以下是一些使用exclude选项的示例:1. 排除特定表:```impdp hr/hr DIRECTORY=dpump_dir1 DUMPFILE=expdat.dmp EXCLUDE=TABLE:"IN ('EMP','DEPT')"```以上命令将从expdat.dmp文件导入除EMP和DEPT表以外的所有对象。
2. 排除指定模式下的所有对象:```impdp hr/hr DIRECTORY=dpump_dir1 DUMPFILE=expdat.dmp EXCLUDE=SCHEMA:"= 'HR'"```以上命令将从expdat.dmp文件导入除HR模式以外的所有对象。
3. 排除指定类型的对象:```impdp hr/hr DIRECTORY=dpump_dir1 DUMPFILE=expdat.dmp EXCLUDE=PROCEDURE```以上命令将从expdat.dmp文件导入除存储过程外的所有对象。
4. 排除多个类型的对象:```impdp hr/hr DIRECTORY=dpump_dir1 DUMPFILE=expdat.dmp EXCLUDE=INDEX, TABLESPACE```以上命令将从expdat.dmp文件导入除索引和表空间以外的所有对象。
请注意,EXCLUDE选项是大小写敏感的,因此必须按照正确的方式输入对象类型或模式名称。
确保在导入之前仔细检查和测试导入参数。
Oracle在英文匹配时大小写敏感,如何忽略大小写进行匹配

Oracle在英⽂匹配时⼤⼩写敏感,如何忽略⼤⼩写进⾏匹配
SQL Server使⽤英⽂字符串的匹配的时候默认是忽略⼤⼩写的,这样⽤起来是⽐较⽅便的,如果想不忽略⼤⼩写也可以修改配置,但是Oracle好像不能忽略⼤⼩写,在进⾏字符串匹配的时候就⽐较⿇烦了。
那么该怎么解决⼤⼩写敏感的问题,把需要的数据都查询出来呢?最常见的办法就是把查询的参数和字段中的内容都转化成⼤写或者都转化成⼩写,这样就可匹配了。
⽐如如下的查询:
select * from hr.EMPLOYEES t
where upper(first_name)=upper('john')
但是这样会存在⼀个问题,就是这个SQL查询⽆法⽤到字段上的索引,如果对first_name建⽴了索引,这个查询将会对表进⾏表扫描,⽽不使⽤索引。
如果数据量⼤的情况下,这将是⼀个⾮常严重的性能问题。
解决办法就使⽤Oracle中的“函数索引”,对first_name的⼤写建⽴索引,代码如下:
create index hr.employees_first_name on hr.employees(upper(first_name))
由于最近在⽤Oracle,之前⼀直⽤的是SQL Server,对Oracle不是特别熟悉,所有这篇⽂章也没有什么技术含量,纯粹是为⾃⼰记录⽽已。
ORACLE对象命名规范

科技提升品质管理保证质量服务创造价值创新确保领先ORACLE数据库对象命名规范编写:高帅审核:批准:修改说明目录1引言 (4)1.1目的 (4)1.2范围 (4)1.3参考资料.......................................................................... 错误!未定义书签。
2国网标准化命名规范 (4)2.1基本原则 (4)2.2实体(表)的英文命名规则 (4)2.3属性(列)的英文命名规则 (5)2.4主键的英文命名规则 (5)2.5外键的英文命名规则 (5)3内部补充命名规范................................................................. 错误!未定义书签。
3.1表分区(P ARTITION) (5)3.2索引(I NDEX) (6)3.3视图(V IEW) (6)3.4物化视图(M ATERIALIZED V IEW) (6)3.5临时表 (6)3.6触发器(T RIGGER) (6)3.7过程(P ROCEDURE) (6)3.8函数(F UNCTION) (7)3.9包(P ACKAGE &P ACKAGE B ODY) (7)3.10序列发生器(S EQUENCE) (7)3.11数据链接(D ATABASE L INK) (7)3.12类型(T YPE &T YPE B ODY) (7)3.13角色(R OLE) (7)3.14目录(D IRECTORIE) (7)3.15表空间(T ABLESPACE) (7)4附录 (8)4.1常用缩写简表 (8)1引言1.1目的本规范的目的是让数据库设计人员,在进行数据库对象设计时,确保命名的标准化、规范化。
通过建立命名规范,促使每个设计人员养成良好的习惯,提高对象的可识别性,促进团队交流和新员工的学习,以保证软件产品的质量。
Oracle19C关于参数sec_case_sensitive_logon控制密码大小写敏感问题

Oracle19C关于参数sec_case_sensitive_logon控制密码⼤⼩写敏感问题Oracle19C关于参数sec_case_sensitive_logon控制密码⼤⼩写敏感问题该参数在Oracle11G开始推出,⽬的是为了控制密码⼤⼩写敏感问题,可以⽆需重启数据库实例的情况下设置后直接⽣效。
如果sec_case_sensitive_logon=true表⽰区分⼤⼩写,这个是默认值。
sec_case_sensitive_logon=false表⽰不区分⼤⼩写。
但是,在12C以后逐渐废弃该参数,不过为了兼容依旧可以使⽤,直到19C情况同样如此。
更⾼版本的没有做过测试,情况未知。
:不考虑user$.spare4的修改实验,对于数据字典表或者系统基表之类的DML在没有Oracle官⽅技术⽀持下不建议⽤于⽣产库。
出于研究钻研的⽬的的话可以在⾃⼰虚拟机等环境做实验。
值得注意⼀点的就是,sec_case_sensitive_logon=false和SQLNET.ALLOWED_LOGON_VERSION_SERVER=12或者SQLNET.ALLOWED_LOGON_VERSION_SERVER=12a不兼容。
这是因为⽤于此模式的更安全的密码版本仅⽀持区分⼤⼩写的密码检查。
从密码版本看,需要密码版本包含10G。
是的,密码也是有版本的,视图dba_users就有字段password_versions可以查询。
密码版本的值有10G,11G,12C,由控制。
注意密码版本和平时说的DataBase版本不是⼀个概念。
另外,引⽤官档的⼀段话如下:如果 SQLNET.ALLOWED_LOGON_VERSION_SERVER 参数设置为 12 或 12a,请确保 SEC_CASE_SENSITIVE_LOGON 参数未设置为 FALSE。
这是因为⽤于此模式的更安全的密码版本仅⽀持区分⼤⼩写的密码检查。
出于兼容性原因,当 SQLNET.ALLOWED_LOGON_VERSION_SERVER 设置为 12 或 12a 时,Oracle 数据库不会阻⽌对SEC_CASE_SENSITIVE_LOGON 使⽤ FALSE。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
请注意Oracle对象的大小写
在数据库新建一个测试表(数据库版本为ORACLE 10.2.0.1.0),表名为小写的test。
脚本如下所示:
1.CREATE TABLE test
2.(
3. id NUMBER(10),
VARCHAR2(20),
5. Sex VARCHAR(2)
6.)
7.--查找不到对应数据
8.SELECT * FROM USER_TABLES WHERE TABLE_NAME = 'test'
9.--改用大写才可以查到对应的数据
10.SELECT * FROM USER_TABLES WHERE TABLE_NAME ='TEST'
11.--查找不到对应数据
12.SELECT * FROM ALL_TAB_COLUMNS WHERE TABLE_NAME = 'test';
13.SELECT * FROM USER_TAB_COLUMNS WHERE TABLE_NAME ='TEST';
下面我们用双引号来新建另外一个表(ORACLE 中 " "的作用是强制区分大小写,以及关键字做字段时用"")脚本如下所示:
1.CREATE TABLE"test1"
2.(
3."id" NUMBER(10),
4."Name" VARCHAR2(20),
5."SEX"VARCHAR(2)
6.)
7.SELECT * FROM USER_TABLES WHERE TABLE_NAME = 'test1';
8.SELECT * FROM DBA_TABLES WHERE TABLE_NAME = 'test1';
9.SELECT * FROM USER_TAB_COLUMNS WHERE TABLE_NAME ='test1';
10.SELECT * FROM"test1";
11.--ORA-00942: 表或试图不存在
12.SELECT * FROM test1;
13.--ORA-00904: "NAME": 标识符无效
14.SELECT id, Name, SEX FROM"test1";
15.--ORA-00904: "ID": 标识符无效
16.SELECT id, "Name", SEX FROM"test1";
17.SELECT"id", "Name", SEX FROM"test1";
18.--ORA-00942: 表或试图不存在
19.SELECT"id", "Name", SEX FROM test1;
上面的例子也许会让觉得比较奇怪,这种现象在SQL SERVER里面是不存在的。
这是因为ORACLE在建表或者字段时,如果没有双引号,ORACLE会把表名、字段名全部转化为大写字母然后写入数据字典。
访问数据字典时,没有双引号ORACLE会将其转化成大写然后再去数据字段中查找。
如果加上双引号则能区分大小写。
不仅仅关键字不区分大小写,函数名,过程名,表名称,pl/sql块中变量名,用户名,密码等都不区分大小写。
有些人可能不习惯表名、字段全部用大写,而喜欢用小写或大小写混杂的形式,如果是这样的话,你在ORACLE中写脚本时就要注意了,没有处理好,这样会给你带来“无穷的麻烦”
如上所示,你必须在字段上加上"",否则这里报错,哪里起火。
而人有时候又是很粗心、健忘的。
所以在ORACLE中,还是建议全部用大写,这样可能开始会让你有些不爽,不过习惯了就好了。
总比你用""给后面的开发带来很多隐患要好得多。
在ORAClE中,习惯脚本、字段等用大写,有人说能提高效率,这样少了强制转换大写(如果没有双引号的话)开销,也有人说这些开销可以忽略不计,不会有啥性能方面的问题。
(当然脚本全部用大写一致,可以避免同一脚本由于大小写问题多次解析,这是可以肯定的)。