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

Funkce SIGN() v Oracle

V Oracle, SIGN() funkce vrací znaménko svého argumentu jako -1 , 0 , nebo 1 , v závislosti na tom, zda je argument záporný, nulový nebo kladný, a také v závislosti na tom, zda je argument typu NUMBER nebo číslo s plovoucí desetinnou čárkou.

Syntaxe

Syntaxe vypadá takto:

SIGN(n)

Kde n může být jakýkoli číselný datový typ nebo jakýkoli nečíselný datový typ, který lze implicitně převést na NUMBER a vrátí NUMBER .

Jak dešifrovat výsledek

Skutečný výsledek bude záviset na tom, zda je argument NUMBER typ nebo binární číslo s pohyblivou řádovou čárkou (BINARY_FLOAT a BINARY_DOUBLE ).

Pro hodnotu NUMBER typu, znak je:

  • -1, pokud n <0
  • 0, pokud n =0
  • 1, pokud n >0

Pro binární čísla s pohyblivou řádovou čárkou SIGN() funkce vrací znaménkový bit čísla. Znaménkový bit je:

  • -1, pokud n <0
  • +1, pokud n >=0 nebo n =NaN

Příklad

V tomto příkladu předám NUMBER typ:

SELECT SIGN(78.50)
FROM DUAL;

Výsledek:

   SIGN(78.50) 
______________ 
             1

Zde je další příklad demonstrující různé výstupy s NUMBER typ:

SELECT 
    SIGN(7),
    SIGN(0),
    SIGN(-7)
FROM DUAL;

Výsledek:

   SIGN(7)    SIGN(0)    SIGN(-7) 
__________ __________ ___________ 
         1          0          -1

Binární čísla s plovoucí desetinnou čárkou

Zde je příklad toho, co se stane, když tato čísla přetypujeme jako binární čísla s plovoucí desetinnou čárkou:

SELECT 
    SIGN(CAST(7 AS BINARY_FLOAT)) AS "7",
    SIGN(CAST(0 AS BINARY_FLOAT)) AS "0",
    SIGN(CAST(-7 AS BINARY_FLOAT)) AS "-7",
    SIGN(binary_float_nan) AS "NaN"
FROM DUAL;

Výsledek:

   7    0    -7    NaN 
____ ____ _____ ______ 
   1    1    -1      1 

Také jsem přidal NaN do seznamu (binary_float_nan literál s plovoucí desetinnou čárkou představuje hodnotu typu BINARY_FLOAT pro kterou podmínka IS NAN je pravda).

Nečíselné argumenty

Co se stane, když předáme nečíselný argument, který nelze převést na číselný datový typ:

SELECT SIGN('Bruce')
FROM DUAL;

Výsledek:

Error starting at line : 1 in command -
SELECT SIGN('Bruce')
FROM DUAL
Error report -
ORA-01722: invalid number

Nulové hodnoty

Předávání null vrátí null :

SET NULL 'null';

SELECT SIGN(null)
FROM DUAL;

Výsledek:

   SIGN(NULL) 
_____________ 
         null

Ve výchozím nastavení vrátí SQLcl a SQL*Plus prázdné místo vždy, když null dochází v důsledku SQL SELECT prohlášení.

Můžete však použít SET NULL určit jiný řetězec, který má být vrácen. Zde jsem uvedl, že řetězec null by měl být vrácen.

Nesprávný počet argumentů

Volání SIGN() bez předání jakýchkoli argumentů vrátí chybu:

SELECT SIGN()
FROM DUAL;

Výsledek:

Error starting at line : 1 in command -
SELECT SIGN()
FROM DUAL
Error at Command Line : 1 Column : 8
Error report -
SQL Error: ORA-00909: invalid number of arguments
00909. 00000 -  "invalid number of arguments"
*Cause:    
*Action:

A předání nesprávného počtu argumentů má za následek chybu:

SELECT SIGN(2, 3)
FROM DUAL;

Výsledek:

Error starting at line : 1 in command -
SELECT SIGN(2, 3)
FROM DUAL
Error at Command Line : 1 Column : 8
Error report -
SQL Error: ORA-00909: invalid number of arguments
00909. 00000 -  "invalid number of arguments"
*Cause:    
*Action:

  1. Jak modelovat pro snadnou údržbu databáze

  2. Jak vytvořit slabý referenční kurzor PL/SQL v databázi Oracle

  3. Jak zobrazit typ proměnné v PL/SQL?

  4. Jak volat uloženou proceduru v JDBC