使用 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;