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

PL / SQLでこのデータをソートするために使用するデータ構造は何ですか?

    PL / SQLをSQLとして使用し、他の言語とは異なり、非常に簡単です。それは非常に具体的であり、そのために非常に優れている場合もあります。

    PL / SQLが大嫌いなこともありますが、この場合は絶対に愛についてです。

    簡単さをご覧ください:

    create type it as object (
      iter          number,
      stringval     varchar2(100),
      intval        integer
    );
    
    create type t_it as table of it;
    
    declare
      t       t_it := new t_it();
      tmp1    varchar2(32767);
      tmp2    varchar2(32767);
    begin
      t.extend(4);
      t(1) := new it(1,'Oslo',40);
      t(2) := new it(2,'Berlin',74);
      t(3) := new it(3,'Rome',25);
      t(4) := new it(4,'Paris',10);
    
      select listagg(stringval,', ') within group (order by stringval),
             listagg(stringval,', ') within group (order by intval)
      into tmp1, tmp2
      from table(t);
    
      dbms_output.put_line(tmp1);
      dbms_output.put_line(tmp2);
    end;
    /
    
    drop type t_it;
    drop type it;
    

    ここでは、グローバルタイプを作成する必要があるという問題を確認できます。これは、私が嫌うものです。しかし、Oracle 12では、ローカルで定義された型で実行できると言われているので、私はそれを待っています:)

    出力は次のとおりです。

    Berlin, Oslo, Paris, Rome
    Paris, Rome, Oslo, Berlin
    

    編集

    最初から反復の量がわからない限り、唯一の方法は各反復で拡張を行うことです(これは拡張の例にすぎません):

    declare
      iterator       pls_integer := 1;
    begin
      /* some type of loop*/ loop
        t.extend();
    
        -- one way to assign
        t(t.last) := new it(1,'Oslo',40);
    
        -- another way is to use some integer iterator
        t(iterator) := new it(1,'Oslo',40);
    
        iterator := iterator + 1;
      end loop;
    end;
    

    2番目の方法の方が速いので、私は2番目の方法を好みます(.lastを計算しません) 各反復で)。



    1. .crtおよび.keyファイルから.jksを作成することは可能です

    2. 結合の最初のテーブルからすべての行を強制する

    3. DataSourceを使用したjetty-env.xmlにより、mvn jetty:runでWebAppContextが失敗します

    4. このMySQLエラーが発生しないようにするにはどうすればよいですか?列COLUMN NAMEの列指定子が正しくありませんか?