CREATE PROCEDURE(外部)

仅限企业模式

外部过程添加到 Vertica。有关详细信息,请参阅外部过程

语法

CREATE PROCEDURE [ IF NOT EXISTS ]
    [[database.]schema.]procedure( [ argument-list ] )
    AS executable
    LANGUAGE 'EXTERNAL'
    USER OS-user

参数

IF NOT EXISTS

如果存在同名对象,请不要创建它并继续。如果忽略此选项且对象存在,Vertica 将生成 ROLLBACK 错误消息。在上述两种情况下,如果对象已经存在,则不会创建它。

IF NOT EXISTS 子句适用于以下 SQL 脚本:可在某个对象不存在时创建该对象。

请参阅 ON_ERROR_STOP 了解相关信息。

此选项无法与 OR REPLACE 结合使用。

[database.]schema

数据库和架构。默认架构为 public。如果指定一个数据库,它必须是当前数据库。

过程
为外部过程指定名称,其中 procedure-name符合标识符中描述的约定。
argument-list
过程实参的逗号分隔列表,其中每个实参指定如下:
[ argname ] argtype
  • argname 可选为此实参提供描述性名称。

  • argtype 必须为 Vertica 支持的以下数据类型之一:

    • BIGINT

    • BOOLEAN

    • DECIMAL

    • DOUBLE PRECISION

    • FLOAT

    • FLOAT8

    • INT

    • INT8

    • INTEGER

    • MONEY

    • NUMBER

    • NUMERIC

    • REAL

    • SMALLINT

    • TINYINT

    • VARCHAR

executable
过程目录中可执行程序的名称,字符串。
OS-user
文件的所有者,字符串。所有者:
  • 不能是 root

  • 必须对 executable 具有执行权限

特权

超级用户

系统安全

  • 过程文件必须由数据库管理员(OS 帐户)或同一组中作为管理员的用户拥有。过程文件还必须启用集 UID 属性,并允许该组的读取和执行权限。

  • 您使用 CREATE PROCEDURE(外部) 创建的外部过程始终以 Linux dbadmin 权限运行。如果 dbadmin 或伪超级用户授予非 dbadmin 权限以使用 GRANT(过程) 运行过程,请注意非 dbadmin 用户以完全 Linux dbadmin 权限运行该过程。

示例

以下示例展示了如何为过程文件 helloplanet.sh 创建一个名为 helloplanet 的过程。此文件接受一个 VARCHAR 实参。

创建文件:

#!/bin/bash
echo "hello planet argument: $1" >> /tmp/myprocedure.log

使用以下 SQL 创建过程:

=> CREATE PROCEDURE helloplanet(arg1 varchar) AS 'helloplanet.sh' LANGUAGE 'external' USER 'dbadmin';

另请参阅