公司徽标Oracle学习(二)Oracle---主要数据类型•Character数据类型–Long数据类型•用于存储可变长度的字符数据,最大大小为2GB.•Long数据类型的某些特征与Varchar2相似,当需要遵循以下限制:–表中只有一列可以为long数据类型–Long列不能定义为唯一或主键约束–不能在Long列上建立索引–过程或存储过程不能接受long数据类型作为参数–Varchar2数据类型(可变长)•它支持可变长度的字符串.此数据类型的大小范围介于(1到4000个字节之间),比Char节省空间•等价与ASNI定义的Varchar数据类型–Char数据类型(定长字符串),但当需要定长的字符串时,可以使用Char数据类型.(1~~2000个字节之间)•如果输入长度小于指定长度,则数据库会使用空格填补方式达到固定长度Oracle---主要数据类型•Raw和LongRaw数据类型–一个表中只能有一个该类型的字段,不能作为主键–用于存储二进制数据的数据类型•Raw数据类型用于存储面向字节的数据,如二进制数据或字符串,此数据类型的最大大小为2000个字节,使用该数据类型的时候,应该设置其大小•LogRaw数据类型LongRaw数据类型存储可变长度的二进制数据,它的最大大小可以为2GBOracle---主要数据类型•LOB数据类型–LOB也称为LargeObject数据类型.可以存储非结构化的信息,如声音、图片、视频文件,它的最大大小可以为4GB•CLOB表示CharacterLOB(字符LOB)可以存储大量的字符数据。•BLOB表示BinaryLOB(二进制LOB)可以存储大型二进制对象•BFILE表示BinaryFile(二进制文件),用于操作系统文件中存储的二进制文件.Oracle---主要数据类型•Date数据类型–Datatime数据类型用于存储日期值和时间值•TIMESTAMP用于存储年、月和日等日期值以及小时、分钟和秒等时间值。•INTERVALDAYTOSECOND此数据类型用于将时间存储为日、小时、分钟直至秒的时间间隔–IntervalDayToSecond.java•INTERVALYEARTOMONTH存储年和月的时间间隔•TIMESTAMPWITHTIMEZONE表示日期和时间值,及其相关的时区设置•TIMESTAMPWITHLOCALTIMEZONE存储数据时将被规范化为数据库时区事务处理•数据库对所做的所有修改都称为事务处理。只有将事务处理修改提交后,才能永久的修改数据库中的信息•DDL语句,自动的进行事务处理不需要我们操作–COMMIT•如果操作成功,则借助COMMIT命令,才能对数据库进行永久的事务处理修改–ROLLBACK•用于撤消在当前事务处理中所执行的操作•ROLLBACKTOSAVEPOINTsave_pt----回退到某个保存点–SAVEPOINT•保存点类似于标记,它将很长的事务处理划分为较小的事务处理。用于标识以后可以回滚到的事务处理中的点SQL查询函数•单行函数–日期函数•Add_months----对指定日期增加指定的月数后返回一个日期[add_months(d,m)---d是日期,m是月数]•Last_day---返回月末最后一天相应的日期[last_day(d)]•Months_between---两个日期之间月份数[months_between(d1,d2)]•Round---返回日期,并词日期舍入到格式模式所指定的单位[round(d,{fmt})]---默认情况下舍入到最近的日期(年以7月1日,日以16日为分水岭)•Next_day---next_day(d,day)d表示日期,day表示一个星期的任意一天SQL查询函数•日期函数–Truncate---返回日期,其时间部分截断为格式模型所指定的单位–Trunc(sysdate,’year’)截断结果为当月的1号,如01-jan-04–Trunc(sysdate,‘month’)截断结果为当月的1号,如01-jan-04–Trunc(sysdate,’date’)截断到最近的星期天–Trunc(sysdate)舍入到最近的天,即sysdate–Greatest•Greatest(d1,d2…,)该函数返回最晚日期–New_time•显示日期列或日期常数在其他时区的时间和日期new_time(date,’this’,’other’)其中this为当前时区的三个缩写字母,而other是由目标日期所在的时区的三个缩写字母,如:new_time(’13-feb-05’,’est’,’yst’)SQL查询函数•字符函数–Initcap(char)--将首字母转化为大写–Lower(char)--将查询信息全部转化为小写–Upper(char)–将查询信息全部转为大写–Ltrim(char,set)–从左边起将字符中的与set相同的一段替换为空格(截取掉)–Rtrim(char,set)–从右边起将字符中的与set相同的一段替换为空格(截取掉)–Translate(char,from,to)将字符中的那些字替换掉–Replace(char,searchstring,[repstring])将字符串中的所有与searchstring相同的字符替换为repstring字符–Substr(char,m,n)截取字符–Concat(expr1,expr2)合并两个字符信息SQL查询函数•字符函数–LPAD填充函数•LPAD(‘function’,8,’=’)从左边起填充•RPAD(‘function’,9,’=’)从右边起填充–Decode•逐行替换值•Decode(字符,‘成立条件’,’替换内容’)–Length函数•返回一个字符串的长度SQL查询函数•数字函数–Abs返回绝对值–Ceil舍去小数–floor(n)小于等于数值n的最大整数–round(n,m)将n四舍五入,保留小数点后m位–Power(m,n)某函数的次方–Mod(m,n)函数返回一个值除以另一个值后的余数–Sign返回值的符号负数为-1SQL查询函数•转换函数–To_char(d,n,[fmt])d是日期、n是数字、fmt是指定日期格式的格式模型•To_char(date,‘YYYY-MM-DDhh24:hi:ss’)•To_char(itemrate,‘$99,999’)–To_date(char,[,fmt])将字符串转化为日期•To_number函数可以将包含的字符转化为数字SQL查询函数•常规函数–NVL(exp1,exp2)•如果exp1为null,则nvl将返回exp2,否则只返回exp1,如果exp1与exp2不为同一类型,则oracle会将exp2自动转化为exp1类型–NULLIF(exp1,exp2)•如果exp1等于exp2则返回空–NVL2(exp1,exp2,exp3)•如果exp1不为空,则返回exp2•如果exp1为空,则返回exp3–COALESCE(exp1,exp2,exp3….expn)•返回列表中第一个非空表达式集合操作符•Union返回查询所选定的所有的行,去重复的–Selectordernofromorder_master–Union–Selectordernofromorder_detail•Unionall返回两个查询所选定的所有行,包括重复行–Selectordernofromorder_master–Unionall–Selectordernofromorder_detail•Intersect仅返回两个查询都有的行–Selectordernofromorder_master–Intersect–Selectordernofromorder_detail•Minus返回仅由第一个查询选定并且没有被第二个查询选定的所有不同行–Selectordernofromorder_master–Minus–Selectordernofromorder_detailOracle---视图•视图是一个经过定制的表示方式,用来显示包含在一个或多个表(或其他试图)中的数据。视图获取查询的输出结果,并将其作为表来处理。可以视为“已存储的查询”或“虚拟表”•Create[ORREPLACE][FORCE/NOFORCE]VIEWview–Assubquery–[WITHCHECKOPTION[CONSTRAINTconstraint]]–[WITHREADONLY[CONSTRAINTconstraint]];Oracle---视图•ORREPLACE:如果视图已存在,此选项将重新创建该视图•FORCE:无论基表是否存在,都将创建视图•NOFORCE:这是默认值,仅当基表存在的时候才创建视图•VIEW表示要创建的视图名称•WITHCHECKOPTION:只能插入或更新视图可以访问的行。术语constraint表示为CHECKOPTINON约束指定的名字•WITHREADONLY:确保不能在此视图上执行任何DML操作.Oracle---视图•Oracle还可以通过联接多个表来创建视图,任何UPDATE、INSERT或DELETE语句都只能修改一个底层的基表(不过可以通过INSTEADOF触发器实现操作)Oracle---视图•视图中还可以使用单行函数(由数字、字符、日期组成)、分组函数和表达式•视图的查询不能选择伪列•如果视图的查询中包含联接(键保留表除外)、集合操作符、分组函数或DISTINCT子句,则不能执行删除、更新和插入操作•在视图中所作的修改将影响基表,反之亦然•分组函数和GROUPBY子句也可以包含在视图中•使用函数时,应为列指定一个别名,如上面的示例所示Oracle---视图•分区视图----数据存储在单独的表中。在运行期间,通过使用关系操作符UNIONALL,可以将这些表联合起来。•删除视图----–DropVIEW命令Oracle---序列•序列是Oracle提供的一个对象,可以用来生成唯一、连续的整数•Createsequenceseq–[INCREMENTBYn]---序列号之间的间隔–[STARTWITHn]---第一个序列号–[{MAXVALUEn/NOMAXVALUE}]---可生成的最大值–[{MINVALUEn/NOMINVALUE}]---序列最小值–[{CYCLE/NOCYCLE}]---当序列达到最小或最大值后是否重新开始生成值–[{CACHEn/NOCACHE}];---是否使用缓存Oracle---序列•访问序列–Oracle提供了currval和nextval伪列来访问该序列的值•Nextval---创建序列后第一次使用nextval的时候,将返回该序列的初始值,以后每次引用nextval时,将使用incrementby子句的值来增加序列值,并返回这个新值•Currval---返回序列的当前值Oracle---序列•修改序列–通过alertsequence语句来修改序列定义•设置或删除MINVALUE或MAXVALUE•修改增量值•修改缓存中的序列号的数目•不能包含startwith参数值–Altersequencesequ•[INCREMENTBYn]•[MACVALUEn/NOMAXVALUE]•[MINVALUEn/NOMINVALUE]•[CYCLE/NOCYCLE]•[CACHEn/NOCACHE];Oracle---序列•删除序列–DropsequencesequOracle---伪列•Oracle提供了一种在表结构中不实际存在列,称为伪列–Nextval–Currval–ROWNUM•oracle系统顺序分配为从查询返回的行的编号•当不能已其他表的别名来做前缀名–ROWID•rowid就是唯一标志记录物理位置的一个id•data_object_id#+rfile#+block#+row#组成,占用10个bytes的空间–LEVEL•仅仅用在对表执行层次树遍历的SELECT语