2014-12-05 5 views
1

Ниже код работает, когда SELECT работает только с таблицей CELLS. Однако, когда есть соединение из нескольких таблиц, ниже тип больше не подходит.Доступ к соединенным элементам

PROCEDURE drawComponent(title IN VARCHAR2, tbl IN VARCHAR2, link IN VARCHAR2) IS 

TYPE ref_typ IS REF CURSOR; 
var_ref ref_typ; 
rec CELLS%ROWTYPE; 

BEGIN 
    OPEN var_ref FOR 'SELECT CELLS.ID as CELLID, CELLS.NUM as CELLNUM, CELLS.' || link || ' as ID, ' || tbl || '.REMOVED as REMOVED FROM CELLS LEFT OUTER JOIN ' || tbl || ' ON CELLS.' || link || ' = ' || tbl || '.ID ORDER BY CELLS.NUM'; 

    loop 
     FETCH var_ref INTO rec; 
     EXIT WHEN var_ref%NOTFOUND; 
     htp.p(rec.CELLID); 
    end loop; 
END; 

Вопрос: какой тип я должен объявить rec?

+0

Может SYS_REFCURSOR? Извините, я немного устал, не хочу пытаться написать подробный пример :) – Dmitry

+0

Тогда у меня есть 'Неверная ссылка на переменную 'REC'', если я напишу' rec.CELLNUM' – Pablo

+0

Дмитрий, спасибо и хорошо отдохните :) – Pablo

ответ

1

Вы не можете получить тип записи слабого динамического курсора курсора.

Итак, ваш лучший выбор - это, вероятно, определение пользовательского RECORD в зависимости от типа различных столбцов, которые вам нужны. Что-то как что:

... 

TYPE rec_typ IS RECORD (
    CELLID CELLS.ID%TYPE, 
    CELLNUM CELLS.NUM%TYPE, 
    ID NUMBER,  -- or whatever type suits your needs 
    REMOVED NUMBER -- or whatever type suits your needs 
); 
rec rec_type; 

... 
Смежные вопросы