sql >> Databasteknik >  >> RDS >> Oracle

Tusen Separator funktion i Oracle?

Din funktion kommer att gå in i en oändlig LOOP och kommer aldrig att komma ur den. Även om det kompileras betyder det inte att funktionen skulle fungera bra, eftersom problemet kommer att uppstå under körning.

WHILE-villkoret är alltid TRUE och räknaren ökar aldrig, eftersom funktionen aldrig går in i IF-tillståndet.

Du har ställt in counter :=2 och sedan ditt OM-tillstånd är:

Hur kunde det någonsin vara sant? 2 är aldrig större än 2 , därför ökas räknaren aldrig , eftersom du har det i IF-END IF blockera.

När du kör funktionen kommer den aldrig ut ur den oändliga slingan.

Kommer till ditt krav,

Varför vill du uppfinna hjulet på nytt när Oracle redan ger dig tusenseparatorn.

Från dokumentation,

  • Element :G

  • Exempel:9G999

  • Beskrivning :Returnerar gruppavgränsaren i den angivna positionen (det aktuella värdet på parametern NLS_NUMERIC_CHARACTER). Du kan ange flera gruppseparatorer i en modell med nummerformat.

Till exempel,

SQL> SELECT TO_CHAR(sal,'999G999') FROM emp;

TO_CHAR(
--------
     800
   1,600
   1,250
   2,975
   1,250
   2,850
   2,450
   3,000
   5,000
   1,500
   1,100
     950
   3,000
   1,300

14 rows selected.

Om du vill att funktionsnamnet ska vara detsamma som SQL Server funktionen, skapa sedan bara en användardefinierad funktion i Oracle-databasen med samma namn. Logiken skulle vara densamma som ovanstående fråga.

Till exempel,

SQL> CREATE OR REPLACE FUNCTION NumericFormat(
  2        col NUMBER)
  3      RETURN VARCHAR2
  4    AS
  5      o_num VARCHAR2(20);
  6  BEGIN
  7      o_num:=TO_CHAR(col,'999G999');
  8      RETURN o_num;
  9  END;
 10  /

Function created.

SQL>
SQL> sho err
No errors.
SQL>

Låt oss köra funktionen :

SQL> SELECT NumericFormat(sal) FROM emp;

NUMERICFORMAT(SAL)
----------------------------------------------
     800
   1,600
   1,250
   2,975
   1,250
   2,850
   2,450
   3,000
   5,000
   1,500
   1,100
     950
   3,000
   1,300

14 rows selected.

SQL>



  1. MySql SQL_CALC_FOUND_ROWS inaktiverar order by-satsen

  2. Vilken är den bästa databasstrukturen för att behålla flerspråkig data?

  3. Behöver hjälp med att bygga SQL-fråga med join and where on many to many relation

  4. Hur jämför jag två rader från samma tabell (SQL-server)?