Colega, imagino que vc tem um punhadinho de tabelas, meia dúzia talvez, que podem ser passadas, então antes de responder um aviso e uma recomendação : ****** não ****** use SQL dinâmico, a não ser que vc queira fazer a sua vida miserável... SQL dinâmico necessariamente faz um PARSE a cada execução, gasta mais CPU, não é passível de otimização/re-escrita pelo CBO, é ULTRA complicado para debugar (como creio que vc já está percebendo, ou vai perceber ao ver os exemplos que citarei), só se deve usar esse cara em situações RARAS e RESTRITAS, aonde realmente não dá pra fazer de outra maneira... 100%, no seu caso eu pensaria SERIAMENTE em escrever meia dúzia de rotinas fixas similares, OU ter uma aonde vc define meia dúzia de cursores FIXOS, não-dinâmicos, diferentes e abre um ou outro cfrme o argumento que for passado....
Isto posto, SE vc quiser mesmo se arriscar por esse terreno pantanoso do SQL dinâmico, seguinte : salvo algum trucão muito grande (tipo, uma rotina que dinamicamente faça um DDL criando outra, ou fazendo um CREATE TYPE, coisa doida assim) a resposta é não, o %ROWTYPE só funciona no DECLARE, ele é uma DECLARAÇÃO, então obviamente ** antes ** de executar o PL/SQL, em tempo de COMPILAÇÃO, o objeto que serve de base TEM QUE ser conhecido, NÃO TEM COMO ser dinâmico em princípio.... Assim, um SQL dinâmico que for trabalhar com quantidade variável de colunas TEM QUE usar as rotinas do DBMS_SQL : http://asktom.oracle.com/tkyte/Misc/csv.html é um exemplo : veja lá, ao invés de definir uma rowtype vc CRIA um array com as colunas, é isso.... Essa situação é uma aonde realmente o SQL dinãmico cabe : NÃO é parte do core da aplicação, vai rodar de vez em quando (então os eventuais probs de performance devem ser toleráveis) e não é possivle se definir quantas/quais tabelas e colunas podem ser passadas pra rotina, este é um caso 100% aceitável de SQL dinãmico. []s Chiappa --- Em oracle_br@yahoogrupos.com.br, francisco porfirio <francisco.porfi...@...> escreveu > > Pessoal estou construindo uma procedure que de acordo com a tabela passada > ele faz as devidas oprações, porém eu preciso utilizar o rowtype conforme > abaixo. > > O problema é que eu queria conseguir pegar esse rowtype de acordo com o > parametro(nome da tabela ) passado na minha procedure. > Algume pode da uma força ou sabe uma outra solução? > > CREATE OR REPLACE PROCEDURE varre_cursor ( > nome_tabela VARCHAR2, > qtd_linhas PLS_INTEGER > ) > IS > > retorna_cursor SYS_REFCURSOR; > registro nome_tabela%ROWTYPE; > > BEGIN > constroi_cursor(nome_tabela, qtd_linhas, retorna_cursor); > > FOR i IN 1 .. qtd_linhas > LOOP > FETCH retorna_cursor > INTO registro; > > dbms_output.put_line(registro.codigo); > END LOOP; > END varre_cursor; > > > > Atenciosamente > Francisco Porfirio Ribeiro Neto > > > [As partes desta mensagem que não continham texto foram removidas] >