Operatori definiţi de utilizator

In blocurile PL/SQL şi în instrucţiunile SQL se pot folosi operatori implementaţi în cadrul sistemului Oracle. Lista operatorilor care se pot utiliza în SQL este precizată în documentul Operatori
Ca şi componente într-o bază de date se pot defini operatori utilizator, printr-o instrucţiune de forma următoare (simplificată):
CREATE [OR REPLACE] OPERATOR [schema.]denumire_operator 
  BINDING (lista_parametri) RETURN tip_valoare USING [schema.][pachet.]nume_functie
        [,(lista_parametri) RETURN tip_valoare USING [schema.][pachet.]nume_functie ] ...
Un operator se implementează prin una sau mai multe funcţii memorate.
La utilizarea operatorului se va folosi o listă de parametri (semnătura operatorului), care trebuie să coincidă cu lista argumentelor (ca număr, iar tipurile de pe aceeaşi poziţie să fie compatibile) de la una din funcţiile utilizate pentru implementare.
Tipul de dată pentru valoarea operatorului se precizează prin clauza RETURN.
Modificarea definiţiei unui operator se poate face printr-o instrucţiune:
ALTER OPERATOR ...
iar pentru ştergerea unui operator se poate folosi:
DROP OPERATOR [schema.]operator
Un operator definit se poate folosi într-o instrucţiune SELECT pentru: Observaţii.
La un operator se poate adăuga un comentariu prin instrucţiunea:
COMMENT ON OPERATOR [schema.]operator IS 'sir de caractere'
Pentru a obţine informaţii despre operatorii din baza de date se pot folosi view-urile sistem:
{USER|ALL|DBA}_OPERATORS
{USER|ALL|DBA}_OPERATOR_COMMENTS
Exemple:
create table test(a varchar2(10), b varchar2(10));
insert into test values ('a','A');
insert into test values ('1','1');
insert into test values ('a','b');
select * from test where a=b;
Definim o funcţie:
CREATE OR REPLACE FUNCTION egalitate(s1 varchar2, s2 varchar2) return INTEGER AS
begin
  if upper(s1)=upper(s2) then return 1; else return 0; end if;
end;
Folosirea funcţiei:
select  * from test where egalitate(a,b)=1;
Definim un operator:
CREATE OR REPLACE OPERATOR egal BINDING(varchar2,varchar2) RETURN INTEGER USING egalitate;
Folosirea operatorului:
select  * from test where egal(a,b)=1;
Referinţe: