1

私はパイプライン機能を持っています

row_t AS OBJECT(...);
table_t IS TABLE OF row_t
func_a RETURN table_t PIPELINED AS ...

そして、パラメータとして取る別の関数row_t:

func_b(row_in row_t)

ここで、プロシージャで、パイプライン関数から各行を渡したいと思いますfunc_b

FOR c IN (SELECT * FROM TABLE(func_a()))
LOOP
    -- The following code gives compilation error,
    -- How do I convert c to row_t type???
    some_var := func_b(c);
    ...
END LOOP;

なにか提案を?よろしくお願いします!

4

1 に答える 1

1
create or replace type row_t as object(a number, b number);

create or replace type table_t is table of row_t;

create or replace function func_a return table_t pipelined as
    v_row_t row_t := row_t(1, 2);
begin
    pipe row (v_row_t);
end;
/

create or replace function func_b(row_in row_t) return number as
begin
    return 3;
end;
/

declare
    v_row_t row_t;
    v_result number;
begin
    for c in
    (
        select * from table(func_a())
    ) loop
        v_result := func_b(row_t(c.a, c.b));
    end loop;
end;
/
于 2013-07-08T18:05:49.370 に答える