結果の行をループできるように、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;