Oracle
 sql >> база данни >  >> RDS >> Oracle

Функция Thousand Seperator в Oracle?

Вашата функция ще влезе в безкраен LOOP и никога няма да излезе от него. Въпреки че се компилира, това не означава, че функцията ще работи добре, тъй като проблемът ще възникне по време на изпълнение.

Условието WHILE винаги е TRUE и броячът никога не се увеличава, тъй като функцията никога не влиза в условието IF.

Вие сте задали counter :=2 и след това вашето АКО условие е:

Как може да е истина? 2 никога не е по-голямо от 2 , следователно броячът никога не се увеличава , тъй като го имате вътре в IF-END IF блокирай.

Когато изпълните функцията, тя никога не излиза от безкрайния цикъл.

Отговаряйки на вашите изисквания,

Защо искате да изобретите колелото, след като Oracle вече ви предоставя разделителя за хиляди.

От документацията,

  • Елемент:G

  • Пример:9G999

  • Описание:Връща в посочената позиция разделителя на групата (текущата стойност на параметъра NLS_NUMERIC_CHARACTER). Можете да посочите множество разделители на групи в модел на числов формат.

Например,

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.

Ако искате името на функцията да е същото като това на SQL Server функция, след това просто създайте дефинирана от потребителя функция в база данни на Oracle със същото име. Логиката ще бъде същата като горната заявка.

Например,

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>

Нека изпълним функцията :

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. ORACLE:НЯМА НАМЕРЕНИ ДАННИ -- но данни съществуват

  2. План за изпълнение на Oracle

  3. Кога Oracle започна да поддържа top:select top? p2_.PRODUCT_ID от PRODUCT?

  4. Изтриване на файлове от директория в съхранена процедура на Oracle

  5. Извличане на данни за 31 декември от последните 5 години и днешната дата