Создать пользовательский оператор с левыми / правыми сторонами

Я начинаю развивать оператора Oracle с помощью pl / sql. В руководстве есть несколько примеров, но теперь я что-то делаю.

Во всех примерах, которые я видел, это всегда так:

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' 

Спасибо за вашу помощь.

EDIT: Я знаю, что это возможно с PostgreSQL, но не нашел для Oracle
http://www.postgresql.org/docs/current/static/sql-createoperator.html

Выдержка из вашего комментария к ответу @ ajmalmhd04

я действительно хочу использовать мой оператор как встроенный (=, + …)

Да, документация немного запутанна в том, как она определяет определяемые пользователем операторы, особенно эту часть:

пользовательские операторы действуют как встроенные операторы, такие как <,> и =;

К сожалению, это означает, что вы можете использовать пользовательские операторы, где (в основном) вы можете использовать встроенные операторы, но не так ( 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; 

Преимущества создания и использования операторов, если вы не участвуете в разработке приложений, основанных на сервере, расширений (картриджей данных), например, типов индексов, которые не отображаются мне лично. Нельзя думать о ситуации, когда вы можете использовать операторов и не можете использовать функции. Однако противоположное не соответствует действительности. Вы можете взглянуть на способность оператора иметь несколько привязок как способ использования его как перегруженной функции. Но, с другой стороны, вы легко можете достичь того же с пакетами.

1) создать TYPE :

 CREATE OR REPLACE TYPE number_type IS TABLE OF NUMBER; 

2) создать функцию:

 CREATE OR REPLACE FUNCTION near_to_num_f(A number) RETURN number_type AS l_num number_type; BEGIN SELECT num BULK COLLECT INTO l_num FROM tab1 WHERE num + 15 >= a AND num -15 <= a; RETURN l_num; END; 

3) создать оператора:

 CREATE OR REPLACE OPERATOR near_to BINDING (number) RETURN number_type USING near_to_num_f; 

4) Создайте образец таблицы и вставьте некоторые данные:

  CREATE TABLE tab1 (num NUMBER); INSERT INTO tab1 VALUES( 90); INSERT INTO tab1 VALUES( 95); insert into tab1 values( 120); 

5) Запрос с использованием:

 SELECT * FROM tab1 WHERE num IN(select * from TABLE(near_to(100))); 

6) Выход:

  NUM ---------- 90 95 

Прочитайте больше