sql >> Databáze >  >> RDS >> Oracle

Vytvořte uživatelsky definovaný operátor s levou/pravou stranou

Výňatek z vašeho komentáře pro @ajmalmhd04 odpověď

Ano, dokumentace je trochu matoucí ve způsobu, jakým definuje uživatelem definované operátory, zejména tuto část:

Bohužel to znamená, že můžete použít uživatelem definované operátory, kde (většinou) můžete použít vestavěné operátory, ale ne stejným způsobem (operand1 OPERATOR operand2 například) používáte vestavěné operátory, jako je < nebo = . Uživatelsky definované operátory, pokud se na ně nedíváme velmi zblízka, jsou odlišným způsobem volání funkcí s tou výjimkou, že je (operátory) lze použít pouze v příkazech DML (select , insert a tak dále). Nebudete je moci používat v PL/SQL přímo, pouze prostřednictvím DML. Takže něco takového v PL/SQL povede k PLS-00548: invalid use of operator.

if operator(<<arguments>>) = 1 then
  -- something
end if;

Výhody vytváření a používání operátorů, pokud se nepodílíte na vývoji aplikačně specifických serverových rozšíření (datových kazet), například indextypes, pro mě osobně nejsou tak viditelné. Nenapadá mě situace, kdy můžete používat operátory a nemůžete používat funkce. Opak však není pravdou. Můžete se podívat na schopnost operátora mít více vazeb jako způsob použití jako přetížené funkce. Ale na druhou stranu toho můžete snadno dosáhnout s balíčky.



  1. spoušť, pokud jinak

  2. Jak implementovat priority v SQL (postgres)

  3. Při použití whereHas v Laravelu vyberte SUM z poddotazu

  4. INSERT INTO...SELECT pro všechny sloupce MySQL