sql >> Database >  >> RDS >> Oracle

Duizend scheidingsteken functie in orakel?

Je functie gaat in een oneindige LUS en komt er nooit meer uit. Hoewel het compileert, betekent dit niet dat de functie goed zou werken, aangezien het probleem zich tijdens runtime voordoet.

De WHILE-voorwaarde is altijd TRUE en de teller loopt nooit op, omdat de functie nooit in de IF-voorwaarde gaat.

U heeft counter :=2 . ingesteld en dan je ALS voorwaarde is:

Hoe kan het ooit waar zijn? 2 is nooit groter dan 2 , daarom wordt de teller nooit verhoogd , aangezien je het in de IF-END IF . hebt blok.

Wanneer u de functie uitvoert, komt deze nooit uit de oneindige lus.

Komt naar uw wens,

Waarom wil je het wiel opnieuw uitvinden als Oracle je al het duizendtal-scheidingsteken biedt.

Uit documentatie,

  • Element :G

  • Voorbeeld:9G999

  • Beschrijving :Retourneert op de opgegeven positie het groepsscheidingsteken (de huidige waarde van de parameter NLS_NUMERIC_CHARACTER). U kunt meerdere groepsscheidingstekens opgeven in een model met getalnotatie.

Bijvoorbeeld,

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.

Als u wilt dat de functienaam hetzelfde is als die van SQL Server functie, maak dan gewoon een door de gebruiker gedefinieerde functie in de Oracle-database met dezelfde naam. De logica zou hetzelfde zijn als de bovenstaande vraag.

Bijvoorbeeld,

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>

Laten we de functie uitvoeren :

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. Hoe guid bij insert te genereren/auto-incrementeren zonder triggers en handmatige inserts in mysql?

  2. MyBatis RowBounds beperkt de resultaten van zoekopdrachten niet

  3. Vastleggen van wijzigingsgegevens of bijhouden van wijzigingen - hetzelfde als de traditionele audittrailtabel?

  4. Nieuwe traceervlag om tabelvariabele prestaties te herstellen