Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Funkcja Thousand Seperator w wyroczni?

Twoja funkcja przejdzie do nieskończonej PĘTLI i nigdy z niej nie wyjdzie. Mimo że się kompiluje, nie oznacza to, że funkcja będzie działać poprawnie, ponieważ problem wystąpi w czasie wykonywania.

Warunek WHILE jest zawsze TRUE, a licznik nigdy się nie zwiększa, ponieważ funkcja nigdy nie przechodzi w warunek JEŻELI.

Ustawiłeś counter :=2 a następnie warunek JEŻELI jest:

Jak to może być kiedykolwiek prawdziwe? 2 nigdy nie jest większe niż 2 , dlatego licznik nigdy nie jest zwiększany , ponieważ masz go w IF-END IF blokować.

Kiedy wykonujesz tę funkcję, nigdy nie wychodzi ona z nieskończonej pętli.

Spełniając Twoje wymagania,

Dlaczego chcesz wymyślać koło na nowo, skoro Oracle już zapewnia separator tysięcy.

Z dokumentacji,

  • Element:G

  • Przykład:9G999

  • Opis :Zwraca w określonej pozycji separator grupy (bieżąca wartość parametru NLS_NUMERIC_CHARACTER). Możesz określić wiele separatorów grup w modelu formatu liczb.

Na przykład

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.

Jeśli chcesz, aby nazwa funkcji była taka sama jak w SQL Server funkcji, a następnie po prostu utwórz funkcję zdefiniowaną przez użytkownika w bazie danych Oracle o tej samej nazwie. Logika byłaby taka sama jak w powyższym zapytaniu.

Na przykład

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>

Wykonajmy funkcję :

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy GRANT może być używany w ramach procedury sklepu Oracle?

  2. Znajdowanie przyczyny błędu zakleszczenia w pliku śledzenia Oracle

  3. Czy można opisać tabelę i najpierw wyświetlić kolumny NOTNULL?

  4. Dlaczego pojawia się błąd ORA-00937

  5. Czy ograniczenia klucza obcego wpływają na przekształcenia zapytań w Oracle?