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

Oracle PL/SQL:関数カーソル

    それが可能か不可能かという問題ではなく、これが正しい方法であればそうすべきだったのです。もちろん、あなたがやっている方法でそれを行うことはできますが、専門家が示唆しているように、それは正しく効率的な方法ではありません.あなたがそれを行う方法を参照してください。 PS:テストされていません。

    CREATE OR REPLACE PACKAGE BODY TESTJNSABC IS
    
      -- FUNCTION IMPLEMENTATIONS
      FUNCTION get_num(num IN NUMBER) 
        RETURN SYS_REFCURSOR AS
        my_cursor SYS_REFCURSOR;
      BEGIN
        --
        OPEN my_cursor FOR 
        WITH ntable AS (
             SELECT 1 ID, 111 AGT, 'ABC' DESCRIP FROM DUAL
             UNION ALL
             SELECT 2 ID, 222 AGT, 'ABC' DESCRIP FROM DUAL
             UNION ALL
             SELECT 1 ID, 333 AGT, 'ABC' DESCRIP FROM DUAL
        )
        SELECT AGT FROM ntable WHERE ID = num;
        RETURN my_cursor;
    
      END;
    
      -- PROCEDURE IMPLEMENTATIONS 
      PROCEDURE testingabc AS
        --Creating a collection to hold return of the function
        type y is table of varchar2(1000) index by pls_integer; 
        var_z  y; 
        var_1 varchar2(100);
    
        BEGIN
    
         Select get_num(1)
         bulk collect into  var_z
         from dual;
    
        For i in 1..var_z.count
        loop
    
         WITH xtable AS (
             SELECT 111 AGT, 'A' DESCRIP FROM DUAL
             UNION ALL
             SELECT 222 AGT, 'B' DESCRIP FROM DUAL
             UNION ALL
             SELECT 333 AGT, 'C' DESCRIP FROM DUAL
         )
          SELECT DESCRIP
          into var_1 
          FROM xtable 
          WHERE AGT = var_z(i) ; ---Check each record
    
          dbms_output.put_line(var_1);
    
         end loop;
    
        END testingabc;
    
    END TESTJNSABC;
      

    1. PCがシャットダウンすると、パーソナルMySQLサーバーはシャットダウンしますか?

    2. この CASE 式はどのようにして ELSE 句に到達しますか?

    3. Python、Ruby、およびGolang:Webサービスアプリケーションの比較

    4. データベースからのURLとリンクテキスト