南大通用GBase8s 常用SQL语句(五十八)

1.1CREATE PROCEDURE 语句
使用 CREATE PROCEDURE 语句创建用户定义过程。(要从单独文件中的源代码文本创建过程,请使用 CREATE PROCEDURE FROM 语句。)
该语句是 SQL ANSI/ISO 标准的扩展。
语法

元素 描述 限制 语法
function, procedure 在此为新的 SPL 例程函数或过程声明的名称 请参阅 GBase 8s 上的过程名称 标识符
owner table_object 的所有者 必须拥有table_object 所有者名称
pathname 存储编译时警告的文件 必须存在于数据库驻留的计算机上 特定于操作系统
table_object 触发器可以调用 UDR 的表或视图的名称或同义词 必须存在于本地数据库中 标识符
用法
在 GBase 8s ESQL/C 中,您可以将 CREATE PROCEDURE 仅作为 PREPARE 语句中的文本使用。如果您希望创建编译时文本已知的过程,则必须使用 CREATE PROCEDURE FROM 语句。
如果您包含可选的 IF NOT EXISTS 关键字,且指定名称的过程已经注册于当前数据库中,则数据库服务器不采取任何操作(而非向应用程序发送异常)(因为过程的标识符可以被重载,所以它可以不必包含这些关键字,如果数据库服务器可以将新过程的参数列表解析为与当前数据库中相同名称的任何其他过程的参数列表不同。)
例程使用创建时有效的对照顺序,请参阅 GBase 8s 的SET COLLATION 语句 语句,获取关于使用非缺省对照的信息。
示例
对于此示例,假设您具有两个如下定义的重载的过程:
CREATE PROCEDURE raise_prices ( per_cent INT)
UPDATE stock SET unit_price = unit_price + (unit_price * (per_cent/100) );
END PROCEDURE

CREATE PROCEDURE raise_prices ( per_cent INT, selected_unit CHAR )
UPDATE stock SET unit_price = unit_price + (unit_price * (per_cent/100) )
where unit=selected_unit;
END PROCEDURE
为了引用上述过程,您需要在参数列表后提供过程名称,如下所示:
DROP PROCEDURE raise_prices(INT);
DROP PROCEDURE raise_prices(INT, CHAR);
更简便的方法是,使用指定的名称来标识它们。以下示例将会使用指定名称创建过程:
CREATE PROCEDURE raise_prices ( per_cent INT ) SPECIFIC raise_prices_all
UPDATE stock SET unit_price = unit_price + (unit_price * (per_cent/100) );
END PROCEDURE
DROP SPECIFIC PROCEDURE raise_prices_all;
CREATE PROCEDURE raise_prices ( per_cent INT, selected_unit CHAR )
SPECIFIC raise_prices_by_unit
UPDATE stock SET unit_price = unit_price + (unit_price * (per_cent/100) )
where unit=selected_unit;
END PROCEDURE
我们可以简单地使用它们指定的名称来删除它们:
DROP SPECIFIC PROCEDURE raise_prices_by_all;
DROP SPECIFIC PROCEDURE raise_prices_by_unit;
使用 CREATE PROCEDURE 与 CREATE FUNCTION 的对比
在 GBase 8s 中,尽管可以使用 CREATE PROCEDURE 来写入并在注册返回一个或多个值的 SPL 例程(即SPL 函数),但建议您改为使用 CREATE FUNCTION 。要注册外部函数,必须使用 CREATE FUNCTION 。
使用 CREATE PROCEDURE 语句来写入并注册 SPL 过程或注册外部过程。
有关类似用户定义的过程和用户定义的函数的术语如何在此手册中使用的信息,请参阅 例程、函数和过程之间的关系 。
例程、函数和过程之间的关系
过程是可接受参数但不返回任何值的例程。函数是可接受参数并返回一个或多个值的例程。 用户定义例程(UDR)是包括用户定义的过程和用户定义的函数的一般术语。关于指定的和未指定的已返回值的信息,请参阅返回子句 。
可以将 UDR 写入数据库服务器为支持的( SPL 例程)或者外部语言(外部例程)。其中术语 UDR 出现在此手册中,它同时可以指定 SPL 例程和外部例程。
用户定义的过程指 SPL 过程和外部过程。用户定义函数指 SPL 函数和外部函数。
在较早发行版的文档中,术语存储过程同时用于 SPL 过程和 SPL 函数。在此手册中,术语 SPL 例程替换术语存储过程。在有必要区分 SPL 函数和 SPL 过程函数时,本手册将区分两者。
术语外部例程应用于外部过程或外部函数,这两者都构造指定 UDR ,这些 UDR 由 SPL 以外的编程语言编写。在有必要区分外部函数和外部过程时,本手册将区分这两者。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值