sql >> Databáze >  >> RDS >> Oracle

Funkce tisíce separátorů v orákulu?

Vaše funkce přejde do nekonečné SMYČKY a nikdy z ní nevyjde. Ačkoli se zkompiluje, neznamená to, že by funkce fungovala dobře, protože k problému dojde za běhu.

Podmínka WHILE je vždy TRUE a počítadlo se nikdy nezvyšuje, protože funkce nikdy nepřejde do podmínky IF.

Nastavili jste counter :=2 a poté podmínka POKUD je:

Jak by to mohla být pravda? 2 není nikdy větší než 2 , proto se počítadlo nikdy nezvyšuje , protože to máte uvnitř IF-END IF blokovat.

Když funkci spustíte, nikdy nevyjde z nekonečné smyčky.

Splňujeme váš požadavek,

Proč chcete znovu vynalézat kolo, když vám Oracle již poskytuje oddělovač tisíců.

Z dokumentace

  • Prvek :G

  • Příklad:9G999

  • Popis :Vrátí na zadané pozici oddělovač skupiny (aktuální hodnotu parametru NLS_NUMERIC_CHARACTER). V modelu číselného formátu můžete zadat více oddělovačů skupin.

Například,

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.

Pokud chcete, aby byl název funkce stejný jako název SQL serveru pak stačí vytvořit uživatelsky definovanou funkci v databázi Oracle se stejným názvem. Logika by byla stejná jako u výše uvedeného dotazu.

Například,

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>

Proveďme funkci :

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. Migrace z MySQL Enterprise na MariaDB 10.3

  2. flyway clean nezahazuje úlohy nebo programy plánovače

  3. mysql count nefunguje správně?

  4. Připojte dvě tabulky mysql, jeden až mnoho vztahů