sql - 创建具有左侧/右侧的用户定义运算符

标签 sql oracle plsql operators

我开始用 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 语句中使用(selectinsert 等等)。您不能直接在 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/

相关文章:

SQL多对多匹配

javascript - 为堆叠条形图转换 JSON 数组的数据结构

vb.net - 无法在合并语句中捕获错误

oracle - 如何从 PL/SQL 过程执行 'describe table_name' 命令?

oracle - 需要帮助执行即时更新查询

mysql - 如何在hql中编写连接查询?

mysql - 如何将结果集拆分成更小的子集?

oracle - 使用 Oracle Streams AQ 在 Spring MDB 中共享 JMS 和 Hibernate 事务?

oracle - SQL Developer Oracle,如何调用程序?

java - 如何在jdbc中检索record%type表?