对于一个完成实际工作的底层函数的调用来说,每一个操作符都是“语法糖”,因此在创建操作符之前你必须先创建底层函数。不过,一个操作符不只是语法糖,因为它携带了额外的信息来帮助查询规划器优化使用该操作符的查询。下一节将致力于解释这些额外信息。
PostgreSQL支持左一元、右一元和二元操作符。操作符可以被重载 ,也就是说相同的操作符名称可以被用于具有不同操作数数量和类型的操作符。在执行一个查询时,系统会根据提供的操作数的数量和类型决定要调用的操作符。
这里有一个创建用于对两个复数做加法的操作符的例子。我们假设我们已经创建了类型complex
(见第 37.13 节)的定义。首先我们需要一个函数做这个加法,然后我们可以定义该操作符:
CREATE FUNCTION complex_add(complex, complex)
RETURNS complex
AS "filename
", "complex_add"
LANGUAGE C IMMUTABLE STRICT;
CREATE OPERATOR + (
leftarg = complex,
rightarg = complex,
function = complex_add,
commutator = +
);
现在我们可以执行一个这样的查询:
SELECT (a + b) AS c FROM test_complex;
c
-----------------
(5.2,6.05)
(133.42,144.95)
这里我们已经展示了如何创建一个二元操作符。要创建一元操作符,只要忽略leftarg
(左一元)和rightarg
(右一元)之一即可。在CREATE OPERATOR
中只要求procedure
子句和参数子句。例子中展示的commutator
子句是一个可选的子句,它被用作一个查询优化器使用的提示。有关
commutator
以及其他优化器提示的细节出现在下一小节中。
提供给 PL/Perl 函数代码的参数值是被转换成文本形式的输入参数(就像它们 被SELECT语句显示的那样)。反过来, return和return_...
del dateTime 属性 del 对象实例返回文本被删除的日期和时间:var x = document.getElementById("myDel").dateTime;x 输出结果为...
Details open 属性 Details 对象实例显示额外的描述信息:document.getElementById("myDetails").open=true;定义和用法open 属性...
Style paddingTop 属性 Style 对象定义和用法paddingTop 属性设置或返回元素的上内边距。padding 属性定义元素边框与元素内容之...
Style transformOrigin属性 Style 对象实例设置旋转元素的基点位置:document.getElementById(myDIV).style.transformOrigin=0 0...
Style zIndex 属性 Style 对象定义和用法zIndex 属性设置或返回定位元素的堆叠顺序。拥有更高堆叠顺序(1)的元素总是会处于较低...
Table caption 属性 Table 对象定义和用法caption 属性返回了表格的 caption 元素。caption 元素定义了表格的标题。注意: capti...
以下为所有层次查询运算符列表:运算符操作数含义PRIOR一元用于指明 column 来自 parent rowCONNECT_BY_ROOT一元用于指明顶层祖...