创建 [OR REPLACE] 程序命令

使用 CREATE PROCEDURE 命令创建存储过程。 使用 CREATE OR REPLACE PROCEDURE 创建存储过程,或使用新的返回类型、执行权限或存储过程主体更新现有存储过程。

概要

CREATE [OR REPLACE] PROCEDURE <name> (<arguments>)
RETURNS <type> [ [ EXECUTE AS OWNER | EXECUTE AS CALLER ] ] LANGUAGE
NZPLSQL AS <procedure_body>;

输入

CREATE OR REPLACE PROCEDURE 命令需要以下输入:
表 1. 创建或替换 PROCEDURE 输入
输入 描述
名称 要创建或替换的存储过程的名称。 该名称是用于在 SQL 表达式中启动存储过程的 SQL 标识。

如果存储过程已存在,则不能使用 CREATE OR REPLACE 命令更改名称。

对于支持多模式的系统,可以指定schema.procedure格式的名称,以便在当前数据库的不同模式下创建存储过程。 不能在不同的数据库中创建存储过程。

参量 指定参数数据类型的完整列表。 您还可以指定 VARARGS 值来创建一个变量参数存储过程,用户最多可以输入 64 个任意支持数据类型的值。 VARARGS 是一个互斥值,不能在列表中指定任何其他参数。

如果存在存储过程,就不能使用 CREATE OR REPLACE 命令更改参数类型列表。 您可以更改参数类型的某些方面,例如更改字符串的大小或数值的精度和比例。 您也可以从参数列表中移除 VARARGS,或将其添加到本来为空的参数列表中。

返回<类型 指定存储过程返回的数据类型。 <type>值可以是Netezza Performance Server数据类型或 REFTABLE (<table-name>) 值,表示返回的结果集与指定表相似。 表必须存在,尽管它可以是空的,并且在执行程序后继续存在。
作为所有者执行 如果指定了存储过程,则存储过程在运行时会使用存储过程所有者 ID 进行所有访问控制和权限检查。 这是缺省值。
作为调用者执行 如果指定了该用户 ID,存储过程在运行时将使用调用存储过程的用户的 ID 进行所有访问控制和权限检查。
中文 指定程序使用的编程语言。 默认值和唯一支持的值是 NZPLSQL。
程序体 指定存储过程的文本,必须用单引号或 BEGIN_PROC/END_PROC 对括住。

您可以对正文进行混淆处理,以向有权限显示程序的用户屏蔽内容。

输出

CREATE [OR REPLACE] PROCEDURE 命令有以下输出:
表 2. 创建 [OR REPLACE] 输出过程
输出 描述
CREATE PROCEDURE 命令成功后系统返回的信息。
ERROR:创建存储过程:拒绝权限。 该信息表明用户没有创建程序的权限。
错误:用户 "username "不允许创建/删除程序。 如果用户账户没有权限创建存储过程,系统将返回此消息。
错误:同义词 "name "已经存在 如果存在与您为存储过程指定的名称相同的同义词,系统将返回此消息。
错误:ProcedureCreate:已存在具有相同签名的程序NAME 当您发出 CREATE PROCEDURE 命令,而数据库中存在具有相同名称和参数类型列表的存储过程时,将返回此错误。 使用 CREATE OR REPLACE PROCEDURE 代替。
注意:FunctionCreate:现有 UDXNAME(ARGS) 的字符串/数字参数大小不同 此消息表示存在名称为的存储过程,但为字符串或数字参数指定了不同的大小。 如果无意更改存储过程签名,请检查签名并确保其正确无误。
错误:无法为 varargs 存储过程指定参数 您不能在参数列表中同时指定 VARARGS 值和任何其他参数值。 VARARGS 值是互斥的。

描述

创建存储过程时,存储过程的签名(即名称和参数类型列表)在数据库中必须是唯一的。 在同一个数据库中,其他存储过程不能有相同的名称和参数类型列表。

使用 CREATE OR REPLACE 命令不能更改存储过程名称或参数类型列表。 您可以更改参数类型的某些方面,例如,可以更改字符串的大小或数值的精度和比例,还可以在原本为空的参数列表中添加或删除 VARARGS 值。 要更改存储过程的名称或参数类型列表,必须删除存储过程,然后用新名称或参数类型列表创建存储过程。

不能替换活动查询中正在使用的存储过程。 活动查询的事务完成后,Netezza Performance Server系统会处理 CREATE OR REPLACE PROCEDURE 命令。

需要权限
您必须拥有创建存储过程权限,才能使用 CREATE PROCEDURE 命令。 此外,如果使用 CREATE OR REPLACE PROCEDURE 更改存储过程,则必须拥有创建存储过程和更改存储过程的权限。
常用任务
使用 CREATE PROCEDURE 命令创建新的存储过程并成为其所有者。 您可以使用 ALTER PROCEDURE 命令来更改存储过程的所有者。

用途

创建名为 "customername的存储过程:
   MYDB.SCHEMA(USER)=> CREATE OR REPLACE PROCEDURE customer() RETURNS INT8
LANGUAGE NZPLSQL AS BEGIN_PROC BEGIN RAISE NOTICE 'The customer
name is alpha'; END; END_PROC;

在同一数据库的不同模式中创建名为 "customername的新存储过程:

MYDB.SCHEMA(USER)=> CREATE OR REPLACE PROCEDURE sch_two.customer()
RETURNS INT8 LANGUAGE NZPLSQL AS BEGIN_PROC BEGIN RAISE NOTICE 'The
customer name is alpha'; END; END_PROC;