2012-02-23 4 views
3

Я пытаюсь использовать мою команду при запросе NESTED TABLE с использованием PL/SQL (о чем мне говорят несколько источников), но я продолжаю получать сообщение об ошибке: ORA-21700: объект не существует или помечены для удаления. ..Выполнение запроса вложенной таблицы

Я не понимаю, почему он не позволит мне сделать это ... Я уже установил, что переменная dados имеет содержание в нем ... выходной я его .count и это не пустой .. Может ли кто-то пролить свет на это?

Спасибо это заранее ...

procedure PREENCHE_CURSOR_ESTRANG_TOTAL(O_CURSOR out t_refcur) is  

    c_nips t_refcur; 

    dados T_PONTOS := T_PONTOS();--nested table instantiating.. 

    i number; 

    nip number(8); 

    gerador_de_nips varchar2(600) := 'a biG SQL QUERY nobody needs to know about =P'; 


begin 
    i := 1; 
    open c_nips for gerador_de_nips; 
    loop 
     dados.extend; 
     fetch c_nips into nip; 
     exit when c_nips%notfound; 
     dados(i) := RETORNA_PONTOS(nip); 
     i := i+1; 

    end loop; 


    close c_nips; 

    open O_CURSOR for select * from table(dados); /*WHY*/ 


end PREENCHE_CURSOR_ESTRANG_TOTAL; 
+0

Можете ли вы разместить определение 'T_PONTOS'? В частности, объявлен ли он в SQL или PL/SQL? Кроме того, 'RENTORNA_PONTOS', похоже, нигде не определяется. –

ответ

6

Я не понимаю конкретную ошибку вы получаете, но, как правило вам необходимо включить явное приведение соответствующего типа в операторе SQL:

open O_CURSOR for select * from table(CAST(dados AS t_pontos)); 

Это связано с тем, что оператор передается от PL/SQL к процессору SQL для обработки и не имеет информации о типе переменной, за исключением того, что она определяется пользователем.

Кроме того, это работает только в том случае, если тип (t_pontos) объявлен на уровне схемы, то есть с оператором CREATE TYPE. Если он объявлен где-то в PL/SQL-коде, например. в спецификации пакета механизм SQL не может получить доступ к определению типа.

1

Попробуйте определить свой курсор в начале процедуры и откройте его в теле вашей процедуры.

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