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

10進数として格納されたIPアドレス-点線のクワッドとして表示するPL/SQL

    これはあなたが必要とする機能です:

    create or replace
    function inttoip(ip_address integer) return varchar2
    deterministic
    is
    begin
        return to_char(mod(trunc(ip_address/256/256/256),256))
               ||'.'||to_char(mod(trunc(ip_address/256/256),256))
               ||'.'||to_char(mod(trunc(ip_address/256),256))
               ||'.'||to_char(mod(ip_address,256));
    end;
    

    (関数を決定論的にし、to_charを使用することについてのコメント-ありがとう)

    Oracle 11Gでは、フォーマットされたIPアドレスをホストテーブルの仮想列にすることができます。

    alter table host
    add formatted_ip_address varchar2(15)
    generated always as
    ( to_char(mod(trunc(ip_address/256/256/256),256))
              ||'.'||to_char(mod(trunc(ip_address/256/256),256))
              ||'.'||to_char(mod(trunc(ip_address/256),256))
              ||'.'||to_char(mod(ip_address,256))
    ) virtual;
    

    この列は、必要に応じてクエリのインデックスを作成できます。

    クエリは次のようになります:

    select hostname, formatted_ip_address from host;
    


    1. 別のテーブルからの行の参照(PostgreSQL)

    2. 多対多のテーブルがピボットで結合します

    3. Oracleにスクリプトを介して挿入するより速い方法は?

    4. SQLAlchemyとAlembicを使用して、データベースにテーブル列が存在するかどうかを確認します