0

結果の行をループできるように、Oracle PL/SQL 内で ref カーソルを作成するコードがいくつかあります。テーブルには、パイプで区切られた大きなテキスト文字列列が 1 つあります。これをループして、x 位置の配列値を取得します。

(例: 行がすべて 'Mike|Male|100|Yes|UK' および 'Dave|Male|200|No|UK' のような場合、配列の位置を関数に渡して返すことができる式があります。結果の値の配列

配列位置 1 の呼び出しは 'Mike' と 'Dave' を返します 配列位置 2 の呼び出しは 'Male' と 'Male' を返します

配列位置の個別の値を返す関数を使用できるようにしたい場合、それにアプローチする最良の方法は何ですか

したがって、配列位置 1 の呼び出しは 2 を返し、配列位置 2 の呼び出しは 1 を返します

私はPL/SQLにまったく慣れていないので、ばかげた質問を許してください!

残念ながら、ソーステーブルを個々の列に分割することはできません:-(

どうもありがとう

マイク

@ zero323 への返信 (これを見逃してしまったことをお詫びします)

これまでのサンプルコードは...

FUNCTION DistinctInterfacelineValues(
    inArrayPos     NUMBER,
    inSessionIdMIN NUMBER,
    inSessionIdMAX NUMBER)
  RETURN NUMBER
AS
  int_cursor interfaceline_refcursor_type;
  runningTotal NUMBER:=0;
  tempValue    NUMBER:=0;
  int_record inttestintrecs%ROWTYPE;
  lineLength INTEGER:=1;
  distinctCount NUMBER:=0;

  TYPE table_type IS TABLE OF VARCHAR2(100) INDEX BY BINARY_INTEGER; 
  tempTable  table_type;
  tempTablePos INTEGER:=1;

BEGIN

 OPEN int_cursor FOR SELECT * FROM inttestintrecs WHERE (sessionid>=inSessionIdMIN AND sessionid <=inSessionIdMAX);
  LOOP
    FETCH int_cursor INTO int_record;
    EXIT
  WHEN int_cursor%NOTFOUND;
    lineLength := LENGTH(int_record.interfaceline) - LENGTH(REPLACE(int_record.interfaceline, '|', '')) + 1;
    FOR i                                         IN 1 .. lineLength
    LOOP
      IF i            =inArrayPos THEN
***VALUE HERE IS 'Mike' or 'Dave' DEPENDING ON LOOP POSITION***
***I WANT TO KNOW COUNT THE DISTINCT VALUES HERE***
      END IF;
    END LOOP;
  END LOOP;
  CLOSE int_cursor;
  RETURN runningTotal;



END DistinctInterfacelineValues;
4

1 に答える 1