创建外部过程

仅限企业模式

安装外部过程后,必须使用 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 会评估过程调用中的实参以确定要调用的过程。

另请参阅