我开始用 pl/sql 开发一个 Oracle 运算符。指南中有一些例子,但现在我坚持一些。
在我见过的所有示例中,它总是这样:
CREATE OPERATOR Contains
BINDING (VARCHAR2, VARCHAR2)
RETURN NUMBER
USING text.contains;
我们在
WHERE
中这样使用它条款:SELECT *
FROM MyEmployees
WHERE Contains(resume, 'Oracle') = 1;
是否可以创建一个运算符,其使用类似于
=, +, ...
左右两边?在这种情况下,如:
SELECT *
FROM MyEmployees
WHERE resume Contains 'Oracle'
谢谢你的帮助。
编辑 :
我知道 PostgreSQL 可以,但没有找到 Oracle
http://www.postgresql.org/docs/current/static/sql-createoperator.html
最佳答案
摘自您对@ajmalmhd04 answer 的评论
i really want to use my operator like built-in (=, + ...)
是的,documentation它定义用户定义的运算符的方式有点令人困惑,尤其是这部分:
user-defined operators act like the built-in operators such as <, >, and =;
不幸的是,这意味着您可以使用用户定义的运算符,其中(大部分)您可以使用内置运算符,但不能以相同的方式(例如
operand1 OPERATOR operand2
)使用内置运算符,例如 <
或 =
.用户定义的运算符,如果不是非常仔细地观察它们,是调用函数的不同方式,除了它们(运算符)只能在 DML 语句中使用(select
,insert
等等)。您不能直接在 PL/SQL 中使用它们,只能通过 DML。所以,像这样的东西,在 PL/SQL 中会导致
PLS-00548: invalid use of operator.
if operator(<<arguments>>) = 1 then
-- something
end if;
创建和使用运算符的好处,如果您不参与开发特定于应用程序的基于服务器的扩展(数据磁带),例如索引类型,我个人看不到。想不到可以用运算符,不能用函数的情况。然而,事实并非如此。您可以将运算符具有多个绑定(bind)的能力视为将其用作重载函数的一种方式。但是,另一方面,您可以通过包轻松实现相同的目标。
关于sql - 创建具有左侧/右侧的用户定义运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20140306/