CREATE 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;
1 仅限于存储过程语言
2 请参阅 例程参数列表
3 请参阅 返回子句
4 请参阅 专用名
5 请参阅 例程修饰符
6 请参阅 语句块
7 仅限于外部例程
8 请参阅 REFERENCING 和 FOR 子句
9 请参阅 外部例程引用
10 请参阅 用引号括起的字符串