O管理O存储过程_第1页
O管理O存储过程_第2页
O管理O存储过程_第3页
O管理O存储过程_第4页
O管理O存储过程_第5页
已阅读5页,还剩79页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

alcegoracle特点。从这里开始oracle之旅!arSQL>createtabletest_char(colAchar(10));SQL>insertintotest_charvalues('a');SQL>insertintotest_charvalues('aa');SQL>insertintotest_charvalues('aaa');SQL>insertintotest_charvalues('aaaa');SQL>insertintotest_charvalues('aaaaaaaaaa');SQL>insertintotest_charvalues('aaaaaaaaaaa');insertintotest_charvalues('aaaaaaaaaaa'):10)nen97,32,32,32,32,32,32,32,32,32表示内部存储方式。可见oracle的内部存储是以数据库字符集进行存储的。a要想知道一个字符的ASCII码,可以使用函数asciiSQL>selectascii('a')fromdual;ASCII('A')32正好是空格的ascii码值。harOracle单位是字节。可见一个汉字在oracle中是占用了两个字节的。英文字母或符号只占用一个字节。1.创建一个表,只有一列,类型为varchar2,长度为10SQL>createtabletest_varchar(colvarchar2(10));2.插入一些数据SQL>insertintotest_varcharvalues('a');SQL>insertintotest_varcharvalues('aa');SQL>insertintotest_varcharvalues('aaa');SQL>insertintotest_varcharvalues('aaaaaaaaaa');SQL>insertintotest_varcharvalues('aaaaaaaaaaa');后面是具体的存储值。填充。一个字符占用多少个字节,是由当前系统采用的字符集来决定的。如一个汉字占用两个字节。Createtabletest_varchar(col_charvarchar2(10char));这样相对简单一些。在数据库表设计时需要注意。SQL>createtabletest_varchar2(col_charvarchar2(10char),col_bytevarchar2(10byte));SQL>insertintotest_varchar2values('a','a');SQL>insertintotest_varchar2values('袁','a');SQL>insertintotest_varchar2values('袁袁袁袁袁袁袁袁袁袁','aaaaaaaaaa');SQL>insertintotest_varchar2values('袁袁袁袁袁袁袁袁袁袁','袁袁袁袁袁袁袁袁袁袁');insertintotest_varchar2values('袁袁袁袁袁袁袁袁袁袁','袁袁袁袁袁袁袁袁袁袁')a第二次,在col_char列插入字符’袁’,在col_byte插入字符a第四次,在两列中都插入中文字符’袁’时,报错了。第二列长度不够。袁袁袁袁袁袁袁袁尽管我们在定义的时候是采用varchar2(10,char).定了该字段所占的字节数。varcharcharvarchar(20).不信,我们可以试试看。段长度的问题。bSQL>selectlengthb('袁')fromdual;2SQL>createtabletest_char_varchar(char_colchar(20),varchar_colvarchar2(20));SQL>insertintotest_char_varcharvalues('HelloWorld','HelloWorld');arol.似乎char和varchar类型没有什么两样。再看看下面的语句。这已经看出他们并不一样,这涉及到字符串比较的问题。larcharcol转换。如果要让char_col列与varchar_col列相等。有两种方法。trim把char_col列的空格去掉。trimcharcolvarcharcol如果使用trim函数,如果char_col列上有索引,那么索引将不可用了。此外还会在绑定变量时出现问题。这两种类型的长度指的是字符数,而不是字节数。SQL>createtabletest_nvarchar(col_ncharnchar(10),col_nvarchar2nvarchar2(10));2.插入一些数据SQL>insertintotest_nvarcharvalues('袁','袁光东');SQL>insertintotest_nvarcharvalues(N'袁',N'袁光东');SQL>insertintotest_nvarcharvalues('a','b');3.查看每行的col_nchar列的存储方式。袁Typ=96Len=20:136,129,0,32,0,32,0,32,0,32,0,32,0,32,0,32,0,32,0,32aTyp=96Len=20:0,97,0,32,0,32,0,32,0,32,0,32,0,32,0,32,0,32,0,32袁Typ=96Len=20:136,129,0,32,0,32,0,32,0,32,0,32,0,32,0,32,0,32,0,32:统统以两位来表示一个字符。136,129表示’袁’0,97表示’a’0,32表示空格。每一行的len值都不样同。不会使用空格进行填充。每一个字符都占有两个字节两进行存储。存储着它的字节数。在查看数据表结构时,显示该列最大占用的字节数。符集,就有了不同的字符编码。SQL>insertintotest_varcharvalues('袁');这里很容易的把它转换成ascii码。袁SQL>insertintotest_nvarcharvalues('袁','袁');'袁';码。符集转换。SQL>createtabletest_raw(col_chrvarchar2(10),col_rawraw(10));SQL>insertintotest_rawvalues('aa','aa');通过上面的分析,虽然我们通过select查询得到的结果,raw列显示为插入的字符。但是的值。SQL>insertintotest_rawvalues('h','h');insertintotest_rawvalues('h','h')p:1---38s:-84---127点和负号不计入有效位数。0insertintot_nvalues(1234.56)*insertintot_nvalues(1)*insertintot_nvalues(.1)*0th是数值实际位数(含小数点)insertintot_nvalues(12345678)*果没有指定精度,小数位默认为最大的取值区间.如果指定了精度,没有指定小数位。小数位默认为0(即没有小数位).精度和小数位不会影响数据如何存储,只会影响允许哪些数值及数值如何舍入。1.新建一个表2.插入一些不同的数据ervalues3.查看结果5.查看存储结构如果指定了精度,显示结果与精度相关。insertintotest_numbervalues(0);除了第一位标志位外,其它的都是数值为了。每一位的实际值。1.0的存储结构为:位标志位,和数值位(第二位)来决定的。当存储的数是一个正数,该数值的前几位为:第一位*power(100,(标志位-193));当存储的数是一个负数,该数值的前几位为:第一位*power(100,(62–标志位));所以前四位为整数位,后面的为小数位。精度与小数位的关系。精度并不是小数位加整数位之和。。r看看它可以存放的数据。s报错了,精度不够。SQL>insertintotest_number1values('0.9',0.9);注意插入数值0.9后,存储为1.这就是小数位的作用。在哪里进行舍入。带小数位和精度的情况。luesinsertintotest_number2values('0.111',0.111)lues看看插入的值。0.000.就已经超过了精度。r现在终于有点明白小数位与精度的关系了。:位为负数。入。我们看看它的结果,看它是怎么舍入的。s现在应该明白了精度和小数位的关系了吧。告诉系统保留多少位小数,从哪里开始舍入。精度舍入后,从舍入的位置开始,数值中允许有多少位。硬盘上(CPU,芯片)上执行运行。而不是在oracel进程中运算。如果希望在一个科学计算中值。lebinary_double);2SQL>selectto_char(col_number),to_char(col_float),to_char(col_double)fromtest_fuble35------------------------------------------------------------------------------由此可见,binary_float无法表示这个数。Binary_float和binary_double无法用于对精度要求高的数据。提升。了。ce分秒SQL>createtabletest_date(col_datedate);s'));n数据存储的每一位到第七位分别为:世纪,年,月,日,时,分,秒。0SQL>insertintotest_datevalues(to_date('-4712-01-01','syyyy-mm-ddhh24:mi:ss'));e;SQL>createtabletest_date1(col_charvarchar2(12),col_datedate);SQL>insertintotest_date1values('full',to_date('2008-06-2712:01:00','yyyy-mm-ddhh24:mi:ss'));SQL>insertintotest_date1(col_char,col_date)select'minute',trunc(col_date,'mi')f2unionall3select'day',trunc(col_date,'dd')fromtest_date14unionall5select'month',trunc(col_date,'mm')fromtest_date16unionall7select'year',trunc(col_date,'y')fromtest_date18;daten数。通过会这样写。fromtestdatewheretocharcoldateyyyy用trunc会占用更少的资源,性能更优。也有索引,我们希望能够用上这个索引。5依此类推。来处理。3.2.1增加秒SQL>createtabletest_date2(idvarchar2(10),operate_timedate);SQL>insertintotest_date2values('1',sysdate);1;1;3.2.2增加分1;3.2.3增加小时1;3.2.4增加天1;3.2.4增加周1;3.2.5增加月1;3.2.6增加年1;reid=1;1;Numtodsintervaln,'second')获得秒的时间间隔Numtodsinterval(n,'minute')获得分的时间间隔Numtodsinterval(n,'year')获得月的时间间隔也会出现类似的问题n如果指定了保留小数位数,那情况就大不一样了。mp24:mi:ss.ff'))2;.tanpSQL>insertintotest_timeltzvalues(timestamp'2008-06-2912:03:22.111US/Pacific',ticific');SQL>select*fromtest_timeltz;endate区转换.一旦你的数据表中有一列使用了timestampwithlocaltimezone,你就不能再改变数据库时通用协调时(UTC,UniversalTimeCoordinated),UTC与格林尼治平均时Lextract很容易的获得时间的每个部分.lual;另外可以使用to_yminterval(‘1-2’)函数来进行转换.SQL>createtabletest_intervarym(col_intervalintervalyeartomonth);harym要减去60.SQL>createtabletest_intervalds(col_dsintervalday(9)tosecond(9));SQL>insertintotest_intervaldsvalues(numtodsinterval(1,'second'));SQL>insertintotest_intervaldsvalues(numtodsinterval(1.000000001,'second'));SQL>selectcol_ds,dump(col_ds)fromtest_intervalds;BFILELOB的文件存储在操作系统中.SQL>createtabletest_lob(idintprimarykey,remarkclob);结果

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论