2016-03-25 5 views
1

Я хотел бы просто SQL-интерфейс для Oracle R Enterprise.PL/SQL: тип несоответствия при выборе курсора из функции таблицы конвейера

Во-первых, я создаю глобальный тип объекта и тип таблицы из этого типа.

create or replace type sts_one_sample_t_test is object 
(
    "Variable Name" varchar2(4000), 
    "Average" number, 
    "T-Test" number, 
    "P-Value" number, 
    "Con.Level Lower Bound (95%)" number, 
    "Con.Level Upper Bound (95%)" number 
); 

create or replace type sts_one_sample_t_test_table is table of sts_one_sample_t_test; 

Во-вторых, я делаю конвейерную функцию, чтобы вернуть объект таблицы.

create or replace function f_sts_one_sample_t_test 
    (p_data in sys_refcursor, 
     target_number in number) 
    return sts_one_sample_t_test_table pipelined 
is 
    v_sts_one_sample_t_test sts_one_sample_t_test; 
    cursor v_cursor is 
     select * 
     from table (
      cast(
       rqTableEval(
         p_data, 
         cursor 
         (
         select target_number as "target_number", 
           1 as "ore.connect" 
         from dual 
        ), -- Param Cursor 
         'select str_col as "Variable Name", 
           num_col as "Average", 
           num_col as "T-Test", 
           num_col as "P-Value", 
           num_col as "Con.Level Lower Bound (95%)", 
           num_col as "Con.Level Upper Bound (95%)" 
         from RQSYS.RQ_TEMP 
         WHERE ROWNUM=1', -- Output Definition 
         'R_ONE_SAMPLE_T_TEST' -- R Script 
       ) as sts_one_sample_t_test_table 
      ) 
    ); 
begin 
    v_sts_one_sample_t_test:=sts_one_sample_t_test(null,null,null,null,null,null); 
    open v_cursor; 
    loop 
     fetch v_cursor into v_sts_one_sample_t_test;  --- [Error] PLS-00386 (49: 17): PLS-00386: type mismatch found at 'V_STS_ONE_SAMPLE_T_TEST' between FETCH cursor and INTO variables 
     exit when v_cursor%notfound; 
     pipe row(v_sts_one_sample_t_test); 
    end loop; 
    close v_cursor; 
    return; 
end f_sts_one_sample_t_test; 

Но ошибка возникают из компилятора:

[Ошибка] PLS-00386 (49: 17): PLS-00386: несоответствие типов найдена в 'V_STS_ONE_SAMPLE_T_TEST' между FETCH курсора и в переменных

Пожалуйста, помогите мне.

ответ

1

Я нашел решение.

Вместо того, чтобы использовать выборку в тип объекта, я вхожу в каждый элемент объекта явно.

fetch v_cursor into 
     v_sts_one_sample_t_test."Variable Name" , 
     v_sts_one_sample_t_test. "Average" , 
     v_sts_one_sample_t_test."T-Test" , 
     v_sts_one_sample_t_test."P-Value" , 
     v_sts_one_sample_t_test."Con.Level Lower Bound (95%)" , 
     v_sts_one_sample_t_test."Con.Level Upper Bound (95%)" ; 

Ошибка передается, но при запуске функция переходит в бесконечный цикл.