Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Tausendertrennfunktion in Oracle?

Ihre Funktion wird in eine unendliche Schleife gehen und nie wieder herauskommen. Obwohl es kompiliert wird, bedeutet das nicht, dass die Funktion gut funktionieren würde, da das Problem zur Laufzeit auftritt.

Die WHILE-Bedingung ist immer TRUE, und der Zähler erhöht sich nie, da die Funktion nie in die IF-Bedingung geht.

Sie haben counter :=2 gesetzt und dann Ihre WENN-Bedingung ist:

Wie könnte es jemals wahr sein? 2 ist nie größer als 2 , daher wird der Zähler nie erhöht , da Sie es innerhalb des IF-END IF haben blockieren.

Wenn Sie die Funktion ausführen, kommt sie nie aus der Endlosschleife heraus.

Kommen wir zu Ihrer Anforderung,

Warum wollen Sie das Rad neu erfinden, wenn Oracle Ihnen bereits das Tausendertrennzeichen bietet.

Aus Dokumentation,

  • Element :G

  • Beispiel:9G999

  • Beschreibung :Gibt an der angegebenen Position das Gruppentrennzeichen (den aktuellen Wert des Parameters NLS_NUMERIC_CHARACTER) zurück. Sie können mehrere Gruppentrennzeichen in einem Zahlenformatmodell angeben.

Zum Beispiel

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.

Wenn Sie möchten, dass der Funktionsname mit dem von SQL Server übereinstimmt Funktion, erstellen Sie dann einfach eine benutzerdefinierte Funktion in der Oracle-Datenbank mit demselben Namen. Die Logik wäre die gleiche wie bei der obigen Abfrage.

Zum Beispiel

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>

Lassen Sie uns die Funktion ausführen :

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>