使用左/右侧创建用户定义的运算符

mil*_*lon 6 sql oracle plsql operators

我开始用pl/sql开发一个Oracle运算符.指南中有一些例子,但现在我坚持一些东西.

在我看过的所有例子中,它总是这样:

CREATE OPERATOR Contains 
   BINDING (VARCHAR2, VARCHAR2) 
    RETURN NUMBER 
     USING text.contains;
Run Code Online (Sandbox Code Playgroud)

我们在WHERE子句中使用它:

SELECT * 
  FROM MyEmployees 
 WHERE Contains(resume, 'Oracle') = 1;
Run Code Online (Sandbox Code Playgroud)

是否可以创建一个像=, +, ...左侧和右侧一样使用的运算符?

在这种情况下像:

SELECT * 
  FROM MyEmployees 
 WHERE resume Contains 'Oracle'
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助.

编辑:我知道这可能与PostgreSQL,但没有找到甲骨文
http://www.postgresql.org/docs/current/static/sql-createoperator.html

Nic*_*nov 4

摘自您对 @ajmalmhd04答案的评论

我真的很想使用我的内置运算符(=,+ ...)

是的,文档定义用户定义运算符的方式有点令人困惑,尤其是这部分:

用户定义的运算符的作用类似于内置运算符,例如 <、> 和 =;

不幸的是,这意味着您可以使用用户定义的运算符,其中(大多数情况下)您可以使用内置运算符,但不能以与operand1 OPERATOR operand2使用内置运算符相同的方式(例如)使用<=。用户定义的运算符(如果不仔细观察的话)是调用函数的不同方式,但它们(运算符)只能在 DML 语句(selectinsert)中使用。您将无法直接在 PL/SQL 中使用它们,只能通过 DML 使用它们。所以,类似这样的事情,在 PL/SQL 中将导致PLS-00548: invalid use of operator.

if operator(<<arguments>>) = 1 then
  -- something
end if;
Run Code Online (Sandbox Code Playgroud)

如果您不参与开发特定于应用程序的基于服务器的扩展(数据盒)(例如索引类型),那么创建和使用运算符的好处对我个人而言并不明显。无法想象可以使用运算符而不能使用函数的情况。然而,事实恰恰相反。您可以将运算符具有多个绑定的能力视为将其用作重载函数的一种方式。但是,另一方面,您可以使用包轻松实现相同的目的。