使用 CREATE ROUTINE FROM 语句通过引用驻留在单个文件中的 CREATE FUNCTION 语句或 CREATE PROCEDURE 语句的文本来注册 UDR。
该语句是 SQL ANSI/ISO 标准的扩展。
你可以在 ESQL/C 中使用此语句。
元素 | 描述 | 限制 | 语法 |
---|---|---|---|
file | 包含 CREATE PROCEDURE 或 CREATE FUNCTION 语句的全文本的文件的路径名和文件名。缺省路径名为当前目录。 | 必须存在并且仅能包含一个 CREATE FUNCTION 或 CREATE PROCEDURE 语句 | 特定于操作系统 |
file_var | 包含文件规范的程序变量的名称 | 必须是字符数据类型;内容必须满足 file 限制 | 特定于语言 |
您提供的文件规范是相对的。如果您不提供路径名,客户端应用程序在当前目录中寻找文件。
当 IFX_EXTEND_ROLE 配置参数设置成 1 或 ON 时,只有被数据库服务器管理员(DBSA)授权内置 EXTEND 角色的用户才能可以创建外部例程。此外,您对要注册例程所在的数据库必须至少持有的 Resource 存取权限。还必须对编写例程所使用的程序语言拥有 Usage 权限。(有关使用 C 语言将 Usage 特权授予用户或角色的语法,请参阅语言级权限。)
例程使用创建时有效的对照顺序。请参阅 SET COLLATION 语句 获取有关使用非缺省对照的信息。
以下语句通过参考 del_ord.sql 文件中的文本在 UDR 注册。
EXEC SQL CREATE ROUTINE FROM 'del_ord.sql';
#include <stdio.h> main() { printf( "CREATE ROUTINE FROM ESQL Program running.\n\n"); EXEC SQL WHENEVER ERROR STOP; EXEC SQL connect to 'stores_demo'; EXEC SQL CREATE ROUTINE FROM 'del_ord.sql'; EXEC SQL disconnect current; printf("\nCREATE ROUTINE Sample Program over.\n\n"); exit(0); } del_ord.sql CREATE FUNCTION delete_order( p_order_num int) RETURNING int, int; DEFINE item_count int; SELECT count(*) INTO item_count FROM items WHERE order_num = p_order_num; DELETE FROM orders WHERE order_num = p_order_num; RETURN p_order_num, item_count; END FUNCTION;