Oracle
 sql >> Base de données >  >> RDS >> Oracle

Fonction Thousand Seperator dans Oracle?

Votre fonction entrera dans une BOUCLE infinie et n'en sortira jamais. Bien qu'il compile, cela ne signifie pas que la fonction fonctionnerait correctement, car le problème se produira au moment de l'exécution.

La condition WHILE est toujours TRUE, et le compteur n'incrémente jamais, puisque la fonction ne passe jamais dans la condition IF.

Vous avez défini counter :=2 puis votre condition SI est :

Comment cela pourrait-il être vrai ? 2 n'est jamais supérieur à 2 , donc le compteur n'est jamais incrémenté , puisque vous l'avez à l'intérieur du IF-END IF bloquer.

Lorsque vous exécutez la fonction, elle ne sort jamais de la boucle infinie.

Venir à votre exigence,

Pourquoi voulez-vous réinventer la roue alors qu'Oracle vous fournit déjà le séparateur de milliers.

À partir de la documentation,

  • Elément :G

  • Exemple :9G999

  • Description :renvoie à la position spécifiée le séparateur de groupe (la valeur actuelle du paramètre NLS_NUMERIC_CHARACTER). Vous pouvez spécifier plusieurs séparateurs de groupe dans un modèle de format numérique.

Par exemple,

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.

Si vous souhaitez que le nom de la fonction soit le même que celui de SQL Server fonction, puis créez simplement une fonction définie par l'utilisateur dans la base de données Oracle avec le même nom. La logique serait la même que la requête ci-dessus.

Par exemple,

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>

Exécutons la fonction :

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>