オラクルは、JavaのJARパッケージをインポートして呼び出します

Oracleは、このデータ・フォーマットを見ている需要を満たし

121.41139320800005,31.29436885000007,121.41206283000008,31.29457611400005,121.41286000000002,31.293082750000053,121.411515441,31.292933945000073,121.41139320800005,31.29436885000007

现在需要把其转换为JSON格式:
[{ "LAT": "121.41139320800005"、 "LNG": "31.29436885000007"}、{ "LAT": "121.41206283000008"、 "LNG": "31.29457611400005"}、{ "LAT" "121.41286000000002"、 "LNG": "31.293082750000053"}、{ "LAT": "121.411515441"、 "LNG": "31.292933945000073"}、{ "LAT": "121.41139320800005"、 "LNG": "31.29436885000007"}]

そして、それぞれの経度の最大値と最小値を見つける必要があります。


あなたはそれが一般的なSQLやストアドプロシージャに応じて非常に面倒になります行う場合、あなたは、UDF形式の関数としてのハイブのように書く値を取得するための関数を書くことができれば、それはあると思います。

 

案の定、また、OracleのJavaカスタム関数で使用することができます。

 

最初のインポートでは、生データオブジェクトにして、アリのfastjsonを使用しますが、インターネットでは、OracleのJVMのバージョンの主な理由のいくつかは比較的低いです見つけるためにときにloadjavaを与えられて、今だけJDK1.4のバージョン、すべてをサポートJavaの文法や高いバージョンは、JDK高いのバージョンをコンパイルし、すべてが文句を言うでしょう。だから今、他のjarパッケージを使用しているのほとんどは、今以上の1.4バージョンで使用されている、それは一般的なエラーです。だから私は唯一のコンパイラを書くためにJDK1.4の構文ネイティブバージョンを使用することができます。

次のように書かれたJavaコード:

パッケージcom.eastcom.one.oracle。
 
輸入はjava.util.ArrayList;
輸入はjava.util.List; 
 
パブリック クラスTransformUtils { 
 
    民間 最終 静的な文字列LAT_LNG_JSON =「jsonの」;
    民間 最終 静的な文字列MAX_LAT =「max_lat」民間 最終 静的な文字列MIN_LAT =「min_lat」民間 最終 静的な文字列MAX_LNG =「max_lng」民間 最終 静的な文字列MIN_LNG =「min_lng」
 
    公共の 静的ストリングtoJSONString(列線){ 
 
        リストDATAS = 新しい ArrayListを(100 )。
 
        文字列[] ltems = line.split( "" )。
 
        以下のためにint型 i = 0; I <ltems.length; I ++ ){ 
 
            datas.add(Pair.of(ltems [I]、ltems [ ++ I]))。
 
        } 
 
        // 文字列jsonString = JSON.toJSONString(DATAS)。
 
        // するSystem.out.println(jsonString)。
 
        リターン ヌル
 
    } 
 
    パブリック 静的文字列toJSONString2(列線){ 
 
        リストDATAS = 新しい ArrayListを(100 )。
 
        文字列[] ltems = line.split( "" )。
 
        以下のためにint型 i = 0; I <ltems.length; I ++ ){ 
 
            datas.add(Pair.of(ltems [I]、ltems [ ++ I]))。
 
        } 
 
        文字列jsonString = makeString(DATAS)。
 
        ストリングMAXLAT = getMaxLat(DATAS)。
 
        getMinLat(DATAS)。
 
        getMinLng(DATAS)。
 
        getMaxLng(DATAS)。
 
        返すjsonStringを。
 
    } 
 
    パブリック 静的文字列getLatAndLngValue(文字列ライン、文字列値){ 
 
        リストDATAS = 新しい ArrayListを(100 )。
 
        文字列[] ltems = line.split( "" )。
 
        以下のためにint型 i = 0; I <ltems.length; I ++ ){ 
 
            datas.add(Pair.of(ltems [I]、ltems [ ++ I]))。
 
        } 
 
        であれば(LAT_LNG_JSON.equals(値)){ 
 
            戻りmakeString(DATAS)を、
        } 
 
        であれば(MAX_LAT.equals(値)){ 
 
            戻りgetMaxLat(DATAS)を、
        } 
 
        であれば(MIN_LAT.equals(値)){ 
 
            戻りgetMinLat(DATAS)を、
        } 
 
        であれば(MAX_LNG.equals(値)){ 
 
            戻りgetMaxLng(DATAS)を、
        } 
 
        場合(MIN_LNG.equals(値)){ 
 
            戻りgetMinLng(DATAS)を、
        } 
 
        戻り ヌル
 
    } 
 
    プライベート 静的文字列makeString(リストDATAS){ 
 
        StringBufferのSB = 新規のStringBuffer(); 
 
        sb.append( "[" )。
 
        ペアのペア =(ペア)datas.get(0 )。
 
        ストリングLAT = pair.getLat()。
        文字列LNG = pair.getLng()。
 
        ストリングlatString = "{\" LAT \ ":" + "\" "+ LAT + "\"、" 
        文字列のlngString = "\"のLNG \ ":"
 
        sb.append(latString).append(lngString)。
 
        以下のためにint型 i = 1; iは++; iはdatas.size()< ){ 
 
            ペア = (ペア)datas.get(i)を、
            LAT = pair.getLat()。
            LNG = pair.getLng()。
 
            latString = "{\ "LAT \":" + "\" "+ LAT + "\"、" 
            lngString = "\"のLNG \ ":" + "\" "+ LNG + "\"}" 
 
            文字列tempPair = latString + lngString。
 
            sb.append(tempPair)。
        } 
 
        sb.append( "
        System.out.println(sb.toString())。
 
        返すsb.toStringを(); 
 
    } 
 
    パブリック 静的文字列getMaxLat(リストDATAS){ 
 
        ペアペア =(ペア)datas.get(0 )。
 
        二重 MAXLAT = は、Double.valueOf(pair.getLat())のdoubleValue()。
 
        以下のためにint型 i = 1; iは++; iはdatas.size()< ){ 
 
            ペア = (ペア)datas.get(i)を、
 
            二重 latTemp = は、Double.valueOf(pair.getLat())のdoubleValue()。
 
            もし(latTemp> MAXLAT){ 
                MAXLAT = latTemp。
            } 
 
        }
 
         //System.out.println( "MAXLAT:" + String.valueOf(MAXLAT)); 
 
        返すString.valueOf(MAXLATを)。
 
    } 
 
    パブリック 静的文字列getMinLat(リストDATAS){ 
 
        ペアペア =(ペア)datas.get(0 )。
 
        二重 minLat = は、Double.valueOf(pair.getLat())のdoubleValue()。
 
        以下のためにint型 i = 1; iは++; iはdatas.size()< ){ 
 
            ペア = (ペア)datas.get(i)を、
 
            二重 latTemp = は、Double.valueOf(pair.getLat())のdoubleValue()。
 
            もし(latTemp < minLat){ 
                minLat = latTemp。
            } 
 
        } 
 
        // するSystem.out.println( "minLat:" + String.valueOf(minLat))。
 
        返すString.valueOf(minLatを)。
 
    } 
 
    パブリック 静的文字列getMaxLng(リストDATAS){ 
 
        ペアペア =(ペア)datas.get(0 )。
 
        二重 maxLng = は、Double.valueOf(pair.getLng())のdoubleValue()。
 
        以下のためにint型 i = 1; iは++; iはdatas.size()< ){ 
 
            ペア = (ペア)datas.get(i)を、
 
            二重 lngTemp = は、Double.valueOf(pair.getLng())のdoubleValue()。
 
            もし(lngTemp> maxLng){ 
                maxLng=  lngTemp。
            } 
 
        } 
 
        // するSystem.out.println( "maxLng:" + String.valueOf(maxLng))。
 
        返すString.valueOf(maxLngを)。
 
    } 
 
    パブリック 静的文字列getMinLng(リストDATAS){ 
 
        ペアペア =(ペア)datas.get(0 )。
 
        二重 minLng = は、Double.valueOf(pair.getLng())のdoubleValue()。
 
        以下のためにint型 i = 1; iは++; iはdatas.size()< ){ 
 
            ペア = (ペア)datas.get(i)を、
 
            二重 lngTemp = は、Double.valueOf(pair.getLng())のdoubleValue()。
 
            もし(lngTemp < minLng){
                minLng =lngTemp; 
            } 
 
        } 
 
        // するSystem.out.println( "minLng:" + String.valueOf(minLng))。
 
        返すString.valueOf(minLngを)。
 
    } 
 
    パブリック 静的 ボイドメイン(文字列[]引数){ 
 
        文字列の行 =「121.41139320800005,31.29436885000007,121.41206283000008,31.29457611400005,121.41286000000002,31.293082750000053,121.411515441,31.292933945000073,121.41139320800005,31.29436885000007」
 
        toJSONString(ライン)。
        toJSONString2(ライン)。
 
        System.out.println(getLatAndLngValue(ライン、 "max_lat" )); 
        System.out.println(getLatAndLngValue(ライン、 "min_lat" )); 
        のSystem.out.println(getLatAndLngValue(行、 "max_lng" )); 
        System.out.println(getLatAndLngValue(ライン、 "min_lng" )); 
 
    } 
 
}

 

主getLatAndLngValue(文字列ライン、文字列値)方法。他のメインパックの中の時間にコメントアウトすることができます。
JDK1.4コンパイラパッケージMavenを使ってアップロードした後、Oracleマシンにアクセスしてください。

コマンドを使用します。

loadjavaの-r -f -verbose -resolve -user DBUSERNAME / 'DBPASSWORD' 私-1-のOracle-0.0.1-SNAPSHOT-ジャーと、dependencies.jar

导入成功の之后の
作成:リソースMETA-INF / MANIFEST.MFの
ローディング:リソースMETA-INF / MANIFEST.MFの
作成:クラスCOM / eastcom / 1 /オラクル/ペア
ローディング:クラスCOM / eastcom / 1 /オラクル/ペア
作成:クラスCOM / eastcom / 1 /オラクル/ TransformUtilsの
読み込み:クラスCOM / eastcom / 1 /オラクル/ TransformUtils
作成:リソースMETA-INF / mavenの/私の-1-のOracle /私の-1-オラクル/ pom.properties
ロード:リソースメタINF / mavenの/私の-1-のOracle /私の-1-オラクル/ pom.properties
作成:リソースMETA-INF / mavenの/私の-1-のOracle /私の-1-オラクル/のpom.xml
ロード:リソースMETA-INF / Mavenの/私の-1-のOracle /私の-1-オラクル/のpom.xml
スキップ:リソースMETA-INF / MANIFEST.MFが
解決:クラスCOM / eastcom / 1 /オラクル/ペア
解決:クラスCOM / eastcom / 1 /オラクル/ TransformUtils
スキップ:リソースMETA-INF / mavenの/私の-1-のOracle /私の-1-オラクル/ pom.properties
リソースMETA-INF / mavenの/私の-1-オラクル:スキップ/my-one-oracle/pom.xml
ロードされたクラス:2つの
ロードされたリソース:3
ロード出典:0
公開されたインタフェース:0
生成されたクラス:0
クラススキップ:0
作成した同義語:0
エラー:0

パラメータは、PLSQLケースに導入することができた後
user_java_classesから*を選択します。

結果の表示:


あなたがオフにドロップする必要がある場合で注文することができます

dropjavaの-r -f -verbose -resolve -user DBUSERNAME / 'DBPASSWORD' 私-1-のOracle-0.0.1-SNAPSHOT-ジャーと、dependencies.jar

もう存在しないとき、User_java_classesは再び照会しません。
オラクルへのトピックへの復帰、ジャーパッケージした後、関数を作成した後。

作成または交換するなどの機能getLatAndLngValue(ins_1 VARCHAR2、ins_2 VARCHAR2)戻りVARCHAR2
LANGUAGE JAVA NAME 'COM / eastcom / 1 /オラクル/ TransformUtils.getLatAndLngValue(java.lang.Stringで、java.lang.Stringでは)java.lang.Stringで戻る]を;


あなたは機能をオフにドロップした場合は、使用することができます
ドロップ機能getLatAndLngValueを。


関数が作成された後は、カスタム関数を使用することができます

T ipmsdw.O_CO_BA_COMMUNITY_ZZ_DからgetLatAndLngValue(t.contourcoordinates、 'JSON')を選択

ipmsdw.O_CO_BA_COMMUNITY_ZZ_DからgetLatAndLngValue(t.contourcoordinates、 'max_lat')を選択し、T

ipmsdw.O_CO_BA_COMMUNITY_ZZ_DからgetLatAndLngValue(t.contourcoordinates、 'min_lat')を選択し、T

getLatAndLngValueを選択ipmsdw.O_CO_BA_COMMUNITY_ZZ_Dから(t.contourcoordinates、 'max_lng')はT

ipmsdw.O_CO_BA_COMMUNITY_ZZ_D TからgetLatAndLngValue(t.contourcoordinates、 'min_lng')を選択します

効果を達成するために。OK

----------------
免責事項:この記事はCSDNブロガー「liuxiangke0210の元記事である、CC 4.0 BY-SAの著作権契約、複製、元のソースのリンクと、この文を添付してくださいに従ってください。 。
オリジナルリンクします。https://blog.csdn.net/liuxiangke0210/article/details/78326901

おすすめ

転載: www.cnblogs.com/imok-blog/p/11586184.html