DBMS_BINARY 包

DBMS_BINARY系统包用于读写二进制流,实现从一个二进制流指定位置开始对基本数据类型的读写,包括char、varchar、tinyint、smallint、int、bigint、float、double数据类型。

5.1 相关方法

DBMS_BINARY包所支持的8个过程和8个函数,分别用来在二进制流中存取数据。这些过程和函数通过调用相应系统内部函数来实现存取数据的过程。如下详细介绍各过程和函数:

  1. binary_get_char

返回从二进制流vb中偏移offset开始的一个char类型数据。

语法如下:

function binary_get_char(

  vb varbinary,

  offset int

);

返回值

char类型数据。

  1. binary_get_varchar

返回从二进制流vb中偏移offset开始的一个长度为length的varchar类型数据。

语法如下:

function binary_get_varchar(

  vb varbinary,

  offset int,

length int

);

返回值

varchar类型数据

  1. binary_get_tinyint

返回从二进制流vb中偏移offset开始的一个tinyint型数据。

语法如下:

function binary_get_tinyint(

  vb varbinary,

  offset int

);

返回值

tinyint类型数据。

  1. binary_get_smallint

返回从二进制流vb中偏移offset开始的一个smallint型数据。

语法如下:

function binary_get_smallint(

  vb varbinary,

  offset int

);

返回值

smallint类型数据。

  1. binary_get_int

返回从二进制流vb中偏移offset开始的一个int型数据。

语法如下:

function binary_get_int(

  vb varbinary,

  offset int);

返回值

int类型数据。

  1. binary_get_bigint

返回从二进制流vb中偏移offset开始的一个bigint型数据。

语法如下:

function binary_get_bigint(

  vb varbinary,

  offset int

);

返回值

bigint类型数据。

  1. binary_get_float

返回从二进制流vb中偏移offset开始的一个float型数据。

语法如下:

function binary_get_float(

  vb varbinary,

  offset int

);

返回值

float类型数据。

  1. binary_get_double

返回从二进制流vb中偏移offset开始的一个double型数据。

语法如下:

function binary_get_double(

  vb varbinary,

  offset int

);

返回值

double类型数据。

  1. binary_set_char

从二进制流vb中偏移offset开始的位置写入一个char型数据。

语法如下:

procedure binary_set_char(

  vb in out varbinary,

  offset int, value char

);
  1. binary_set_varchar

从二进制流vb中偏移offset开始的位置写入varchar型数据。

语法如下:

procedure binary_set_varchar(

  vb in out varbinary,

  offset int,

  value varchar

);
  1. binary_set_tinyint

从二进制流vb中偏移offset开始的位置写入一个tinyint型数据。

语法如下:

procedure binary_set_tinyint(

  vb in out varbinary,

  offset int,

  value tinyint

);
  1. binary_set_smallint

从二进制流vb中偏移offset开始的位置写入一个smallint型数据。

语法如下:

procedure binary_set_smallint(

  vb in out varbinary,

  offset int,

  value smallint

);
  1. binary_set_int

从二进制流vb中偏移offset开始的位置写入一个int型数据。

语法如下:

procedure binary_set_int(

  vb in out varbinary,

  offset int,

  value int

);
  1. binary_set_bigint

从二进制流vb中偏移offset开始的位置写入一个bigint型数据。

语法如下:

procedure binary_set_bigint(

  vb in out varbinary,

  offset int,

  value bigint

);
  1. binary_set_float

从二进制流vb中偏移offset开始的位置写入一个float型数据。

语法如下:

procedure binary_set_float(

  vb in out varbinary,

  offset int,

  value float

);
  1. binary_set_double

从二进制流vb中偏移offset开始的位置写入一个double型数据。

语法如下:

procedure binary_set_double(

  vb in out varbinary,

  offset int,

  value double

);

参数详解

因为DBMS_BINARY包所支持的8个过程和8个函数参数意义相同,如下统一说明:

  • vb

用户输入的二进制流。

  • offset

向二进制流中写入数据或者从二进制流取出数据时的偏移量。

  • length

表示从二进制流指定偏移位置开始取多少个字符。

  • value

待写入的数据。

5.2 错误处理

  1. 空值处理

如果输入参数中存在空值,则结果返回空值。

例如:

binary_get_char (vb varbinary, offset int)

select dbms_binary.binary_get_char ('ABCDEF ', null);

结果:NULL

说明:偏移offset输入空值,在函数内部处理的时候返回NULL。

  1. 非法参数

如果偏移量为负数或者偏移量加上所取数据类型的长度大于二进制流的长度,报非法参数错误EC_RN_INVALID_ARG_DATA,错误码:-6803。

例如:

binary_get_char (vb varbinary, offset int)

select dbms_binary.binary_get_char ('ABCDEF', -11);

结果:输入参数非法。

说明:输入的二进制流的长度为-11,偏移量为负数不合法,提示非法参数错误。

5.3 举例说明

使用包内的过程和函数之前,如果还未创建过系统包。请先调用系统过程创建系统包。

SP_CREATE_SYSTEM_PACKAGES (1,'DBMS_BINARY');

例1 使用binary_set_tinyint过程写入一个tinyint类型数据,并使用binary_get_tinyint函数输出该tinyint类型数据。

declare

bin varbinary(50);

val tinyint;

begin

bin = 'abcdef87';

val = 127;

dbms_binary.binary_set_tinyint(bin,0,val);

val = dbms_binary.binary_get_tinyint(bin,0);

print val;

end;

/

结果:

127

例2 使用binary_set_varchar过程写入一个varchar类型数据,并使用binary_get_varchar函数输出该varchar类型数据。

declare

bin varbinary(50);

val varchar;

begin

bin = 'abcdef87';

dbms_binary.binary_set_varchar(bin,0,'aaaa');

val = dbms_binary.binary_get_varchar(bin,0,4);

print val;

end;

/

结果:

aaaa
微信扫码
分享文档
扫一扫
联系客服