1. Trang chủ
  2. » Công Nghệ Thông Tin

Oracle Built−in Packages- P86 pdf

5 250 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Oracle Built−in Packages
Thể loại Tài liệu
Định dạng
Số trang 5
Dung lượng 77,79 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

This is the output of the script:file_loc_1 equals file_loc_2 This example compares two diagrams from the my_book_diagrams table: DECLARE CURSOR diagram_cur num IN INTEGER IS SELECT d

Trang 1

NULL Either amount, offset_1oroffset_2,is less than 1, or amount, offset_1, or offset_2is greater

thanLOBMAXSIZE

8.3.2.1.1 Exceptions

The COMPARE function may raise the following exceptions:

NOEXIST_DIRECTORY

For BFILEs

UNOPENED_FILE

For BFILEs Files must be open before comparison

NOPRIV_DIRECTORY

For BFILEs

INVALID_DIRECTORY

For BFILEs

INVALID_OPERATION

For BFILEs

8.3.2.1.2 Restrictions

The program asserts a purity level with the RESTRICT_REFERENCES pragma

PRAGMA RESTRICT_REFERENCES (compare, WNDS, RNDS, WNPS, RNPS);

8.3.2.1.3 Examples

The following example compares two BFILE locators that are pointing to the same file Note that for BFILEs

we must provide a number of bytes (in the amount parameter) to compare, which is determined via the

GETLENGTH function Note also that for BFILES we must first open the files

DECLARE

v_file_loc_1 BFILE;

v_file_1_length INTEGER;

v_file_loc_2 BFILE;

BEGIN

v_file_loc_1 := BFILENAME ('IMAGES', 'ourlogo.bmp');

v_file_loc_2 := BFILENAME ('IMAGES', 'ourlogo.bmp');

DBMS_LOB.FILEOPEN(v_file_loc_1);

DBMS_LOB.FILEOPEN(v_file_loc_2);

v_file_1_length := DBMS_LOB.GETLENGTH( v_file_loc_1);

IF DBMS_LOB.COMPARE

( v_file_loc_1, v_file_loc_2, v_file_1_length) = 0

THEN

DBMS_OUTPUT.PUT_LINE('file_loc_1 equals file_loc_2');

ELSE

DBMS_OUTPUT.PUT_LINE('file_loc_1 is not equal to file_loc_2');

END IF;

DBMS_LOB.FILECLOSEALL;

END;

/

Trang 2

This is the output of the script:

file_loc_1 equals file_loc_2

This example compares two diagrams from the my_book_diagrams table:

DECLARE

CURSOR diagram_cur (num IN INTEGER)

IS

SELECT diagram

FROM my_book_diagrams

WHERE chapter_descr = 'Chapter 1'

AND diagram_no = num;

v_diagram_1_loc BLOB;

v_diagram_2_loc BLOB;

BEGIN

OPEN diagram_cur (1);

FETCH diagram_cur INTO v_diagram_1_loc;

CLOSE diagram_cur;

OPEN diagram_cur (2);

FETCH diagram_cur INTO v_diagram_1_loc;

CLOSE diagram_cur;

IF DBMS_LOB.COMPARE (v_diagram_1_loc, v_diagram_2_loc) = 0

THEN

DBMS_OUTPUT.PUT_LINE ('diagrams are equal');

ELSE

DBMS_OUTPUT.PUT_LINE ('diagrams are different');

END IF;

END;

/

This is the output of the script:

diagrams are different

8.3.2.2 The DBMS_LOB.GETLENGTH function

The GETLENGTH function returns the length of the input LOB The length is in bytes for BFILEs and BLOBs, and in characters for CLOBs and NCLOBs The headers for this program, for each corresponding LOB type, are the following:

FUNCTION DBMS_LOB.GETLENGTH (lob_loc IN BLOB) RETURN INTEGER;

FUNCTION DBMS_LOB.GETLENGTH (lob_loc IN CLOB CHARACTER SET ANY_CS)

RETURN INTEGER;

FUNCTION DBMS_LOB.GETLENGTH (lob_loc IN BFILE) RETURN INTEGER;

The lob_loc parameter is the locator of the LOB whose length is to be determined

The overloaded specification allows GETLENGTH to be used with all types of LOBs The clause ANY_CS

in the specification allows either CLOB or NCLOB locators as input

The function returns the length (in bytes or characters) of the input LOB, or it returns NULL if the input LOB

is NULL or invalid

Trang 3

8.3.2.2.1 Restrictions

The program asserts a purity level with the RESTRICT_REFERENCES pragma

PRAGMA RESTRICT_REFERENCES (getlength, WNDS, RNDS, WNPS, RNPS);

8.3.2.2.2 Examples

The following example gets the size in bytes of the file ch01_01.bmp in the IMAGES directory:

DECLARE

v_file_loc BFILE;

v_diagram_size INTEGER;

BEGIN

v_file_loc := BFILENAME('IMAGES','ch01_01.bmp');

v_diagram_size := DBMS_LOB.GETLENGTH(v_file_loc);

DBMS_OUTPUT.PUT_LINE('Diagram size: ' || v_diagram_size);

END;

/

This is the output of the script:

Diagram size: 481078

This example gets the size in characters of "Chapter 1" from the my_book_text table:

DECLARE

v_text_loc CLOB;

BEGIN

v_text_loc := book_text ('Chapter 1');

DBMS_OUTPUT.PUT_LINE

('Length of Chapter 1: ' || DBMS_LOB.GETLENGTH(v_text_loc));

END;

/

This is the output of the script:

Length of Chapter 1: 100

8.3.2.3 The DBMS_LOB.READ procedure

The READ procedure provides piece−wise read access to a LOB A specified number of bytes (BFILE,

BLOB) or characters (CLOB, NCLOB) is read into the buffer, starting from a specified location The number

of bytes or characters actually read by the operation is returned The headers for this program, corresponding

to each type, are the following:

PROCEDURE DBMS_LOB.READ

(lob_loc IN BLOB | BFILE,

amount IN OUT BINARY_INTEGER,

offset IN INTEGER,

buffer OUT RAW);

PROCEDURE DBMS_LOB.READ

(lob_loc IN CLOB CHARACTER SET ANY_CS,

amount IN OUT BINARY_INTEGER,

offset IN INTEGER,

buffer OUT VARCHAR2 CHARACTER SET lob_loc%CHARSET);

The overloaded specification allows READ to be used with all types of LOBs The term ANY_CS in the

Trang 4

specification allows either CLOB or NCLOB locators as input.

The READ procedure and the DBMS_LOB.SUBSTR function provide similar functionality READ is a procedure, while SUBSTR is a function However, READ will raise NO_DATA_FOUND and

INVALID_ARGVAL exceptions, while SUBSTR will ignore these exceptions and return NULL when they occur DBMS_LOB.SUBSTR can also be called from within a SQL statement, but READ cannot be, since it

is a procedure

Parameters are summarized in the following table

Parameter Description

lob_loc A locator for the LOB to be read

amount Number of bytes (BFILE, BLOB) or characters (CLOB, NCLOB) to read; the number of bytes or

characters actually read by the operation is returned in amount

offset Location of the byte (BFILE, BLOB) or character (CLOB, NCLOB) in the LOB at which the

read begins

buffer Buffer where the results of the read operation are placed

8.3.2.3.1 Exceptions

The READ procedure may raise any of the following exceptions:

VALUE_ERROR

lob_loc, amount, or offset is NULL

INVALID_ARGVAL

One of the following conditions exists:

amount< 1 or amount> 32767

offset< 1 or offset> LOBMAXSIZE

size of amount> size of buffer

NO_DATA_FOUND

The end of the LOB is reached

UNOPENED_FILE

For BFILEs, files must be open before the read

NOEXIST_DIRECTORY

For BFILEs

NOPRIV_DIRECTORY

For BFILEs

INVALID_DIRECTORY

For BFILEs

INVALID_OPERATION

Trang 5

For BFILEs.

8.3.2.3.2 Examples

The following example reads the first 60 characters of the CLOB chapter_text column of the

my_book_texttable using the "Chapter 1" row:

DECLARE

v_text_loc CLOB;

v_text_amt BINARY_INTEGER := 60;

v_text_buffer VARCHAR2(60);

BEGIN

v_text_loc := book_text ('Chapter 1');

DBMS_LOB.READ (v_text_loc, v_text_amt, 1, v_text_buffer);

DBMS_OUTPUT.PUT_LINE('Chapter 1: ' || v_text_buffer);

END;

/

This is the output of the script:

Chapter 1: It was a dark and stormy night Suddenly a scream rang out.

The next example reads sixty characters at a time from the CLOB chapter_text column of the my_book_text table using the "Chapter 1" row Note that the loop continues until READ raises the NO_DATA_FOUND exception

DECLARE

v_text_loc CLOB;

v_text_amt BINARY_INTEGER := 60;

v_text_pos INTEGER := 1;

v_text_buffer VARCHAR2(60);

BEGIN

v_text_loc := book_text ('Chapter 1');

LOOP

DBMS_LOB.READ

(v_text_loc, v_text_amt, v_text_pos, v_text_buffer);

/* process the text and prepare to read again */

DBMS_OUTPUT.PUT_LINE('Chapter 1: ' || v_text_buffer);

v_text_pos := v_text_pos + v_text_amt;

END LOOP;

EXCEPTION

WHEN NO_DATA_FOUND

THEN

DBMS_OUTPUT.PUT_LINE('End of Chapter Reached.');

END;

/

This script produces the following:

Chapter 1: It was a dark and stormy night Suddenly a scream rang out.

Chapter 1: An EXCEPTION had not been handled.

End of Chapter Reached.

Note that the maximum size of a VARCHAR2 or RAW variable is 32767 bytes This is the size limit of the buffer to be used with READ

8.3.2.4 The DBMS_LOB.SUBSTR function

The SUBSTR function provides piece−wise access to a LOB The specified number of bytes (BFILE, BLOB)

or characters (CLOB, NCLOB) is returned, starting from the specified location The headers for this program, corresponding to each LOB type, are the following:

Ngày đăng: 07/07/2014, 00:20

TỪ KHÓA LIÊN QUAN