扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
数据库服务器字符集select * from nls_database_parameters,其来源于props$,是表示数据库的字符集。
成都创新互联公司是专业的新郑网站建设公司,新郑接单;提供成都网站制作、网站设计,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行新郑网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!
客户端字符集环境select * from nls_instance_parameters,其来源于v$parameter,
表示客户端的字符集的设置,可能是参数文件,环境变量或者是注册表
会话字符集环境select * from nls_session_parameters,其来源于v$nls_parameters,表示会话自己的设置,可能是会话的环境变量或者是alter session完成,如果会话没有特殊的设置,将与nls_instance_parameters一致。
客户端的字符集要求与服务器一致,才能正确显示数据库的非Ascii字符。如果多个设置存在的时候,alter session环境变量注册表参数文件
字符集要求一致,但是语言设置却可以不同,语言设置建议用英文。如字符集是zhs16gbk,则nls_lang可以是American_America.zhs16gbk。
涉及三方面的字符集,
1. oracel server端的字符集;
2. oracle client端的字符集;
3. dmp文件的字符集。
在做数据导入的时候,需要这三个字符集都一致才能正确导入。
2.1 查询oracle server端的字符集
有很多种方法可以查出oracle server端的字符集,比较直观的查询方法是以下这种:
SQL select userenv('language') from dual;
USERENV('LANGUAGE')
----------------------------------------------------
SIMPLIFIED CHINESE_CHINA.ZHS16GBK
SQLselect userenv(‘language’) from dual;
AMERICAN _ AMERICA. ZHS16GBK
2.2 如何查询dmp文件的字符集
用oracle的exp工具导出的dmp文件也包含了字符集信息,dmp文件的第2和第3个字节记录了dmp文件的字符集。如果dmp文件不大,比如只有几M或几十M,可以用UltraEdit打开(16进制方式),看第2第3个字节的内容,如0354,然后用以下SQL查出它对应的字符集:
SQL select nls_charset_name(to_number('0354','xxxx')) from dual;
ZHS16GBK
如果dmp文件很大,比如有2G以上(这也是最常见的情况),用文本编辑器打开很慢或者完全打不开,可以用以下命令(在unix主机上):
cat exp.dmp |od -x|head -1|awk '{print $2 $3}'|cut -c 3-6
然后用上述SQL也可以得到它对应的字符集。
2.3 查询oracle client端的字符集
在windows平台下,就是注册表里面相应OracleHome的NLS_LANG。还可以在dos窗口里面自己设置,
比如: set nls_lang=AMERICAN_AMERICA.ZHS16GBK
这样就只影响这个窗口里面的环境变量。
在unix平台下,就是环境变量NLS_LANG。
$echo $NLS_LANG
AMERICAN_AMERICA.ZHS16GBK
如果检查的结果发现server端与client端字符集不一致,请统一修改为同server端相同的字符集。
补充:
(1).数据库服务器字符集
select * from nls_database_parameters
来源于props$,是表示数据库的字符集。
(2).客户端字符集环境
select * from nls_instance_parameters
其来源于v$parameter,表示客户端的字符集的设置,可能是参数文件,环境变量或者是注册表
(3).会话字符集环境
select * from nls_session_parameters
来源于v$nls_parameters,表示会话自己的设置,可能是会话的环境变量或者是alter session完成,如果会话没有特殊的设置,将与nls_instance_parameters一致。
(4).客户端的字符集要求与服务器一致,才能正确显示数据库的非Ascii字符。
如果多个设置存在的时候,NLS作用优先级别:Sql function alter session 环境变量或注册表 参数文件 数据库默认参数
字符集要求一致,但是语言设置却可以不同,语言设置建议用英文。如字符集是zhs16gbk,则nls_lang可以是American_America.zhs16gbk。
表名改成大写的试试。
select dbms_metadata.get_ddl('TABLE','ADMINIUSER') from dual
Oracle:数据定义语言(DDL)
1、命名规则和约定:
表名和列名的长度最多为30个字符
表名和列名必须以字母打头
表名或者列名中不允许有空格和*
Oracle服务器的保留字也不能作为表名或列名
2、数据类型:
创建数据表时,要为表中的每一列分配一个数据类型。数据类型指定了将要存储在此列中的数据的类型。通过为一列提供一种数据类型,可以避免在此列中存储错误类型的数据
Varchar2:VARCHAR2是一种字符型数据类型,用来在一列中存储可变长度的字母数字混合的数据。VARCHAR2必须指定最大长度,最小长度和默认长度都是一个字符。指定的长度要置于圆括号当中,例如VARCHAR(20)。如果数据比指定的长度短,那么只存储数据值,并不在值的尾部添加空格。但是,如果输入的值比指定的长度长,则会产生错误,并不会将较长的值截短。如果某一列的值没有固定的长度,那么最适合使用VARCHAR2数据类型
Char:CHAR类型是一种字符型数据类型,用来在一列中存储固定长度的字母数字混合的数据。默认长度和最小长度都是一个字符。如果输入的值比指定的长度短,则在其尾部添加空格,以使其长度等于指定的长度;如果输入的值比指定的长度长,则会发生错误。CHAR类型适用于固定长度的值
Number:NUMBER数据类型用来存储负数、正数、整数、定点数和浮点数。NUMBER数据类型可以用于任何要进行数学计算的列。当某一列使用Number类型时,可以指定其精度和标度。精度是一个数字的有意义数字的总数,包括小数点左右两边的数字,但指定精度时小数点不计算在内。标度是小数点右边数字的总数
整数类型全部是数字,没有小数部分。如果一列定义为整数类型,则只需要提供精度的大小即可
定点小数类型的小数点右边的数字为数是指定的
浮点小数类型的小数位为数是可变的。小数点前可以有任意位数字,或者也可以根本不出现小数点。将一列定义为这种类型时不用随同NUMBER类型一起来指定标度和精度
Date:DATE类型用于存储日期和时间值。DATE类型的列中存储着日、月、世纪、小时、分钟和秒。对DATE类型不需要指定大小。
LONG:LONG类型用于可变长度的字符数据,最大为2G Byte。一张数据表中只能有一列定义为LONG类型,定义LONG类型时,不需要指定其大小
NCHAR:NCHAR类型与CHAR类型相似,但它对每一个字符都使用两个字节的二进制编码,而CHAR类型则对每一个字符使用一个字节的ACSII编码,它只能表示256个不同的字符
CLOB:这一字符大对象数据类型用于存储单字节字符数据,最大为4G个字节
NCLOB:这一字符大对象数据类型使用2 Byte的字符代码
BLOB:二进制大对象数据类型用于存储二进制数据,最大为4G Byte
3、约束
约束是对数据表施加规则。约束有助于我们使自己的数据库具有完整性。
完整性规则:
(1)实体完整性:主键中的列不能是空(null),主键提供了可以惟一地识别一行或一个实体的方法。
(2)引用完整性:外键值或者是空值,或者必须作为引用表的主键值而存在
Oracle使用约束来实现关系数据库的完整性规则,并在单个列级别实现数据完整性。无论何时,当对数据表中的一行或一条记录进行插入、更新或删除操作时,都必须满足约束条件,这样其操作才能成功
3.1、约束类型
(1)完整性约束:定义数据表中的主键和外键,以及此外键所引用的主键
(2)值约束:如果不允许值为空,如果要求值是惟一的,以及如果一个列的值只允许是一组确定的值,那么就需要定义值约束
3.2、命名约束
Oracle通过内部名称或用户自定义的名称来识别约束,对于每一个用户帐号,每一个约束名都必须是惟一的。一个用户不能在两张不同的数据表上创建具有相同名称的约束。一般情况下,命名约束时采用如下的约定形式:
table name_column name_constraint type
这里table name是要定义约束的表名,column name是要应用约束的列名,constraint type是用缩写形式来表示的约束类型
约束与缩写的对应形式
PRIMARY KEY:pk
FOREIGN KEY:fk
UNIQUE:uk
CHECK:ck
NOT NULL:nn
如果用户没有命名一个约束,则Oracle服务器会自动生成一个约束名,所用的格式是SYS_Cn,这里n是任意一个惟一的数字
3.3、定义约束
可以在创建表时创建约束,也可以在表创建完成之后再添加约束。约束的定义有两个级别:
列级别:一个列级别的约束只涉及单独一列,它的定义与列的定义同时进行。除外键约束和复合主键约束外,其他类型的约束均可以在列级别进行定义通用的语法格式是:
Column datatype [CONSTRAINT constraint_name] constraint_type
表级别:一个表级别的约束涉及一列或多列,它的定义与列的定义是分开进行的。一般来说,所有列的定义都完成之后才定义表级别约束。除非空约束,所有约束均可以在表级别进行定义。通用的语法格式是:
[CONSTRAINT constraint_name] constraint_type(Column name)
3.3.1、主键约束
主键约束也称为实体完整性约束。它为表创建一个主键。一张表只能有一个主键约束。无论是一列用作主键还是多列复合起来用作主键,主键只能是非空值,而且也只能有惟一的值。例如,N2公司数据库的DEPT表将DeptId列用作主键,则在列级别定义约束如下所示:
DeptId NUMBER(2) CONSTRAINT dept_deptid_pk PRIMARY KEY
在表级别定义约束如下所示:
CONSTRAINT dept_deptid_pk PRIMARY KEY(DeptId)
3.3.2、外键约束
外键约束也称为主键完整性约束。它使用一列或多列作为外键,建立了此外键与同一张表或者另一张表的主键之间的关系
要确定一张数据表的外键,其他被引用的表及其主键必须已经存在。虽然外键与被引用的主键列不需要具有相同的名称,但是外键值必须与父表的主键值相匹配,或者外键值是空值
CONSTRAINT student_facultyid_fk FOREIGN KEY(FacultyId)REFERENCES faculty(FacultyId)
STUDENT标的FaultyId引用了FACULTY表的主键FacultyId
在结束FOREIGN KEY之前,还可以添加ON DELETE CASCADE子句,它不仅允许删除父表中的记录,而且还会同时删除子表中依赖的记录。在不使用ON DELETE CASCADE子句的情况下,如果子表引用父表中的记录,那么就不能删除父表中的这一行记录
3.3.3、非空约束
非空约束确保一列具有一个值而且不是空值
3.3.4、惟一性约束
惟一性约束要求一列或一组列中的每一个值都是惟一的。如果惟一性约束应用于单一列,则此列只有惟一的值;如果惟一性约束应用于一组列,那么这组列合起来具有惟一的值。惟一性约束允许空值,除非此列也应用了NOT NULL非空约束
3.3.5、检查约束
检查约束定义了每一行都必须满足的条件。一列可以有多个检查约束,检查约束既可以在列级别定义,也可以在表级别定义
CONSTRAINT dept_deptid_cc CHECK ((DeptId=10)and(DeptId=99))
3.3.6、非空检查约束
非空约束也能够作为检查约束来声明,它可以在列级别定义,也可以在表级别定义:
Name VARCHAR2(15) CONSTRAINT faculty_name_ck CHECK(Name IS NOT NULL)
3.3.7、DEFAULT默认值
默认值确保当向表中插入新的一行时,某一特定的列总是具有一个值。如果用户输入另一个值,则默认值就会被覆盖,如果插入空值,那么就会使用默认值
State CHAR(2) DEFAULT ‘NJ’
4、创建Oracle数据表
CREATE TABLE语句的通用语法格式是:
CREATE TABLE [schema.] tablename
(column1 datatype [CONSTRAINT constraint_name] constraint_type,
column2 datatype [CONSTRAINT constraint_name] constraint_type,…
[CONSTRAINT constraint_name] constraint_type(Column name,…),…)
schema是可选的,它与用户的注册名相同
tablename是用户指定的表名
column是单个列的名字
datatype是该列的数据类型和大小
constraint_name是用户提供的约束名
constraint_type是指完整性约束或值约束
每个列都可以有零个、一个或多个在列级别定义的约束,一般情况下,表级别约束是在所有列定义完成之后才声明
4.1、CREATE TABLE语句中的STORAGE子句
CREATE TABLE语句中可以包括STORAGE子句,但它是可选的。在创建数据库时,使用该子句,由参数INITIAL定义为数据表分配的初始磁盘空间,另外还可以使用另一个参数NEXT,它在数据表对分配的初始磁盘空间已经用完的情况下,定义再追加分配多少磁盘空间。
CREATE TABLE sample(Id NUMBER(3),Name VARCHAR(25))
TABLESPACE CIS_DATA
STORAGE(INITIAL 1M NEXT 100K)
PCTFREE 20;//空闲百分比
5、显示数据表信息
当用户创建了数据库中的一张表或多张表时,Oracle用自己的数据字典来跟踪所有这些表。Oracle提供了SQL语句和SQL *Plus命令可以查看Oracle的数据字典表中的信息
5.1、查看用户的表名
SELECT TABLE_NAME FROM USER_TABLES;
Oracle创建系统表来存储用户和用户对象的有关信息,USER_TABLES是一个Oracle系统表,TABLE_NAME是此表中的一个列
5.2、查看表结构
DESCRIBE 表名
5.3、查看约束信息
Oracle的数据字典表USER_CONSTRAINTS存储着我们为每一列输入的约束信息
SELECT CONSTRAINT_NAME, CONSTRAINT_TYPE
FROM USER_CONSTRAINTS
WHERE TABLE_NAME=’STUDENT’;
表明必须采用大写字母,因为Oracle是以大写字母保存表名的
5.4、查看表空间信息
一个表空间包括一个或多个物理数据文件。我们可以获得使用数据字典视图USER_TABLESPACES所能得到的所有表空间的有关信息。
数据字典视图USER_USERS为用户提供了其账号的有关信息,以及永久的临时的表空间
5.5、注释表和列
创建数据表时可以为该表及其列添加注释,添加注释的目的是为编写文档的方便,添加注释所使用的语句是COMMENT语句。例如:
COMMENT ON TABLE student IS ‘Table holds students for INDO-S College’
COMMENT ON COLUMN employee.Lname IS ‘last name’
可以分别使用数据字典视图ALL_TAB_COMMENTS 和ALL_COL_COMMENTS,查看表和列的所有注释信息
6、修改已存在的数据表
要修改已经存在的表,某些修改是允许的,有些是不允许的
6.1、向已存在的表添加新列
ALTER TABLE tablename
ADD colname datatype;
6.2、修改已存在的列
ALTER TABLE tablename
MODIFY colname newdatatype;
6.3、添加一个约束
ALTER TABLE tablename
ADD [CONSTRAINT constraint_name] constraint_type(Column name);
6.4、删除一列
ALTER TABLE tablename
DROP COLUMN columnname;
6.5、删除一个约束
ALTER TABLE tablename
DROP CONSTRAINT constraintname;
6.6、启动/禁用约束
启用或禁用约束的格式是:
ALTER TABLE tablename
ENABLE | DISABLE CONSTRAINT constraintname;
6.7、重新命名一列
ALTER TABLE tablename RENAME COLUMN oldname TO newname;
6.8、重新命名一个约束
ALTER TABLE tablename RENAME CONSTRAINT oldname TO newname;
6.9、修改表的存储属性
ALTER TABLE tablename STORAGE(NEXT nK)
7、删除数据表
当删除一张数据表时,表中所有的数据以及表结构将被永久性地删除
DROP TABLE tablename;
8、重新命名数据表
RENAME oldtablename TO newtablename;
Oracle的查询语言当然是所有数据库公认的SQL语句了;
Oracle的编程语言是PL/SQL语言,这是Oracle独有的~~
1、SELECT value$ FROM sys.props$ WHERE name = 'NLS_CHARACTERSET' ;
--查询oracle 相关参数
2、SELECT * FROM NLS_DATABASE_PARAMETERS ;
扩展资料:
Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。
可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的 适应高吞吐量的数据库解决方案。
ORACLE数据库系统是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或B/S体系结构的数据库之一。
比如SilverStream就是基于数据库的一种中间件。ORACLE数据库是目前世界上使用最为广泛的数据库管理系统,作为一个通用的数据库系统,它具有完整的数据管理功能;作为一个关系数据库,它是一个完备关系的产品;作为分布式数据库它实现了分布式处理功能。
但它的所有知识,只要在一种机型上学习了ORACLE知识,便能在各种类型的机器上使用它。
Oracle数据库最新版本为Oracle Database 12c。Oracle数据库12c 引入了一个新的多承租方架构,使用该架构可轻松部署和管理数据库云。
此外,一些创新特性可最大限度地提高资源使用率和灵活性,如Oracle Multitenant可快速整合多个数据库,而Automatic Data Optimization和Heat Map能以更高的密度压缩数据和对数据分层。
这些独一无二的技术进步再加上在可用性、安全性和大数据支持方面的主要增强,使得Oracle数据库12c 成为私有云和公有云部署的理想平台。
参考资料:Oracle数据库--百度百科
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流