创建外部过程
仅限企业模式
安装外部过程后,必须使用 CREATE PROCEDURE(外部) 告知 Vertica 这一情况。
只有超级用户可以创建外部过程,默认情况下,只有他们具有执行权限。但是,超级用户可以向用户和角色授予对存储过程的 EXECUTE 权限。
创建过程后,其元数据将存储在系统表 USER_PROCEDURES 中。用户只能查看他们已获得执行权限的过程。
示例
以下示例将为 helloplanet.sh
外部过程文件创建名为 helloplanet
的过程。此文件接受一个 VARCHAR
实参。示例代码在 外部过程要求 中提供。
=> CREATE PROCEDURE helloplanet(arg1 VARCHAR) AS 'helloplanet.sh' LANGUAGE 'external'
USER 'dbadmin';
下一个示例将为脚本 copy_vertica_database.sh
创建名为 proctest
的过程。此脚本可将数据库从一个群集复制到另一个群集;该脚本包含在服务器 RPM(位于目录
/opt/vertica/scripts
中)中。
=> CREATE PROCEDURE proctest(shosts VARCHAR, thosts VARCHAR, dbdir VARCHAR)
AS 'copy_vertica_database.sh' LANGUAGE 'external' USER 'dbadmin';
使外部过程过载
您可以创建具有相同名称的多个外部过程,但前提是这些外部过程具有不同的签名,即接受不同的实参集。例如,可以重载 helloplanet
外部过程,以便同时接受整数值:
=> CREATE PROCEDURE helloplanet(arg1 INT) AS 'helloplanet.sh' LANGUAGE 'external'
USER 'dbadmin';
执行此语句后,数据库编录将存储两个名为 helloplanet
的外部过程,其中一个外部过程接受 VARCHAR 实参,另一个接受整数。当您调用外部过程时,Vertica 会评估过程调用中的实参以确定要调用的过程。