创建 [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>;
输入
| 输入 | 描述 |
|---|---|
| 名称 | 要创建或替换的存储过程的名称。 该名称是用于在 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 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;