oracle操作大对象

合集下载

to_clob函数

to_clob函数

to_clob函数
to_clob函数是Oracle数据库提供的一种数据转换函数,它的功能主要是将字符串转换为大型数据对象,称为字符对象(Clob)。

to_clob函数可以接受任何类型的字符串输入,并将其转换为一个大型字符对象,以便在Oracle数据库中进行读写操作和查询。

to_clob函数是Oracle数据库中很常用的一种函数,它主要功能就是实现字符串和字符大对象之间的转换,它可以接受各种类型的字符串,包括字符、数字和日期等所有类型的字符数据。

在Oracle 中,只要创建了一个字符大对象,就可以使用to_clob函数将输入的字符串转换为字符大对象,这就可以节省大量的空间,提高数据库的性能。

to_clob函数也具有一些其它功能,例如把字符串转换为unicode字符串,以便跨语言环境使用,也可以把特殊字符转换为十六进制数,以节省空间。

除此之外,使用to_clob函数还可以把字符串中大写和小写字母转换为全部大写或全部小写,以及把字符串中的字符替换为其他字符,这些都能极大的提高Oracle的操作效率。

虽然to_clob函数已经提供了十分强大的功能,但是在使用过程中,还是应该注意一些安全措施,以避免出现一些安全问题,例如保证使用正确的字符集,以确保使用过程中不会出现乱码现象;适时关闭外部存储方式,防止外部程序对字符对象造成损害;以及通过使用触发器、特定约束条件等方式来保证字符大对象的完整性。

总之,以上就是Oracle中to_clob函数的具体介绍,它的功能
主要是将字符串转换为字符大对象,具有十分强大的功能,可以极大的提高Oracle的操作效率,但是使用时也应该注意一些安全措施,以保证使用过程的完整性和安全性。

oracle 的数据类型

oracle 的数据类型

Oracle的数据类型一、概述在Oracle数据库中,数据类型是定义列或变量的属性,用于存储不同类型的数据。

数据类型在数据库设计和数据存储过程中起着关键的作用。

Oracle提供了丰富的数据类型,包括数值类型、字符类型、日期类型、大对象类型等。

本文将详细介绍Oracle的各种数据类型及其特点。

二、数值类型1. NUMBERNUMBER是Oracle中最常用的数值类型。

它可以存储任意精度的数值,包括整数和小数。

以下是一些常见的NUMBER类型的子类型:•NUMBER(precision): 存储精度为precision的数值。

•NUMBER(precision, scale): 存储精度为precision且小数位数为scale的数值。

2. INTEGERINTEGER是一种整数类型,它只能存储整数值。

它可以使用以下子类型:•INTEGER(precision): 存储精度为precision的整数值。

3. BINARY_FLOAT和BINARY_DOUBLEBINARY_FLOAT和BINARY_DOUBLE是用于存储浮点数的数据类型。

BINARY_FLOAT用于单精度浮点数,BINARY_DOUBLE用于双精度浮点数。

1. CHARCHAR是一种定长字符类型,它可以存储固定长度的字符串。

在创建CHAR类型的列或变量时,必须指定长度。

2. VARCHAR2VARCHAR2是一种可变长度字符类型,它可以存储可变长度的字符串。

在创建VARCHAR2类型的列或变量时,必须指定最大长度。

3. CLOBCLOB是用于存储大文本对象的数据类型。

它可以存储最大长度为4GB的文本数据。

四、日期类型1. DATEDATE是Oracle中用于存储日期和时间的数据类型。

它存储的范围从公元前4712年到公元9999年。

2. TIMESTAMPTIMESTAMP用于存储日期和时间,精确到纳秒级别。

它包括以下子类型:•TIMESTAMP: 存储日期和时间,精确到秒级别。

Oracle对象类型详解

Oracle对象类型详解

Oracle对象类型详解抽象数据类型1、创建类型--地址类型CREATE OR REPLACE TYPE AddressType AS OBJECT(Country varchar2(15),City varchar2(20),Street varchar2(30));2、类型嵌套--创建基于前⼀个类型的新的抽象数据类型:巨星类型CREATE OR REPLACE TYPE SuperStarType AS OBJECT(StarName varchar2(30),Address AddressType);3、基于抽象类型创建关系表CREATE TABLE SuperStar(StarID varchar(10),Star SuperStarType);4、基于抽象类型创建对象表CREATE TABLE SuperStarObj of SuperStarType;5、使⽤构造⽅法在表中插⼊记录INSERT INTO SuperStar VALUES(''001'',SuperStarType(''Zidane'',AddressType(''France'',''Paris'',''People Street NO.1'')));6、查询表中记录(1)SQL> SELECT * FROM SuperStar;STARID----------STAR(STARNAME, ADDRESS(COUNTRY, CITY, STREET))--------------------------------------------------------------------------------001SUPERSTARTYPE(''Zidane'', ADDRESSTYPE(''France'', ''Paris'', ''People Street NO.1''))(2)SELECT s.StarID,s.Star.StarName,s.Star.Address.Country,s.Star.Address.City,s.Star.Address.Street FROM SuperStar s STARID STAR.STARNAME STAR.ADDRESS.CO STAR.ADDRESS.CITY STAR.ADDRESS.STREET---------- ------------------------------ --------------- -------------------- ---------------------001 Zidane France Paris People Street NO.17、抽象数据类型的继承(1)创建⼀个类型CREATE OR REPLACE TYPE PersonType AS OBJECT(PersonName varchar(10),PersonSex varchar(2),PersonBirth date) not final;(2)派⽣⼀个类型CREATE OR REPLACE TYPE StudentType UNDER PersonType(StudentNO int,StudentScore int);(3)查看数据字典SQL> DESC StudentTypeStudentType extends SYS.PERSONTYPEName------------------------------------------------------------------------------PERSONNAMEPERSONSEXPERSONBIRTHSTUDENTNOSTUDENTSCORE(4)创建对象表CREATE TABLE student OF StudentType;(5)向对象表中插⼊数据INSERT INTO student VALUES(''Rose'',''nv'',to_date(''1983-05-02'',''yyyy-mm-dd''),1001,98);(6) 查询数据SQL> SELECT * FROM student;PERSONNAME PE PERSONBIR STUDENTNO STUDENTSCORE---------- -- --------- ---------- ------------Rose nv 02-MAY-83 1001 98⼆、可变数组1、创建带有可变数组的表(1)创建可变数组的基类型CREATE OR REPLACE TYPE MingXiType AS OBJECT(GoodID varchar2(20),InCount int,ProviderID varchar(20));(2)创建嵌套项类型的可变数组CREATE OR REPLACE TYPE arrMingXiType AS VARRAY(100) OF MingXiType;(3)创建⼀个主表CREATE TABLE InStockOrder(OrderID varchar(15) Not Null Primary Key,InDate date,OperatorID varchar(15),MingXi arrMingXiType);2、操作可变数组(1)插⼊数据INSERT INTO InStockOrderVALUES(''200710110001'',TO_DATE(''2007-10-11'',''YYYY-MM-DD''),''007'', arrMingXiType(MingXiType(''G001'',100,''1001''),MingXiType(''G002'',888,''1002'')));(2)查询数据SQL> SELECT * FROM InStockOrder;ORDERID INDATE OPERATORID--------------- --------- ---------------MINGXI(GOODID, INCOUNT, PROVIDERID)----------------------------------------------------------------------200710110001 11-OCT-07 007ARRMINGXITYPE(MINGXITYPE(''G001'', 100, ''1001''), MINGXITYPE(''G002'', 888, ''1002'') (3)使⽤Table()函数SQL> SELECT * FROM Table(SELECT t.MingXi FROM InStockOrder tWHERE t.OrderID=''200710110001'');GOODID INCOUNT PROVIDERID-------------------- ---------- --------------------G001 100 1001G002 888 1002(4)修改数据UPDATE InStockOrderSET MingXi=arrMingXiType(MingXiType(''G001'',200,''1001''),MingXiType(''G002'',8888,''1002''))WHERE OrderID=''200710110001''注意:不能更新VARRAY中的单个元素,必须更新整个VARRAY三、嵌套表1、创建嵌套表(1)创建嵌套表的基类型CREATE OR REPLACE TYPE MingXiType AS OBJECT(GoodID varchar2(20),InCount int,ProviderID varchar(20)) not final;(2)创建嵌套表类型CREATE OR REPLACE TYPE nestMingXiType AS TABLE OF MingXiType;(3)创建主表,其中⼀列是嵌套表类型CREATE TABLE InStockTable(OrderID varchar(15) Not Null Primary Key,InDate date,OperatorID varchar(15),MingXi nestMingXiType) Nested Table MingXi STORE AS MingXiTable;2、操作嵌套表(1)向嵌套表中插⼊记录INSERT INTO InStockTableVALUES(''20071012001'',TO_DATE(''2007-10-12'',''YYYY-MM-DD''),''007'',nestMingXiType(MingXiType(''G003'',666,''1001''),MingXiType(''G004'',888,''1002''),MingXiType(''G005'',8888,''1003'')));(2)查询数据SQL> SELECT * FROM InStockTable;ORDERID INDATE OPERATORID--------------- --------- ---------------MINGXI(GOODID, INCOUNT, PROVIDERID)----------------------------------------------------------------------------------------------------20071012001 12-OCT-07 007NESTMINGXITYPE(MINGXITYPE(''G003'', 666, ''1001''), MINGXITYPE(''G004'', 888, ''1002''), MINGXITYPE(''G005'', 8888, ''1003'') (3)使⽤Table()函数SQL> SELECT * FROM Table(SELECT T.MingXi FROM InStockTable tWHERE OrderID=''20071012001'')GOODID INCOUNT PROVIDERID-------------------- ---------- --------------------G003 666 1001G004 888 1002G005 8888 1003(4)更新嵌套表中的数据UPDATE Table(SELECT t.MingXi FROM InStockTable t WHERE OrderID=''20071012001'') ttSET tt.InCount=1666 WHERE tt.GoodID=''G003'';(5)删除表中数据DELETE Table(SELECT t.MingXi FROM InStockTable t WHERE OrderID=''20071012001'') ttWHERE tt.GoodID=''G003''四、对象表1、创建对象表CREATE TABLE ObjectTable OF MingXiType;2、向表中插⼊数据INSERT INTO ObjectTable VALUES(''G001'',500,''P005'');INSERT INTO ObjectTable VALUES(''G002'',1000,''P008'');3、查询对象表中的记录A 直接查询SQL> SELECT * FROM ObjectTable;GOODID INCOUNT PROVIDERID-------------------- ---------- ---------------G001 500 P005G002 1000 P008B ⽤VALUE()函数查询SQL> SELECT VALUE(O) FROM ObjectTable O;VALUE(O)(GOODID, INCOUNT, PROVIDERID)------------------------------------------MINGXITYPE(''G001'', 500, ''P005'')MINGXITYPE(''G002'', 1000, ''P008'')4、查看对象标志符(OID)A REF操作符引⽤⾏对象SQL> SELECT REF(t) FROM ObjectTable t;REF(T)--------------------------------------------------------------------------------0000280209771F103ED34842478A9C439CDAEFEF6324B0ACF849F14BD7A8B52F4B0297D1C90040A9 5A00000000280209A2D3359E0F0C44B3AF652B944F8823F524B0ACF849F14BD7A8B52F4B0297D1C90040A9 5A0001B 将OID⽤于创建外键CREATE TABLE Customer( CustomerID varchar(10) PRIMARY KEY,CustomerName varchar(20),CustomerGoods REF MingXiType SCOPE IS ObjectTable,--引⽤MingXiType外键,关联的是OID的值CustomerAddress varchar(20));C 向Customer表中插⼊数据,此表将从上⾯创建的对象表中引⽤数据INSERT INTO Customer SELECT ''007'',''Yuanhy'',REF(O),''France''FROM ObjectTable OWHERE GoodID=''G001'';D 查询Customer表SQL> SELECT * FROM Customer;CUSTOMERID CUSTOMERNAME---------- --------------------CUSTOMERGOODS-----------------------------------------------------------------------------CUSTOMERADDRESS--------------------007 Yuanhy0000220208771F103ED34842478A9C439CDAEFEF6324B0ACF849F14BD7A8B52F4B0297D1C9 FranceE ⽤DEREF操作符返回对象的值SQL> SELECT CustomerID,CustomerName,DEREF(t.CustomerGoods),CustomerAddress2 FROM Customer t;CUSTOMERID CUSTOMERNAME---------- --------------------DEREF(T.CUSTOMERGOODS)(GOODID, INCOUNT, PROVIDERID)----------------------------------------------------------------------------CUSTOMERADDRESS--------------------007 YuanhyMINGXITYPE(''G001'', 500, ''P005'')France五、对象视图将关系表化装成对象表1、创建对象视图A 创建基于关系表⽗表的对象类型CREATE OR REPLACE TYPE depttype AS OBJECT(deptid number(10),deptname varchar(30),loc number(10));B 创建基于关系表的对象视图CREATE VIEW deptview OF depttype WITH OBJECT OID(deptid) ASSELECT department_id,department_name,location_id FROM dept;C 查询视图SQL> SELECT * FROM deptview;DEPTID DEPTNAME LOC---------- ------------------------------ ----------10 Administration 170020 Marketing 180030 Purchasing 170040 Human Resources 240050 Shipping 150060 IT 140070 Public Relations 2700SQL> select ref(t) from deptview t;REF(T)----------------------------------------------------------------------------------------------------00004A038A004667BAC3685B444520A60ED30027E8F25F0000001426010001000100290000000000090604002A00078401FE 00004A038A004667BAC3685B444520A60ED30027E8F25F0000001426010001000100290000000000090604002A00078401FE 00004A038A004667BAC3685B444520A60ED30027E8F25F0000001426010001000100290000000000090604002A00078401FE 00004A038A004667BAC3685B444520A60ED30027E8F25F0000001426010001000100290000000000090604002A00078401FE 00004A038A004667BAC3685B444520A60ED30027E8F25F0000001426010001000100290000000000090604002A00078401FE 00004A038A004667BAC3685B444520A60ED30027E8F25F0000001426010001000100290000000000090604002A00078401FE 00004A038A004667BAC3685B444520A60ED30027E8F25F0000001426010001000100290000000000090604002A00078401FE 2、创建引⽤视图(类似于关系表创建⼀个从表)CREATE VIEW empview AS SELECT MAKE_REF(deptview,department_id) deptOID,employee_id,first_name,last_name FROM emp;查询对象视图empviewSQL> SELECT * FROM empview;DEPTOID----------------------------------------------------------------------------------------------------EMPLOYEE_ID FIRST_NAME LAST_NAME----------- -------------------- -------------------------00004A038A004667BAC3685B444520A60ED30027E8F25F0000001426010001000100290000000000090604002A00078401FE 100 Steven King00004A038A004667BAC3685B444520A60ED30027E8F25F0000001426010001000100290000000000090604002A00078401FE 101 Neena Kochhar00004A038A004667BAC3685B444520A60ED30027E8F25F0000001426010001000100290000000000090604002A00078401FE 102 Lex De Haan00004A038A004667BAC3685B444520A60ED30027E8F25F0000001426010001000100290000000000090604002A00078401FE 103 Alexander HunoldOracle对象类型也有属性和⽅法.创建对象类型与创建表很相似,只是实际上不为存储的数据分配空间:不带⽅法的简单对象类型:CREATE TYPE type_name as OBJECT (column_1 type1,column_2 type2,...);注意:AS OBJECT创建好对象类型之后,就可以在创建表的时候,使⽤该类型了,如:CREATE TYPE HUMAN AS OBJECT(NAME VARCHAR2(20),SEX VARCHAR2(1),-- F : FEMALE M:MALEBIRTHDAY DATE,NOTE VARCHAR2(300))稍后,可以⽤下⾯的语句查看:SELECT * FROM USER_OBJECTS WHERE OBJECT_TYPE = ''TYPE''CREATE TABLE STUDENTS(GUID NUMBER NOT NULL,STUDENTS HUMAN)此下省去两个Trigger.插⼊数据的时候,可以如下:INSERT INTO STUDENTS (STUDENT) VALUES (HUMAN(''xling'',''M'',TO_DATE(''20060101'',''YYYYMMDD''),''测试''))注意:HUMAN(''xling'',''M'',TO_DATE(''20060101'',''YYYYMMDD''),''测试''),这是个默认的构造函数.如果想选出性别为⼥(F)的记录,可以如下:SELECT * FROM STUDENTS S WHERE S.STUDENT.SEX = ''F''注意:不能写成:SELECT * FROM STUDENTS WHERE STUDENT.SEX = ''F'' 这样会报如下错误:ORA-00904: "STUDENT"."SEX": 标识符⽆效对象类型表:每条记录都是对象的表,称为对象类型表.它有两个使⽤⽅法:1,⽤作只有⼀个对象类型字段的表.2,⽤作具有对象类型字段的标准关系表.语法如下:CREATE TABLE table_name OF object_type;例如:CREATE TABLE TMP_STUDENTS OF HUMAN;⽤DESC TMP_STUDENTS,可以看到它的字段结构和HUMAN的结构⼀样.对象类型表有两个优点:1,从某种程度上简化了对象的使⽤,因为对象表的字段类型与对象类型是⼀致的,所以,不需要⽤对象名来修饰对象属性,可以把数据插⼊对象类型表,就像插⼊普通的关系表中⼀样:INSERT INTO TMP_STUDENTS VALUES (''xling'',''M'',TO_DATE(''20060601'',''YYYYMMDD''),''对象类型表'');当然也可⽤如下⽅法插⼊:INSERT INTO TMP_STUDENTS VALUES (HUMAN(''snow'',''F'',TO_DATE(''20060102'',''YYYYMMDD''),''⽤类型的构造函数''));第⼆个特点是:对象表是使⽤对象类型作为模板来创建表的⼀种便捷⽅式,它可以确保多个表具有相同的结构.对象类型表在:USER_TABLES表⾥是查不到的,⽽在USER_OBJECTS表⾥可以查到,⽽且OBJECT_TYPE = ''TABLE''类型在定义的时候,会⾃动包含⼀个⽅法,即默认的构造器.构造器的名称与对象的名称相同,它带有变量与对象类型的每个属性相对应.对象类型的⽅法:CREATE TYPE type_name AS OBJECT (column1 column_type1,column2 column_type2,... ,MEMBER FUNCTION method_name(args_list) RETURN return_type,...)注意:是MEMBER FUNCTION,(当然,也可是MEMBER PROCEDURE,没有返回值)和包(PACKAGE)⼀样,如果对象类型有⽅法的话,还要声明⼀个BODY:CREATE TYPE BODY type_name ASMEMBER FUNCTION method_name RETURN return_type {AS | IS}variable declareations..BEGINCODE..RETURN return_value;END;//END MEMBER FUNCTION...END;//END TYPE BODY如下所⽰:CREATE TYPE HUMAN AS OBJECT(NAME VARCHAR2(20),SEX VARCHAR2(1),-- F : FEMALE M:MALEBIRTHDAY DATE,NOTE VARCHAR2(300),MEMBER FUNCTION GET_AGE RETURN NUMBER)--BODYCREATE TYPE BODY HUMAN ASMEMBER FUNCTION GET_AGE RETURN NUMBER ASV_MONTHS NUMBER;BEGINSELECT FLOOR(MONTHS_BETWEEN(SYSDATE,BIRTHDAY)/12) INTO V_MONTHS FROM DUAL;RETURN V_MONTHS;END;END;注意:BODY的格式,不是AS OBJECT,也不是⽤⼩括号括起来的.MEMBER FUNCTION 后的AS或IS不能省略.还以STUDENTS表为例(注:如果类型以被某个表使⽤,是不能修改的,必须把相关的表删除,然后把类型删除,在⼀个⼀个新建,这⾥就省略了,参见前⽂所述)SELECT S.STUDENT.GET_AGE() FROM STUDENTS S在提起注意:表名⼀定要有别名.GET_AGE()的括号不能省略,否则会提⽰错误.下⾯演⽰在⼀个匿名过程中的使⽤情况:SET SERVEROUTPUT ONDECLAREAA HUMAN;AGE NUMBER;BEGINAA := HUMAN(''xingFairy'',''M'',TO_DATE(''19830714'',''YYYYMMDD''),''过程'');AGE := AA.GET_AGE();DBMS_OUTPUT.PUT_LINE(AGE);END;映射⽅法:映射⽅法是⼀种不带参数,并返回标准的标量Oracle SQL数据类型的⽅法,如NUMBER,VARCHAR2,Oracle将间接地使⽤这些⽅法执⾏⽐较运算.映射⽅法最重要的⼀个特点是:当在WHERE或ORDER BY等⽐较关系⼦句中使⽤对象时,会间接地使⽤映射⽅法.映射⽅法的声明只过是在普通⽅法声明的前⾯加⼀个 MAP⽽以,注意:映射⽅法是⼀种不带参数的⽅法.MAP MEMBER FUNCTION function_name RETURN return_type修改前⽂提到的HUMAN类型:--映射⽅法 MAPCREATE TYPE HUMAN AS OBJECT(NAME VARCHAR2(20),SEX VARCHAR2(1),-- F : FEMALE M:MALEBIRTHDAY DATE,--注册⽇期 REGISTERDAY DATE,NOTE VARCHAR2(300),MEMBER FUNCTION GET_AGE RETURN NUMBER,MAP MEMBER FUNCTION GET_GRADE RETURN NUMBER)CREATE TYPE BODY HUMAN AS-----------------------MEMBER FUNCTION GET_AGE RETURN NUMBER ASV_MONTHS NUMBER;BEGINSELECT FLOOR(MONTHS_BETWEEN(SYSDATE,BIRTHDAY)/12) INTO V_MONTHS FROM DUAL;RETURN V_MONTHS;END;------------------------MAP MEMBER FUNCTION GET_GRADE RETURN NUMBER ASBEGINRETURN MONTHS_BETWEEN(SYSDATE,BIRTHDAY);END;END;插⼊数据:INSERT INTO STUDENTS (STUDENT) VALUES(HUMAN(''xling'',''M'',TO_DATE(''19830714'',''YYYYMMDD''),TO_DATE(''20020915'',''YYYYMMDD''),''测试MAP⽅法''));INSERT INTO STUDENTS (STUDENT) VALUES(HUMAN(''fairy'',''M'',TO_DATE(''19830714'',''YYYYMMDD''),TO_DATE(''20010915'',''YYYYMMDD''),''测试MAP⽅法''));INSERT INTO STUDENTS (STUDENT) VALUES(HUMAN(''snow'',''M'',TO_DATE(''19830714'',''YYYYMMDD''),TO_DATE(''20020915'',''YYYYMMDD''),''测试MAP⽅法''));在执⾏上⾯的操作后,⽤下⾯这个SELECT语句可以看出映射⽅法的效果:SELECT ,S.STUDENT.GET_GRADE() FROM STUDENTS S ORDER BY STUDENT它是按MAP⽅法GET_GRADE()的值进⾏排序的.注意是ORDER BY STUDENT,在提起⼀次需要注意,⼀定要⽤表的别名,⽅法后的括号不能省略,即使没有参数.如果想以MAP⽅法的结果为条件,可以如下:SELECT ,S.STUDENT.GET_GRADE() FROM STUDENTS S WHERE S.STUDENT.GET_GRADE() > 50 SELECT ,S.STUDENT.GET_GRADE() FROM STUDENTS S WHERE STUDENT >HUMAN(NULL,NULL,NULL,TO_DATE(''20020101'',''YYYYMMDD''),NULL);排序⽅法:先说⼀下SELF,Oracle⾥对象的SELF和JAVA⾥的this是同⼀个意思.对象的排序⽅法具有⼀个与对象类型相同的参数,暂称为ARG1,⽤于和SELF对象进⾏⽐较.如果调⽤⽅法的SELF对象⽐ARG1⼩,返回负值,如果相等,返回0,如果SELF⼤于ARG1,则返回值⼤于0.--映射⽅法 MAPCREATE TYPE HUMAN AS OBJECT(NAME VARCHAR2(20),SEX VARCHAR2(1),-- F : FEMALE M:MALEBIRTHDAY DATE,REGISTERDAY DATE,NOTE VARCHAR2(300),MEMBER FUNCTION GET_AGE RETURN NUMBER,ORDER MEMBER FUNCTION MATCH(I_STUDENT IN HUMAN) RETURN NUMBER)CREATE TYPE BODY HUMAN AS-----------------------MEMBER FUNCTION GET_AGE RETURN NUMBER ASV_MONTHS NUMBER;BEGINSELECT FLOOR(MONTHS_BETWEEN(SYSDATE,BIRTHDAY)/12) INTO V_MONTHS FROM DUAL;RETURN V_MONTHS;END;------------------------ORDER MEMBER FUNCTION MATCH(I_STUDENT IN HUMAN) RETURN NUMBER ASBEGINRETURN REGISTERDAY - I_STUDENT.REGISTERDAY;END;END;注意:在声明的时候,ORDER⽅法的参数类型要和SELF的类型⼀致.SET SERVEROUTPUT ONDECLARES1 HUMAN;S2 HUMAN;BEGINS1 := HUMAN(''xling'',NULL,NULL,TO_DATE(''20020915'',''YYYYMMDD''),NULL);S2 := HUMAN(''snow'',NULL,NULL,TO_DATE(''20010915'',''YYYYMMDD''),NULL);IF S1 > S2 THENDBMS_OUTPUT.PUT_LINE();ELSIF S1 < S2 THENDBMS_OUTPUT.PUT_LINE();ELSEDBMS_OUTPUT.PUT_LINE(''EQUAL'');END IF;END;注意S1 和 S2是怎么⽐较的.映射⽅法具有效率⽅⾯的优势,因为它把每个对象与单个标量值联系在⼀起;排序⽅法有灵活⽅⾯的优势,它可以在两个对象之间进⾏任意复杂的⽐较.排序⽅法⽐映射⽅法的速度慢.。

oracle LOB 大对象的表Move方法

oracle LOB 大对象的表Move方法
retention应用了automatic undo mode中的undo_retention通过时间来管理lob镜像空间.
pctversion和retention不能同时被指定.建议数据库在automatic undo mode下使用retention参数。
FREEPOOLS integer:给LOG segment指定free list.RAC环境下integer为实例的个数.单实例环境下为1.在automatic undo mode下oracle默认采用
TABLESPACE lob_test
DISABLE STORAGE IN ROW
CHUNK 16384
RETENTION
FREEPOOLS 1
NOCACHE);
SQL> ALTER TABLE TEST MOVE LOB(D) STORE AS TEST_D (
TABLESPACE lob_test
LOB段也可以利用move来重整数据,以下的语句会将表与lob字段move到指定的表空间:
storage as ( CHUNK bytes )表示对于disable storage in row的这部分,最小的LOB块的大小,必须是数据库块(DB_BLOCK_SIZE)的整数倍。一个chunk最多只保留一行LOB数据,也就是说,如果你设置了32K的CHUNK,但是如果LOB字段大小只有4K,也将占用32K的空间
SQL> desc test
SQL> SELECT segment_name,tablespace_name,segment_type FROM dba_segments WHERE tablespace_name='TEST';

oracle序列达到最大值处理方法

oracle序列达到最大值处理方法

一、概述在使用Oracle数据库时,序列(Sequence)是一个非常重要的对象,用来生成唯一的连续数字。

但是在实际的数据库应用中,我们经常会遇到序列达到最大值的情况,这时就需要针对这一问题进行处理。

本文将介绍在Oracle数据库中处理序列达到最大值的方法。

二、序列达到最大值的问题1. 什么是序列达到最大值?当一个序列达到其定义的最大值时,再次使用该序列生成值会导致错误,这是因为超出了序列的范围,这就是序列达到最大值的问题。

2. 为什么会出现序列达到最大值的问题?在实际的数据库操作中,特别是在大型系统中,由于数据的增删改查频繁进行,序列的使用也会相应增加。

而如果对序列表进行不当的管理和规划,就容易出现序列达到最大值的问题。

三、处理方法在Oracle数据库中,我们可以采取以下方法来处理序列达到最大值的问题。

1. 修改序列的增长步长在创建序列时,可以指定其增长步长。

如果已经创建的序列达到了最大值,可以通过修改其增长步长来延长序列的使用寿命。

假设我们的序列名为SEQ_TEST,当前的步长为1,最大值为1000,则可以通过如下语句来修改增长步长:```sqlALTER SEQUENCE SEQ_TEST INCREMENT BY 1000;```这样一来,原本每次加1的序列,现在每次加1000,就可以延长序列的使用寿命。

2. 修改序列的起始值另一种处理序列达到最大值的方法是修改序列的起始值。

可以通过以下语句来修改起始值:```sqlALTER SEQUENCE SEQ_TEST RESTART WITH 1;```这样就会使序列重新从1开始增长,可以继续使用。

不过需要注意的是,在数据库中可能会存在使用到该序列值的表,如果不对这些表进行相应处理,就会导致数据不一致。

3. 创建新的序列如果以上两种方法都无法满足需求,也可以考虑创建一个全新的序列来替换原有的序列。

首先需要创建新的序列,并将原有的序列使用替换成新的序列。

oracle的clob类型

oracle的clob类型

oracle的clob类型一、CLOB类型的概述CLOB是Oracle数据库中的一种数据类型,全称为Character Large Object,即字符大对象。

它可以存储大量的文本数据,最大容量可以达到4GB。

CLOB类型的数据在存储和检索时与普通字符串不同,需要特殊的处理方式。

二、CLOB类型的创建在Oracle数据库中创建一个CLOB类型的字段需要使用CREATE TABLE语句,并指定字段名、数据类型和大小等信息。

例如:CREATE TABLE my_table (id NUMBER,clob_field CLOB);这样就创建了一个名为my_table的表,其中包含一个id字段和一个clob_field字段,clob_field字段的数据类型为CLOB。

三、CLOB类型的插入向CLOB类型字段中插入数据需要使用PL/SQL或Java等编程语言进行操作。

以下是PL/SQL插入示例:DECLAREmy_clob CLOB;BEGINSELECT clob_field INTO my_clob FROM my_table WHERE id = 1 FOR UPDATE;DBMS_LOB.WRITEAPPEND(my_clob, LENGTH('Hello world'),'Hello world');COMMIT;END;这段代码首先从my_table表中查询id为1的记录,并将其对应的clob_field字段赋值给变量my_clob。

然后使用DBMS_LOB.WRITEAPPEND函数将字符串“Hello world”写入到my_clob变量中,并提交事务。

四、CLOB类型的读取从CLOB类型字段中读取数据也需要使用PL/SQL或Java等编程语言进行操作。

以下是PL/SQL读取示例:DECLAREmy_clob CLOB;my_string VARCHAR2(32767);BEGINSELECT clob_field INTO my_clob FROM my_table WHERE id = 1; DBMS_LOB.READ(my_clob, LENGTH(my_clob), 1, my_string);DBMS_OUTPUT.PUT_LINE(my_string);END;这段代码首先从my_table表中查询id为1的记录,并将其对应的clob_field字段赋值给变量my_clob。

oracle lob字段创建语句

oracle lob字段创建语句

一、概述LOB字段(Large Object)是Oracle数据库中用来存储大数据对象的字段类型,包括BLOB(二进制大对象)、CLOB(字符大对象)和NCLOB(国家字符集大对象)。

在实际的数据库设计和应用中,我们经常需要创建LOB字段来存储大量的文本或二进制数据。

本文旨在介绍如何在Oracle数据库中创建LOB字段的语句及相关注意事项。

二、创建BLOB字段的语句在Oracle数据库中创建BLOB字段的语句如下所示:```sqlALTER TABLE table_name ADD column_name BLOB;```其中,table_name是要操作的表名,column_name是要创建的BLOB字段名。

如果要设定BLOB字段的大小限制,可以使用以下语句:```sqlALTER TABLE table_name ADD column_name BLOB (size_spec); ```这里size_spec指定了BLOB字段的大小限制,单位是字节。

需要注意的是,Oracle数据库中的BLOB字段最大支持4GB的存储空间。

三、创建CLOB字段的语句创建CLOB字段的语句与创建BLOB字段的语句类似,如下所示:```sqlALTER TABLE table_name ADD column_name CLOB;```同样地,可以使用size_spec来设定CLOB字段的大小限制:```sqlALTER TABLE table_name ADD column_name CLOB (size_spec); ```需要注意的是,CLOB字段适用于存储大量的字符数据,最大支持4GB的存储空间。

四、创建NCLOB字段的语句NCLOB字段是Oracle数据库中的国家字符集大对象类型,用来存储大量的国家字符集数据。

创建NCLOB字段的语句如下所示:```sqlALTER TABLE table_name ADD column_name NCLOB;```同样地,可以使用size_spec来设定NCLOB字段的大小限制:```sqlALTER TABLE table_name ADD column_name NCLOB (size_spec); ```NCLOB字段同样适用于存储大量的字符数据,最大支持4GB的存储空间。

oracle字段类型查询语句

oracle字段类型查询语句

oracle字段类型查询语句Oracle是一种关系型数据库管理系统,它提供了多种字段类型来存储和处理不同类型的数据。

根据数据的特点和应用需求,我们可以选择合适的字段类型来创建数据库表。

在Oracle中,常见的字段类型包括数值型、字符型、日期型、大对象型和布尔型等。

下面将分别介绍这些字段类型的特点和查询语句。

1. 数值型字段类型Oracle提供了多种数值型字段类型,如整数型、浮点型、小数型等。

常用的数值型字段类型有NUMBER、INTEGER、FLOAT和DECIMAL等。

查询语句示例:创建一个存储整数的字段CREATE TABLE demo (id NUMBER(10));创建一个存储带小数的字段CREATE TABLE demo (price DECIMAL(10, 2));2. 字符型字段类型字符型字段类型用于存储文本数据,如姓名、地址等。

Oracle提供了多种字符型字段类型,如CHAR、VARCHAR2、CLOB等。

查询语句示例:创建一个存储固定长度字符串的字段CREATE TABLE demo (name CHAR(20));创建一个存储可变长度字符串的字段CREATE TABLE demo (comment VARCHAR2(200));3. 日期型字段类型日期型字段类型用于存储日期和时间数据。

Oracle提供了DATE和TIMESTAMP等日期型字段类型。

查询语句示例:创建一个存储日期的字段CREATE TABLE demo (birth_date DATE);创建一个存储日期和时间的字段CREATE TABLE demo (creation_time TIMESTAMP);4. 大对象型字段类型大对象型字段类型用于存储大量的文本数据或二进制数据。

Oracle提供了CLOB和BLOB等大对象型字段类型。

查询语句示例:创建一个存储大文本数据的字段CREATE TABLE demo (description CLOB);创建一个存储大二进制数据的字段CREATE TABLE demo (image BLOB);5. 布尔型字段类型布尔型字段类型用于存储真/假或开/关等逻辑值。

Oracle数据库大对象数据存取的两种实现方法及时间性能比较

Oracle数据库大对象数据存取的两种实现方法及时间性能比较

关键词 : 大对 象 ; 存取 ; 时 间性 能
中 图分 类号 : T P 3 l 1 . 1 3 文献标 识码 : A
BLOB;
O 引 言
当代 , 大数据无处不在, 和云计算、 物联网一样 已经成为计算机学科 中的一个热门研究课题. 随着 高清图像 、 视频 的问世 , 大容量 的存储空间和大数 据 的操作越来越需要研究者去攻克. 本文只是针对 大对象数据在 O r a c l e 数据 库 中的存取着手 , 利用
Vo l _ 3 2 N o . 1
J a n .
2 04 0 2( 2 0 1 4) 0 1- 0 1 1 6—0 3


( 遵义师范学院网络管理 中心 。 贵州 遵义 5 6 3 0 0 0)

要: 随着云计算、 物联 网时代的到来 , 大对象数据的存储和读取将是不得不面对的现实, 系
第3 2卷 第 1 期
2 0 1 4 年 O 1月
佳 木 斯 大 学 学 报 (自 然 科 学 版 )
J o u na r l o f J i a m u s i U n i v e r s i t y( N a t u r a l S c i e n c e E d i t i o n )
1 1 7
J A V A语言由于其跨平台等众多优点, 在当前具有 较大的应用市场 , 也是众多编程爱好者首选的开发
_
b e g i n
i n s e r t i n t o p i e
1 . 1 按 数据 类型 分类 船
创建文件操作 目录 , 用于大对象数据的存取.
c r e a t e o r r e p l a c e d i r e c t o r y P i c a 8 D: \ t e s t . / / 设置 目录

oracle select字段的类型 -回复

oracle select字段的类型 -回复

oracle select字段的类型-回复Oracle是一种常用的关系型数据库管理系统(RDBMS),其查询语言(SQL)是一种用于访问和操作数据库的标准化语言。

在Oracle中,使用SELECT语句可以从数据库表中检索数据。

本文将详细介绍Oracle SELECT字段的类型,并逐步回答相关问题。

首先,我们需要了解什么是字段。

在数据库中,表是由行和列组成的数据结构,列也被称为字段。

每个字段都有一个特定的数据类型,它定义了该字段可以存储的数据的类型和限制。

下面是一些常见的Oracle SELECT字段类型及其用途:1. 字符类型(Character Types):- CHAR:用于存储固定长度的字符数据,最多可以包含2000个字符。

- VARCHAR2:用于存储可变长度的字符数据,最多可以包含4000个字符。

- NCHAR:用于存储固定长度的Unicode字符数据,最多可以包含2000个字符。

- NVARCHAR2:用于存储可变长度的Unicode字符数据,最多可以包含4000个字符。

例:SELECT first_name, last_nameFROM employees;2. 数字类型(Numeric Types):- NUMBER:用于存储数值数据,可以是整数或小数。

- FLOAT:用于存储浮点数,可以存储非常大或非常小的数字。

- INTEGER:用于存储整数数据。

- SMALLINT:用于存储较小范围的整数数据。

例:SELECT employee_id, salaryFROM employees;3. 日期和时间类型(Date and Time Types):- DATE:用于存储日期和时间。

- TIMESTAMP:用于精确到毫秒级别的日期和时间。

- INTERVAL:用于表示两个日期之间的间隔。

例:SELECT hire_date, SYS_EXTRACT_UTC(timestamp_column) FROM employees;4. 大对象类型(Large Object Types):- BLOB:用于存储二进制大对象,如图像、音频和视频。

Oracle

Oracle
Ab t a t l t r u e h t o fe p e sn li d ad t y sr c : n e d c s t e me h d o x r s i g mu tme i a a b
u ig LOB nOrce sn si al。ma p lt gLOB yJ niuai s b DBC、a h x- n ndt ee
a l s s d o e l i t e e t c n lg o m n p a i mp e i u e t xpa n h k y e h o o y f a i u tn l g
L oBs .
大型对 象 是 一 个 存 储 大 量 数 据 的 数 据 库 字 段。 r c 8支持 4种 不 同类 型 的 L B: L B NC O O al e O C O , L B,

中图分类号 : P 1 .3 . T 3 1 14 3
文献标识码 : A
1 引

Itme 的迅 速发 展推动 了企业 的不断信息化, ne t 越
来越多 的企业 MI S中都 出 现 了 图形 、 图像 、 频 、 音 视 声
等 多媒 体信息。 这就要 求 作 为 MI S主要 支撑 的数 据
部 的 L B , 了 避 免 每 次 读 人 多 行 数 据 时 必 须 读 人 O s为
据库 的基础上扩充 了面 向对 象数据 模型 , 加 了表示 增
和管 理多媒体数据 的能 力… 。但 如何使用和操作对象 1

关 系数据库 中的多媒 体数据就成 为一个 迫切需要解
决 的 问题 。 在 此 主 要 讨 论 了 用 O al r c 8的 大 对 象 表 示 e
多媒体数 据和通 过 J B D C操纵 数据 的 方法, 成 功地 并 应用 于双 沟酒业集 团综合信息管理 系统 中。 在数据库

Oracle8i应用程序开发者指南 - 大对象(LOBs)说明书

Oracle8i应用程序开发者指南 - 大对象(LOBs)说明书

Oracle8i Application Developer’s Guide - Large Objects (LOBs), Release 2 (8.1.6)Part No. A76940-01Copyright © 1996, 1999, Oracle Corporation. All rights reserved.Primary Authors: Shelley Higgins, Susan Kotsovolos, Den RaphaelyContributing Authors:Geeta Arora, Sandeepan Banerjee, Thomas Chang, Chandrasekharan Iyer, Ramkumar Krishnan, Dan Mullen, Visar Nimani, Anindo Roy, Rosanne Toohey, Guhan ViswanaContributors:Jeya Balaji, Maria Chien, Christian Shay, Ali Shehade, Sundaram Vedala, Eric Wan, Joyce YangGraphics:Valerie Moore, Charles KellerThe Programs (which include both the software and documentation) contain proprietary information of Oracle Corporation; they are provided under a license agreement containing restrictions on use and disclosure and are also protected by copyright, patent, and other intellectual and industrial property laws. Reverse engineering, disassembly, or decompilation of the Programs is prohibited.The information contained in this document is subject to change without notice.If youfind any problems in the documentation, please report them to us in writing. Oracle Corporation does not warrant that this document is error free. Except as may be expressly permitted in your license agreement for these Programs, no part of these Programs may be reproduced or transmitted in any form or by any means, electronic or mechanical, for any purpose, without the express written permission of Oracle Corporation. If the Programs are delivered to the U.S. Government or anyone licensing or using the programs on behalf of the U.S. Government, the following notice is applicable:Restricted Rights Notice Programs delivered subject to the DOD FAR Supplement are "commercial computer software" and use, duplication, and disclosure of the Programs, including documentation, shall be subject to the licensing restrictions set forth in the applicable Oracle license agreement. Otherwise, Programs delivered subject to the Federal Acquisition Regulations are "restricted computer software" and use, duplication, and disclosure of the Programs shall be subject to the restrictions in FAR 52.227-19, Commercial Computer Software - Restricted Rights (June, 1987). Oracle Corporation, 500 Oracle Parkway, Redwood Shores, CA 94065.The Programs are not intended for use in any nuclear, aviation, mass transit, medical, or other inherently dangerous applications. It shall be the licensee's responsibility to take all appropriate fail-safe, backup, redundancy, and other measures to ensure the safe use of such applications if the Programs are used for such purposes, and Oracle Corporation disclaims liability for any damages caused by such use of the Programs.Oracle is a registered trademark, and PL/SQL, Pro*Ada, Pro*C, Pro*C/C++ , Pro*COBOL, SQL*Forms, SQL*Loader, SQL*Plus,Oracle7, Oracle8, Oracle8i are trademarks or registered trademarks of Oracle Corporation. All other company or product names mentioned are used for identification purposes only and may be trademarks of their respective owners.Contents Send Us Your Comments (xxxix)Preface...........................................................................................................................................................xliInformation in This Guide..................................................................................................................xlii Feature Coverage and Availability...................................................................................................xlii New LOB Features...............................................................................................................................xlii What’s New in This Manual..............................................................................................................xliii Related Guides....................................................................................................................................xliv How This Book Is Organized............................................................................................................xlvi Conventions Used in this Guide......................................................................................................xlviii How to Interpret the Use Case Diagrams............................................................................................l Use Cases Diagram Elements................................................................................................................liii Hot Links From Use Case Diagram to Use Case Diagram..............................................................lx Your Comments Are Welcome...........................................................................................................lxi1 IntroductionWhy Use LOBs?...................................................................................................................................1-2 Unstructured Data........................................................................................................................1-2 LOB Datatype Helps Support Internet Applications..............................................................1-2 Why Not Use LONGs?.......................................................................................................................1-3 LOBs Help Control Semantics.........................................................................................................1-4 LOBS Enable inter MEDIA................................................................................................................1-4 LOB "Demo" Directory......................................................................................................................1-5 Compatibility and Migration Issues...............................................................................................1-5iiiExamples in This Manual Use Multimedia_Tab..........................................................................1-6 For Further Information...............................................................................................................1-62 Basic ComponentsThe LOB Datatype..............................................................................................................................2-2 Internal LOBs.................................................................................................................................2-2 External LOBs (BFILEs)................................................................................................................2-2 Internal LOBs Use Copy Semantics, External LOBs Use Reference Semantics...................2-3 Varying-Width Character Data.........................................................................................................2-4 The LOB Locator.................................................................................................................................2-5 LOB Value and Locators..............................................................................................................2-5 LOB Locator Operations..............................................................................................................2-5 Creating Tables that Contain LOBs.................................................................................................2-8 Initializing Internal LOBs to NULL or Empty..........................................................................2-8 Initializing Internal LOB Columns to a Value........................................................................2-10 Initializing External LOBs to NULL or a File Name..............................................................2-103 LOB Programmatic EnvironmentsSix Programmatic Environments Operate on LOBs.....................................................................3-2 Comparison of the Six LOB Interfaces...........................................................................................3-3 Using PL/SQL (DBMS_LOB Package) to Work With LOBs.......................................................3-6 Provide a LOB Locator Before Invoking the DBMS_LOB Routine.......................................3-6 Client PL/SQL Procedures Cannot Call DBMS_LOB Routines............................................3-6 Offset and Amount Parameters: Fixed-Width Versus Varying-Width, Character orByte For DBMS_LOB Package...............................................................................................3-7 DBMS_LOB.LOADFROMFILE: Specify Amount Parameter to be Less than Size ofBFILE!........................................................................................................................................3-7 DBMS_LOB.READ: Amount Parameter Can be Larger than Data Size...............................3-7 PL/SQL Functions and Procedures that Operate on BLOBs, CLOBs, NCLOBs, andBFILEs........................................................................................................................................3-7 PL/SQL Functions/Procedures To Modify BLOB, CLOB, and NCLOB Values................3-8 PL/SQL Functions/Procedures To Read or Examine Internal and External LOB Values 3-8 PL/SQL Functions/Procedures To Operate on Temporary LOBs........................................3-8 PL/SQL Read-Only Functions/Procedures for BFILEs..........................................................3-9 PL/SQL Functions/Procedures To Open and Close Internal and External LOBs.............3-9ivUsing C (OCI) to Work With LOBs...............................................................................................3-11 Set CSID Parameter to OCI_UCS2ID to Read/Write in UCS2............................................3-11 Offset and Amount Parameters: Fixed-Width Versus Varying-Width, Characteror Byte With OCI...................................................................................................................3-11 OCILobLoadFromFile: Specify Amount Parameter to be Less than Length of BFILE.....3-13 OCILobRead: Specify Amount Parameter to be 4 gigabytes - 1..........................................3-13 OCI LOB Examples.....................................................................................................................3-13 Further Information About OCI:..............................................................................................3-14 OCI Functions that Operate on BLObs, BLOBs, NCLOBs, and BFILEs.............................3-14 OCI Functions To Modify Internal LOB (BLOB, CLOB, and NCLOB) Values..................3-14 OCI Functions To Read or Examine Internal LOB and External LOB (BFILE) Values....3-15 OCI Functions For Temporary LOBs.......................................................................................3-15 OCI Read-Only Functions For BFILEs.....................................................................................3-15 OCI LOB Locator Functions......................................................................................................3-16 OCI LOB-Buffering Functions..................................................................................................3-16 OCI Functions To Open and Close Internal and External LOBs.........................................3-16 Example Procedure: main() and seeIfLOBOpen....................................................................3-17 Using C/C++ (Pro*C) to Work with LOBs....................................................................................3-22 First Provide an Allocated Input Locator Pointer that Represents LOB............................3-22 Pro*C/C++ Statements that Operate on BLOBs, CLObs, NCLOBs, and BFILEs..............3-22 Pro*C/C++ Embedded SQL Statements To Modify Internal LOBs (BLOB, CLOB,and NCLOB) Values..............................................................................................................3-23 Pro*C/C++ Embedded SQL Statements To Read or Examine Internal andExternal LOB Values.............................................................................................................3-23 Pro*C/C++ Embedded SQL Statements For Temporary LOBs..........................................3-24 Pro*C/C++ Embedded SQL Statements For BFILEs............................................................3-24 Pro*C/C++ Embedded SQL Statements For LOB Locators................................................3-24 Pro*C/C++ Embedded SQL Statements For LOB Buffering...............................................3-25 Pro*C/C++ Embedded SQL Statements To Open and Close Internal LOBsand External LOBs (BFILEs).................................................................................................3-25 Using COBOL (Pro*COBOL) to Work with LOBs.....................................................................3-26 First Provide an Allocated Input Locator Pointer that Represents LOB............................3-26 Pro*COBOL Statements that Operate on BLOBs, CLOBs, NCLOBs, and BFILEs............3-27 Pro*COBOL Emvbedded SQL Statements To Modify Internal LOBs (BLOB, CLOB,and NCLOB) Values..............................................................................................................3-27vPro*COBOL Embedded SQL Statements To Read or Examine Internal andExternal LOB Values.............................................................................................................3-28 Pro*COBOL Embedded SQL Statements For Temporary LOBs..........................................3-28 Pro*COBOL Embedded SQL Statements For BFILEs............................................................3-28 Pro*COBOL Embedded SQL Statements For LOB Locators................................................3-29 Pro*COBOL Embedded SQL Statements For LOB Buffering..............................................3-29 Pro*COBOL Embedded SQL Statements To Open and Close Internal LOBsand External LOBs (BFILEs).................................................................................................3-29 Using Visual Basic (Oracle Objects for OLE (OO4O)) to Work with LOBs..........................3-30 OO4O Syntax Reference and Further Information................................................................3-30 OraBlob, OraClob, and OraBfile Object Interfaces Encapsulate Locators..........................3-31 Example of OraBlob and OraBfile............................................................................................3-31 OO4O Methods and Properties to Access Data Stored in BLOBs, CLOBs, NCLOBs,and BFILEs..............................................................................................................................3-32 OO4O Methods To Modify Internal LOBs (BLOB, CLOB, and NCLOB) Values..............3-33 OO4O Methods To Read or Examine internal and External LOB Values..........................3-34 OO4O Methods To Open and Close External LOBs (BFILEs).............................................3-34 OO4O Methods For Internal LOB-Buffering..........................................................................3-35 OO4O Properties For Operating on LOBs..............................................................................3-35 OO4O Read-Only Methods For External Lobs (BFILEs)......................................................3-36 OO4O Properties For Operating on External LOBs (BFILEs)..............................................3-36 Using Java (JDBC) to Work with LOBs.........................................................................................3-37 Changing Internal LOBs with Java..........................................................................................3-37 Reading Internal LOBs and External LOBs (BFILEs) with Java...........................................3-37 Calling DBMS_LOB Package....................................................................................................3-37 Referencing the LOBs.................................................................................................................3-37 JDBC Syntax References and Further Information................................................................3-38 JDBC Methods for Operating on LOBs....................................................................................3-39 JDBC oracle.sql.BLOB Methods To Modify BLOB Values..................................................3-39 JDBC oracle.sql.BLOB Methods To Read or Examine BLOB Values.................................3-39 JDBC oracle.sql.BLOB Methods and Properties for BLOB-Buffering................................3-40 JDBC oracle.sql.CLOB Methods To Modify CLOB Values.................................................3-40 JDBC oracle.sql.CLOB Methods To Read or Examine CLOB Values................................3-41 JDBC oracle.sql.CLOB Methods and Properties for CLOB-Buffering..............................3-41 .......................................................................................................................................................3-42viJDBC oracle.sql.BFILE Methods To Read or Examine External LOB (BFILE) Values....3-42 JDBC oracle.sql.BFILE Methods and Properties for BFILE-Buffering...............................3-43 JDBC: OracleBlob and OracleClob Do Not Work in 8.1.x and Future Releases................3-434Managing LOBsDBA Actions Required Prior to Working with LOBs..................................................................4-2 Set Maximum Number of Open BFILEs...................................................................................4-2 Using SQL DML for Basic Operations on LOBs......................................................................4-2 Changing Tablespace Storage for a LOB...................................................................................4-3 Managing Temporary LOBs..............................................................................................................4-4 Using SQL Loader to Load LOBs.....................................................................................................4-5 LOBFILES.......................................................................................................................................4-5 Loading InLine and Out-Of-Line Data into Internal LOBs Using SQL Loader.....................4-6 SQL Loader Performance: Loading Into Internal LOBs..........................................................4-6 Loading Inline LOB Data..................................................................................................................4-7 Loading Inline LOB Data in Predetermined Size Fields.........................................................4-7 Loading Inline LOB Data in Delimited Fields..........................................................................4-8 Loading Inline LOB Data in Length-Value Pair Fields...........................................................4-8 Loading Out-Of-Line LOB Data....................................................................................................4-10 Loading One LOB Per File.........................................................................................................4-10 Loading Out-of-Line LOB Data in Predetermined Size Fields............................................4-11 Loading Out-of-Line LOB Data in Delimited Fields.............................................................4-12 Loading Out-of-Line LOB Data in Length-Value Pair Fields..............................................4-13 SQL Loader LOB Loading Tips......................................................................................................4-14 LOB Restrictions...............................................................................................................................4-15 Removed Restrictions......................................................................................................................4-165 Advanced TopicsRead-Consistent Locators..................................................................................................................5-2A Selected Locator Becomes a Read Consistent Locator........................................................5-2Updating LOBs and Read-Consistency.....................................................................................5-3 Example of an Update Using Read Consistent Locators........................................................5-3 Updated LObs Via Updated Locators.......................................................................................5-5 Example of Updating a LOB Using SQL DML and DBMS_LOB..........................................5-6 Example of Using One Locator to Update the Same LOB Value...........................................5-8viiExample of Updating a LOB with a PL/SQL (DBMS_LOB) Bind Variable.......................5-10 LOB Locators Cannot Span Transactions................................................................................5-13 Example of Locator Not Spanning a Transaction..................................................................5-13 LOB Locators and Transaction Boundaries..................................................................................5-16 Locators Contain Transaction IDs When................................................................................5-16 Locators Do Not Contain Transaction IDs When..................................................................5-16 Transaction IDs: Reading and Writing to a LOB Using Locators........................................5-16 Non-Serializable Example: Selecting the Locator with No Current Transaction..............5-17 Non-Serializable Example: Selecting the Locator within a Transaction.............................5-18 LOBs in the Object Cache...............................................................................................................5-20 LOB Buffering Subsystem..............................................................................................................5-21 Advantages of LOB Buffering...................................................................................................5-21 Guidelines for Using LOB Buffering........................................................................................5-21 LOB Buffering Usage Notes......................................................................................................5-23 Flushing the LOB Buffer...........................................................................................................5-25 Flushing the Updated LOB........................................................................................................5-26 Using Buffer-Enabled Locators.................................................................................................5-27 Saving Locator State to Avoid a Reselect................................................................................5-27 OCI Example of LOB Buffering................................................................................................5-28 Creating a Varray Containing References to LOBs....................................................................5-326 Frequently Asked QuestionsConverting Data Types to LOB Data Types...................................................................................6-3 Can I Insert or Update Any Length Data Into a LOB Column?.............................................6-3 Does COPY LONG to LOB Work if Data is > 64K?.................................................................6-3 General..................................................................................................................................................6-4 How Do I Determine if the LOB Column with a Trigger is Being Updated?......................6-4 Reading and Loading LOB Data: What Should Amount Parameter Size Be?.....................6-4 Index-Organized Tables (IOTs) and LOBs.....................................................................................6-6 Is Inline Storage Allowed for LOBs in Index-Organized Tables?..........................................6-6 Initializing LOB Locators..................................................................................................................6-7 When Do I Use EMPTY_BLOB() and EMPTY_CLOB()?.........................................................6-7 How Do I Initialize a BLOB Attribute Using EMPTY_BLOB() in Java?...............................6-8 JDBC, JPublisher and LOBs..............................................................................................................6-8 How Do I Insert a Row With Empty LOB Locator into Table Using JDBC?........................6-8viiiHow Do I setData to EMPTY_BLOB() Using JPublisher?...................................................6-9 JDBC: Do OracleBlob and OracleClob Work in 8.1.x?............................................................6-9 How Do I Manipulate LOBs With the 8.1.5 JDBC Thin Driver?..........................................6-10 Is the FOR UPDATE Clause Needed on SELECT When Writing to a LOB?.....................6-11 Loading LOBs and Data Into LOBs...............................................................................................6-12 How do I Load a 1Mb File into a CLOB Column?.................................................................6-12 How Do We Improve BLOB and CLOB Performance When Using JDBC DriverTo Load?...................................................................................................................................6-12 LOB Indexing....................................................................................................................................6-16 Is LOB Index Created in Same Tablespace as LOB Data?....................................................6-16 Indexing: Why is a BLOB Column Removed on DELETing but not a BFILE Column?..6-16 Which Views Can I Query to Find Out About a LOB Index?..............................................6-16 LOB Storage and Space Issues.......................................................................................................6-18 What Happens If I Specify LOB Tablespace and ENABLE STORAGE IN ROW?............6-18 What Are the Pros and Cons of Storing Images in a BFILE Versus a BLOB?....................6-18 When Should I Specify DISABLE STORAGE IN ROW?......................................................6-19 Do <4K BLOBs Go Into the Same Segment as Table Data, >4K BLOBs Go Into aSpecified Segment?................................................................................................................6-19 Is 4K LOB Stored Inline?............................................................................................................6-20 How is a LOB Locator Stored If the LOB Column is EMPTY_CLOB() orEMPTY_BLOB() Instead of NULL? Are Extra Data Blocks Used For This?.................6-21 Migrating From Other Database Systems....................................................................................6-22 Is Implicit LOB Conversion Between Different LOB Types Allowed in Oracle8i?...........6-22 Performance.......................................................................................................................................6-23 What Can We Do To Improve the Poor LOB Loading Performance When UsingVeritas File System on Disk Arrays, UNIX, and Oracle?.................................................6-23 Is There a Difference in Performance When Using DBMS_LOB.SUBSTRVersus DBMS_LOB.READ?.................................................................................................6-24 Are There Any White Papers or Guidelines on Tuning LOB Performance?.....................6-24 When Should I Use Chunks Over Reading the Whole Thing?............................................6-25 Is Inlining the LOB a Good Idea and If So When?.................................................................6-25 How Can I Store LOBs >4Gb in the Database?......................................................................6-26ix。

Blob(二进制大对象)

Blob(二进制大对象)

Blob(⼆进制⼤对象)Blob(⼆进制⼤对象)Oracle LOB:LOB,即Large Objects(⼤对象),是⽤来存储⼤量的⼆进制和⽂本数据的⼀种数据类型(⼀个LOB字段可存储多达4GB的数据)。

LOB分为两种类型:内部LOB和外部LOB。

-内部LOB将数据以字节流的形式存储在数据库的内部。

因⽽,内部LOB的许多操作都可以参与事务,也可以像处理普通数据⼀样对其进⾏备份和恢复操作。

Oracle⽀持三种类型的内部LOB:·BLOB(⼆进制数据)·CLOB(单字节字符数据)·NCLOB(多字节字符数据)-CLOB和NCLOB类型适⽤于存储超长的⽂本数据,BLOB字段适⽤于存储⼤量的⼆进制数据,如图像、视频、⾳频,⽂件等。

-⽬前只⽀持⼀种外部LOB类型,即BFILE类型。

在数据库内,该类型仅存储数据在操作系统中的位置信息,⽽数据的实体以外部⽂件的形式存在于操作系统的⽂件系统中。

因⽽,该类型所表⽰的数据是只读的,不参与事务。

该类型可帮助⽤户管理⼤量的由外部程序访问的⽂件。

MySQL BLOB类型介绍:MySQL中,BLOB是⼀个⼆进制⼤型对象,是⼀个可以存储⼤量数据的容器,它能容纳不同⼤⼩的数据。

MySQL的四种BLOB类型(除了在存储的最⼤信息量上不同外,他们是等同的)类型⼤⼩(单位:字节)TinyBlob 最⼤ 255Blob 最⼤ 65 K 或 65535MediumBlob 最⼤ 16 M 或 16777215LongBlob 最⼤ 4 G 或 4294967295实际使⽤中根据需要存⼊的数据⼤⼩定义不同的BLOB类型。

需要注意的是:如果存储的⽂件过⼤,数据库的性能会下降。

使⽤JDBC来写⼊BLOB类型数据到Oracle中:oracle的blob字段⽐long字段的性能要好,可以⽤来保存如图⽚之类的⼆进制数据。

oracle的blob字段由两部分组成:数据(值)和指向数据的指针(定位器)。

oracle常见错误及代码

oracle常见错误及代码

1、ORA-12541:TNS:没有监听器原因:没有启动监听器或者监听器损坏。

若是前者,使用命令net start OracleOraH ome10gTNSListener(名字可能有出入)即可;如果是后者,则使用“Net Configuration Assistant”工具向导之“监听程序配置”增加一个监听器即可(基本不用写任何信息,一路O K。

在添加之前可能需要把所有的监听器先删!)2、ORA-12500:TNS:监听程序无法启动专用服务器进程或ORA-12560:TNS:协议适配器错误原因:ORACLE的数据库服务没有启动。

使用命令net start ORACLESERVICEORA DB(ORADB为数据库名字)即可。

如果仍没有解决,请继续向下看。

3、如果数据库服务启动失败,则很有可能是其注册表项值损坏,最好的做法是以下两步:1)ORADIM -DELETE -SID oradb 删除数据库服务项2)ORADIM -NEW -SID oradb 新增数据库服务项注:这个过程中如果出错,就重启计算机!4、ORA-12154:TNS:能解析服务名原因:ORACLE的网络服务名没有正确配置。

请使用“Net8 Configuration Assistan t”工具向导之“本地网络服务名配置”配置TNS即可。

如果仍没有解决,请继续向下看。

5、ORA-1034 :TNS:ORACLE不可用原因:ORACLE的数据库服务正确启动,但是数据库没有打开!使用命令:1)svrmgrl 启动服务管理器2)connect internal 以internal身份登陆3)startup 打开数据库6、ORA-12560:TNS:协议适配器错误(顽固性的)原因:未知。

解决:必杀技--打开“Windows任务管理器”,杀死ORACLE.exe及ORADIM.exe进程,书写自己的ora_startup.bat,执行之!PS:1、ora_startup.bat:net start OracleOraHome81TNSListenernet start ORACLESERVICEORADBsvrmgrl 一般情况下不用,不过有时少不了它的,具体步骤见第5步。

oracle lob大对象查找语句

oracle lob大对象查找语句

oracle lob大对象查找语句Oracle LOB(Large Object)是一种用于存储大量数据的数据类型,可以存储二进制文件、文本文件等大型数据。

在Oracle数据库中,LOB数据类型包括BLOB(二进制大对象)、CLOB(字符大对象)和NCLOB(国际字符集大对象)。

以下是关于Oracle LOB大对象查找的一些常用语句:1. 使用SELECT语句查找LOB大对象的内容:SELECT lob_columnFROM table_name;2. 使用SELECT语句查找LOB大对象的长度:SELECT LENGTH(lob_column)FROM table_name;3. 使用SUBSTR函数截取LOB大对象的一部分内容:SELECT SUBSTR(lob_column, start_position, length)FROM table_name;4. 使用DBMS_LOB.SUBSTR函数截取LOB大对象的一部分内容:SELECT DBMS_LOB.SUBSTR(lob_column, length, start_offset) FROM table_name;5. 使用TO_LOB函数将普通字段转换为LOB大对象类型进行查询:SELECT TO_LOB(column_name)FROM table_name;6. 使用EMPTY_BLOB()函数查找空的BLOB大对象:SELECT column_nameFROM table_nameWHERE column_name = EMPTY_BLOB();7. 使用EMPTY_CLOB()函数查找空的CLOB大对象:SELECT column_nameFROM table_nameWHERE column_name = EMPTY_CLOB();8. 使用EMPTY_NCLOB()函数查找空的NCLOB大对象:SELECT column_nameFROM table_nameWHERE column_name = EMPTY_NCLOB();9. 使用LIKE子句模糊查找LOB大对象的内容:SELECT lob_columnFROM table_nameWHERE lob_column LIKE '%keyword%';10. 使用CONTAINS函数全文搜索LOB大对象的内容:SELECT *FROM table_nameWHERE CONTAINS(lob_column, 'keyword') > 0;以上是一些常用的Oracle LOB大对象查找语句,可以根据具体需求选择合适的语句进行查询。

oracle lob大对象查找语句

oracle lob大对象查找语句

一、概述Oracle数据库中LOB(大对象)类型是用来存储大量数据的一种数据类型,它可以存储大容量的文本、图像、音频或视瓶等多媒体数据。

在进行数据库查询时,查找LOB类型数据需要使用特定的语句和方法,下面将详细介绍Oracle数据库中查找LOB大对象的语句及使用方法。

二、使用DBMS_LOB进行LOB查找1. 使用DBMS_LOB.GETLENGTH函数获取LOB数据的长度当需要查找LOB数据时,首先需要获取LOB数据的长度,可以使用DBMS_LOB.GETLENGTH函数来获取。

该函数的使用方法为:SELECT DBMS_LOB.GETLENGTH(lob_column) FROMtable_name WHERE condition;2. 使用DBMS_LOB.SUBSTR函数获取部分LOB数据如果需要查找LOB数据的部分内容,可以使用DBMS_LOB.SUBSTR函数来获取。

该函数的使用方法为:SELECT DBMS_LOB.SUBSTR(lob_column, length, offset) FROM table_name WHERE condition;其中,length为需要获取的数据长度,offset为数据的偏移量。

3. 使用DBMS_LOB.INSTR函数查找LOB数据中的子串位置若要查找LOB数据中特定子串的位置,可以使用DBMS_LOB.INSTR函数来实现。

该函数的使用方法为:SELECT DBMS_LOB.INSTR(lob_column, substring, start, occurrence) FROM table_name WHERE condition;其中,substring为需要查找的子串,start为搜索的起始位置,occurrence为要查找的第几个匹配项。

三、使用空间类型进行LOB查找1. 使用EMPTY_CLOB函数和EMPTY_BLOB函数进行查找在Oracle数据库中,可以使用EMPTY_CLOB函数来查找空的CLOB类型数据,使用EMPTY_BLOB函数来查找空的BLOB类型数据。

oracle中type类型

oracle中type类型

oracle中type类型摘要:I.引言- 介绍Oracle 数据库中的Type 类型- 说明Type 类型在数据库中的作用II.Type 类型的概念和分类- 什么是Type 类型- Type 类型的分类1.用户定义类型(User-Defined Types)2.内置类型(Built-In Types)III.用户定义类型- 用户定义类型的概念- 用户定义类型的创建和使用1.使用CREATE TYPE 语句创建类型2.使用TYPE 语句定义类型变量3.使用用户定义类型进行数据存储和操作IV.内置类型- 内置类型的概念- 内置类型的分类1.数字类型2.字符类型3.时间日期类型4.LOB(大型对象)类型5.其他类型V.Type 类型与数据库对象的关系- Type 类型如何与表、视图、索引等数据库对象关联- Type 类型在查询和操作数据库对象时的作用VI.Type 类型的应用案例- 案例1:使用用户定义类型存储复杂数据结构- 案例2:使用内置类型进行高效的数据查询和操作VII.结论- 总结Type 类型在Oracle 数据库中的重要性- 强调合理使用Type 类型对提高数据库性能和可维护性的作用正文:I.引言在Oracle 数据库中,Type 类型是一种用于存储和管理数据的特殊类型。

通过使用Type 类型,用户可以更灵活地进行数据存储和操作,提高数据库性能和可维护性。

本文将详细介绍Oracle 数据库中的Type 类型,包括其概念、分类、创建和使用方法,以及与数据库对象的关系和应用案例。

II.Type 类型的概念和分类首先,我们需要了解什么是Type 类型。

在Oracle 数据库中,Type 类型是一种用于存储和管理数据的抽象结构,它可以将不同类型的数据组合在一起,形成一个整体。

Type 类型可以提高数据存储的灵活性和可扩展性,同时便于进行数据查询和操作。

Type 类型主要分为两大类:用户定义类型(User-Defined Types)和内置类型(Built-In Types)。

ORACLE数据库字段类型说明

ORACLE数据库字段类型说明

ORACLE数据库字段类型说明类型含义存储描述备注CHAR固定长度字符串最⼤长度2000bytesVARCHAR2可变长度的字符串,最⼤长度4000bytes可做索引的最⼤长度749 NCHAR根据字符集⽽定的固定长度字符串最⼤长度2000bytesNVARCHAR2根据字符集⽽定的可变长度字符串最⼤长度4000bytesDATE⽇期(⽇-⽉-年)DD-MM-YY(HH-MI-SS),经过严格测试,⽆千⾍问题TIMESTAMP⽇期(⽇-⽉-年)DD-MM-YY(HH-MI-SS:FF3),经过严格测试,⽆千⾍问题与DATE相⽐较,TIMESTAMP有⼩数位秒信息LONG超长字符串最⼤长度2G,⾜够存储⼤部头著作RAW固定长度的⼆进制数据最⼤长度2000bytes可存放多媒体图象声⾳等LONG RAW可变长度的⼆进制数据最⼤长度2G可存放多媒体图象声⾳等BLOB⼆进制数据最⼤长度4GCLOB字符数据最⼤长度4GNCLOB根据字符集⽽定的字符数据最⼤长度4GBFILE存放在数据库外的⼆进制数据最⼤长度4GROWID数据表中记录的唯⼀⾏号10bytes**.*.*格式,*为0或1NROWID⼆进制数据表中记录的唯⼀⾏号最⼤长度4000bytesNUMBER(P,S)数字类型P为整数位,S为⼩数位DECIMAL(P,S)数字类型P为整数位,S为⼩数位INTEGER整数类型⼩的整数FLOAT浮点数类型NUMBER(38),双精度REAL实数类型NUMBER(63),精度更⾼**⽬前Oracle数据库⼤概有26个字段类型,⼤体分为六类,分别是字符串类型、数字数据类型、⽇期时间数据类型、=⼤型对象(LOB)数据类型、RAW和LONG RAW数据类型、ROWID和UROWID数据类型。

**当然Oracle还提供⽤户⾃定义的数据类型,但在我这篇不做讨论。

字符串类型Charchar数据类型存储固定长度的字符值。

⼀个CHAR数据类型可以包括1到2000个字符。

oracle mybatis bigdecimal类型判空

oracle mybatis bigdecimal类型判空

oracle mybatis bigdecimal类型判空在Oracle数据库中,BIG_DECIMAL 类型用于存储大数值。

在使用MyBatis 进行数据库操作时,你可能需要处理BIG_DECIMAL 类型的字段,并判断其是否为空。

首先,确保你的MyBatis 映射文件或注解中正确地映射了Oracle 的BIG_DECIMAL 类型。

例如,在MyBatis 的XML 映射文件中,你可以这样定义:xml<resultMap id="yourResultMap" type="YourEntityClass"><!-- ...其他字段映射... --><result property="yourBigDecimalProperty" column="your_big_decimal_column" javaType="java.math.BigDecimal" jdbcType="DECIMAL"/></resultMap>然后,在SQL 查询中,你可以使用Oracle 的IS NULL 来判断BIG_DECIMAL 字段是否为空。

例如:xml<select id="selectBySomeCondition" resultMap="yourResultMap">SELECT * FROM your_tableWHERE your_big_decimal_column IS NULL</select>如果你想在Java 代码中判断一个BigDecimal 是否为空,你可以使用以下代码:javaBigDecimal bigDecimalValue = ...; // 从数据库获取的BigDecimal 值if (bigDecimalValue == null || pareTo(BigDecimal.ZERO) == 0) {// 如果为null 或者值为0,则认为它是“空”的。

oracle查询结果解析大文本json对象

oracle查询结果解析大文本json对象

oracle查询结果解析大文本json对象在Oracle数据库中,如果您想解析一个大的文本JSON对象,您可以使用JSON_VALUE, JSON_QUERY, JSON_TABLE等函数来查询和提取JSON对象中的数据。

以下是一个基本的方法和步骤:1. 了解JSON数据:首先,确保您已经理解您的JSON数据的基本结构和格式。

例如,如果你的JSON看起来像这样:{"name": "John Doe","age": 30,"address": {"street": "123 Main St","city": "Anytown","state": "CA","zip": "12345"}}2. 选择Oracle函数:根据您的需求,选择合适的Oracle JSON函数。

例如,如果您想从上述JSON 中提取名字,可以使用JSON_VALUE:SELECT JSON_VALUE(your_json_column, '$.name') AS name FROM your_table;如果您需要从嵌套的JSON对象中提取数据,可以使用JSON_QUERY。

例如,提取地址街道:SELECT JSON_QUERY(your_json_column, '$.address.street') AS street FROM your_table;如果您有一个大的JSON数组,并且想要将它转化为一个关系表格式,那么JSON_TABLE会很有用。

3. 处理大文本:如果您的JSON数据非常大,直接在查询中处理可能会很慢或不可行。

在这种情况下,您可能需要考虑将JSON数据存储在一个单独的表中,并使用适当的索引和分区来优化查询性能。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在plsql中可以申明的lob类型的变量如下:
类型 描述
BFILE 二进制文件,存储在数据库外的操作系统文件,只读的。把此文件当二进制处理。
BLOB 二进制大对象。存储在数据库里的大对象,一般是图像声音等文件。
CLOB 字符型大对象。一般存储大数量文本信息。存储单字节,固定宽度的数据。
else
dbms_output.put_line('directions is not null');
end if;
end;
/
DECLARE
directions CLOB;--定义一个,并且分配值
**/
CREATE TABLE waterfalls (
falls_name VARCHAR2(80),--name
falls_photo BLOB,--照片
falls_directions CLOB,--文字
falls_description NCLOB,--文字
NCLOB 字节字符大对象。存储单字节大块,多字节固定宽度,多字节变宽度数据。
Oracle将lob分类为两种:
1.存储在数据库里的,参与数据库的事务。BLOB,CLOB,NCCLOB。
2.存储在数据库外的BFILE,不参与数据库的事务,也就是不能rollback或commit等,它依赖于文件系统的数据完整性。
/* null lob example*/
declare
directions clob;--定义了,但是没有分配值,为null
begin
if directions is null then
dbms_output.put_line('directions is null');
SELECT falls_directions
INTO directions
FROM waterfalls
WHERE falls_name='Munising Falls';
IF directions IS NULL THEN
falls_web_page BFILE);--指向外部的html页面
/
这个表我们并不需要clob和nclob两个,只取一就可以,这里全部定义只是为了演示使用。
1. 理解LOB的Locator
表中的Lob类型的列中存储的只是存储指向数据库中实际存储lob数据的一个指针。
VALUES ('Munising Falls',EMPTY_CLOB( ));
--Retrieve the LOB locator created by the previous INSERT statement
SELECT falls_directions
DBMS_OUTPUT.PUT_LINE('directions is NULL');
ELSE
DBMS_OUTPUT.PUT_LINE('directions is not NULL');--打印此句
END IF;
DBMS_OUTPUT.PUT_LINE('Length = '
SELECT falls_photo
INTO photo
FROM waterfalls
WHERE falls_name='Dryer Hose';
见下图:
Lob工作原理图解
从上面的图可以看出,要处理lob数据,必须先获得lob locators。我们可以通过一个select语句获取,当赋值给lob变量的时候,它也获得同样的lob locators。我们在plsql中处理可以使用dbms_lob包,里面内置了很多过程和函数来读取和修改我们的lob数据。下面给出处理lob数据的一般方法。
LONG和LONG RAW这两种数据类型也是存储字符的,但是有系列的问题,不建议使用,这里也就不讨论了。
13.4.2 LOB的使用
本部分不讨论lob的所有细节,只讨论lob的基本原理和在plsql中的基本使用,为plsql开发使用lob提供一个基础性指导。
本部分使用的表是:
/**
table script
WHERE falls_name='Munising Falls';
--Insert a new row using EMPTY_CLOB( ) to create a LOB locator
INSERT INTO waterfalls
(falls_name,falls_directions)
--write lob
DECLARE
directions CLOB;
amount BINARY_INTEGER;
offset INTEGER;
first_direction VARCHAR2(100);
more_directions VARCHAR2(500);
oracle操作大对象:blob,clob,nclob,bfile
13-4 Lob类型
13.4.1 基本介绍
Oracle和plsql都支持lob(large object) 类型,用来存储大数量数据,如图像文件,声音文件等。Oracle 9i realse2支持存储最大为4g的数据,oracle 10g realse1支持最大8到128万亿字节的数据存储,依赖于你的db的block size。
IF some_clob IS NULL THEN
--如果is null为true表示未分配,肯定没有数据
ELSEIF DBMS_LOB.GETLENGTH(some_clob) = 0 THEN
--分配了length为0,也没有数据
ELSE
--有数据
1. 通过select语句获取一个lob locator。
2. 通过调用dbms_lob.open打开lob。
3. 调用dbms_lob.getchunksize获得最佳读写lob值。
4. 调用dbms_lob.getlength获取lob数据的字节值。
BEGIN
--删除一行
DELETE
FROM waterfalls
WHERE falls_name='Munising Falls';
--插入一行通过使用 EMPTY_CLOB( ) to 建立一个lob locator
4.向LOB里写入数据
当获得一个有效的lob locator之后,就可以使用dbms_lob包的下列procedure向lob中写入数据。
DBMS_LOB.WRITE:允许自动写入数据到lob中。
DBMS_LOB.WRITEAPPEND:向lob的末尾写入数据。
INTO directions
FROM waterfalls
WHERE falls_name='Munising Falls';
--Open the LOB; not strictly necessary, but best to open/close LOBs.
END IF;
3.建立LOB
在上面我们使用empty_clob()建立了一个空的clob,lob locator只是一个指针,真正的数据是存储在磁盘中或数据库文件中。我们先建立一个空的clob,然后我们可以update来让变量真正指向有数据的lob。Empty_clob()可以用来处理clob和nclob。在oracle 8i中可以使用temporary lob达到同样的效果。
|| DBMS_LOB.GETLENGTH(directions));--结果为o
END;
注意:
1. 上面例子中的empty_clob()是oracle的内置函数,创建了一个lob locator。但是我们没有让它指向任何数据,所以是empty。而且通过select语句给变量directions分配了lob locator,所以不是null,但是leng--Delete any existing rows for 'Munising Falls' so that this
--example can be executed multiple times
DELETE
FROM waterfalls
在plsql中申明了一个lob类型的变量,然后从数据库中查询一个lob类型的值分配给变量,也只是将指针复制给了它,那么这个变量也会指向数据库中实际存放lob数据的地方。如:
--understanding lob locators
DECLARE
photo BLOB;
BEGIN
5. 调用dbms_lob.read获取lob数据。
6. 调用dbms_lob.close关闭lob。
2. Empty lob and Null lob
Empty的意思是我们已经获取了一个lob locator,但是没有指向任何lob数据。Null是定义了一个变量,但是没有获得lob locator。对lob类型的处理和其他类型不一样。如下面的例子:
INSERT INTO waterfalls
(falls_name,falls_directions)
VALUES ('Munising Falls',EMPTY_CLOB( ));
--获得lob locator,上面插入的数据,因为我们插入的是一个empty_clob(),那么lob locator不指向任何数据,虽然给变量分配了只
amount := LENGTH(first_direction); --number of characters to write
相关文档
最新文档