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');

SET SERVEROUTPUT ON;  --PRINT需要设置这条语句,才能打印出消息

例 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
微信扫码
分享文档
扫一扫
联系客服