sql >> データベース >  >> RDS >> Oracle

オラクルの千のセパレータ関数?

    あなたの関数は無限ループに入り、それから出ることは決してありません。コンパイルされますが、実行時に問題が発生するため、関数が正常に機能するわけではありません。

    WHILE条件は常にTRUEであり、関数がIF条件に入ることはないため、カウンターがインクリメントすることはありません。

    counter :=2を設定しました 次に、IF条件 は:

    どうしてそれが真実なのだろうか? 2が2を超えることはありません したがって、カウンターがインクリメントされることはありませんIF-END IF内にあるため ブロック。

    関数を実行しても、無限ループから抜け出すことはありません。

    要件に合わせて

    オラクルがすでに千のセパレータを提供しているのに、なぜ車輪の再発明をしたいのですか。

    ドキュメントから

    • 要素: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.
    

    関数名をSQLServerの名前と同じにする場合 関数を作成し、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. 異なるタイムゾーンでのPHPサーバーとMySQLサーバーの処理

    2. 関連するtnsnameの場所を特定し、コンソールにエコーします

    3. Laravel:ビューでクエリをページングするMySQLエラー1140GROUP列の混合

    4. MYSQLDBにBLOBとして保存されている画像を取得します