【IT168 技术】Tcl语言因其字符串处理能力而闻名,因此如果想要更好地分析查询结果,那么Tcl语言是个很好的选择。其另一个很棒的特性是安全,因为PL/Tcl(即PostgreSQL提供的集成Tcl接口)无法访问数据库服务器内部的工作。不过,如果要想获取更多能力,可以参考PL/TclU,U表示Untrusted(不可信的)。要用它访问数据库,需要用户为超级用户,并且通常也需要更加小心。
相关文章:
由于PL/Tcl是默认集成的,使用之前用户无需安装任何东西,但需要将以下语句添加到要使用PL/Tcl的代码中:
由于PL/Tcl集成到Postgres系统中,与查询和事务处理相比,其对函数与触发器更有用。通常情况下,比起集成一个完整的数据库环境来说,以PL/开头的语言对能力的扩展更加有效,创建用户自己函数的语法格式如下所示:
#这里为函数体
$$ LANGUAGE pltcl;
例如为一个简单的相加函数示例:
return $1 + $2
$$ LANGUAGE pltcl;
如果在句末使用LANGUAGE指令的同时使用STRICT,则不必判断输入是否为null。如果不想使用STRICT,可以使用一些if模块和argisnull关键字(点击这里查看更多详细信息)。
使用数据库中的值很简单。例如,假设用户有一个电脑规格表,并且想要使用一个函数查看硬件是否过时以及是否需要更换,可以使用如下代码:
name text,
cpuspeed integer #Mhz
memory integer #MB
hard_drive integer #GB
);
CREATE FUNCTION isObsolete (machine) RETURNS boolean AS $$
if {$1(cpuspeed) < 266 && $1(memory) < 256 && $1(hard_drive) < 2} {
return "t"
}
return "f"
$$ LANGUAGE pltcl;
可以用“spi”(server programming interface - 服务器编程接口)助记符为前缀的系列函数在Postgres数据库中进行选择(select)、插入(insert)及更新(update)对象。spi函数如spi_exec、spi_prepare、spi_execp和quote等,与libpq中的PQ函数类似。spi_exec执行一个SQL命令,返回处理的行数。用户可以指定返回的最大行数,并且将选择的列的值保存到Tcl变量中,如下所示:
spi_prepare比较并存储查询结果供以后使用,用户可以用spi_execp函数对这些数据进行处理。spi_prepare会返回一个查询ID,因此spi_execp知道要处理哪些数据。当使用单引号和/或转义字符时,quote符号十分有用。示例如下:
# myvar 包含字符串 "won't"
# 当展开时,分析器会给出错误提示
"SELECT '[ quote $val ]' AS ret" # 这么表示则没有问题