Fungsi Anda akan masuk ke LOOP tak terbatas dan tidak akan pernah keluar darinya. Meskipun dikompilasi, itu tidak berarti fungsi akan berfungsi dengan baik, karena masalah akan terjadi pada waktu proses.
Kondisi WHILE selalu TRUE, dan penghitung tidak pernah bertambah, karena fungsi tidak pernah masuk ke kondisi IF.
Anda telah mengatur counter :=2
lalu kondisi JIKA adalah:
Bagaimana itu bisa benar? 2 tidak pernah lebih besar dari 2 , oleh karena itu penghitung tidak pernah bertambah , karena Anda memilikinya di dalam IF-END IF
blokir.
Saat Anda menjalankan fungsi, fungsi tersebut tidak akan pernah keluar dari infinite loop.
Sesuai dengan kebutuhan Anda,
Mengapa Anda ingin menemukan kembali roda ketika Oracle telah menyediakan pemisah seribu.
Dari dokumentasi,
-
Elemen :G
-
Contoh :9G999
-
Deskripsi :Mengembalikan pemisah grup ke posisi yang ditentukan (nilai parameter NLS_NUMERIC_CHARACTER saat ini). Anda dapat menentukan beberapa pemisah grup dalam model format angka.
Misalnya,
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.
Jika Anda ingin nama fungsi sama dengan SQL Server fungsi, lalu buat fungsi yang ditentukan pengguna di database Oracle dengan nama yang sama. Logikanya akan sama dengan kueri di atas.
Misalnya,
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>
Mari kita jalankan fungsi :
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>