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

Oracle11g-テーブル結合を使用して関数からレコードを返す方法

    MYTYPEに基づいて、さらに別のタイプが欠落している可能性があります 。

    次に例を示します(テーブルがないため、Scottのスキーマを使用しています)。 DEPTNOを追加しました MYTYPEに 結果(関数によって返される)をEMPと結合できるようにします テーブル。

    これはあなたが持っているものです:

    SQL> create or replace type mytype as object
      2    (deptno number,
      3     dname  varchar2(20),
      4     loc    varchar2(20));
      5  /
    
    Type created.
    

    これはあなたが欠けているものです:

    SQL> create or replace type mytab as table of mytype;
      2  /
    
    Type created.
    

    関数:9行目に注意:

    SQL> create or replace function myfunc (p_in number) return mytab is
      2    v_dname varchar2(20);
      3    v_loc   varchar2(20);
      4  begin
      5    select dname, loc
      6      into v_dname, v_loc
      7      from dept
      8      where deptno = p_in;
      9    return mytab(mytype(p_in, v_dname, v_loc));
     10  end myfunc;
     11  /
    
    Function created.
    

    テスト:

    SQL> select * from table(myfunc(10));
    
        DEPTNO DNAME                LOC
    ---------- -------------------- --------------------
            10 ACCOUNTING           NEW YORK
    
    SQL>
    SQL> select e.ename, e.sal, m.dname, m.loc
      2  from emp e join table(myfunc(e.deptno)) m on m.deptno = e.deptno
      3  where e.deptno = 10
      4  order by m.dname, e.ename;
    
    ENAME             SAL DNAME                LOC
    ---------- ---------- -------------------- --------------------
    CLARK            2450 ACCOUNTING           NEW YORK
    KING            10000 ACCOUNTING           NEW YORK
    MILLER           1300 ACCOUNTING           NEW YORK
    
    SQL>
    


    1. MySQL POW()関数–値を別の値の累乗に上げる

    2. mysql integerフィールドに格納されている場合、数値がゼロで始まることを許可します

    3. Dockerはpostgresqlが実行されるのを待ちます

    4. mysql-各IDの最新の入力