CALL调用

说明

瀚高数据库管理系统V9.0中的CALL语句支持调用单独的函数存储过程,也可以是在包或对象类型中的函数和存储过程。CALL调用函数增加INTO子句语法,插入的目标是一个host variable。

绑定变量在CALL语句中可以是一个输入绑定变量或输出绑定变量,取决于使用方式,如用在参数中依据参数的IN、OUT、INOUT模式,IN模式参数对应的是输入绑定变量、OUT/ INOUT参数是输出绑定变量,函数调用的INTO子句中引用的绑定变量是输出绑定变量。CALL调用函数和存储过程的参数或INTO子句中引用绑定变量。

示例

--call into

highgo=# create or replace function f_defs(a number default 1314)

highgo-# return number

highgo-# is

highgo-# begin

highgo-# raise notice ‘%’, a;

highgo-# return a;

highgo-# end;

highgo-# /

CREATE FUNCTION

highgo=# variable x number

highgo=# call f_defs() into :x;

NOTICE: 1314

Call completed.

highgo=# print x

X

-—–

1314

--call调用包

highgo=# create table tb1(c1 int);

CREATE TABLE

highgo=# create or replace package pkg is

highgo-# var1 integer;

highgo-# procedure test_p ;

highgo-# end;

highgo-# /

CREATE PACKAGE

highgo=# create or replace package body pkg is

highgo-# procedure test_p is

highgo-# begin

highgo-# insert into tb1 values(1);

highgo-# end;

highgo-# begin

highgo-# var1 := 2;

highgo-# end;

highgo-# /

CREATE PACKAGE BODY

highgo=# call pkg.test_p();

Call completed.

highgo=# select * from tb1;

c1

-—

1

(1 row)

限制

1、CALL调用无参或全取默认值的函数/存储过程不能省略空括号。

2、CALL调用的函数参数数量取决于configure时的指定的大小,受block_size的限制。最大值依赖block_size大小,8kb最大600个,16kb最大1200个,32kb最大2400个。

3、CALL语句中OUT参数对应的绑定变量支持对精度和数据类型的验证,即超出精度可能报错也可能截断,规则如下:

首先绑定变量只有字符类型允许指定精度,因此对于精度溢出的情景只需要考虑字符类型的绑定变量即可。假设一个声明为字符类型的绑定变量的精度在接收函数或存储过程OUT参数或返回值时一定会溢出,那么当溢出时是选择报错还是选择截断输出字符串,规则如下:

  • 当绑定变量数据类型与OUT参数/返回值的数据类型相同时,采用截断策略。
  • 当绑定变量数据类型与OUT参数/返回值的数据类型不同时,采用报错策略。
  • 输出绑定变量不允许被重复绑定。