Eu tive umproblema com um programa de auditoria que gera dinamicamente um sentenca de INSERT obtendo as colunas da tabela atraves da view de dicionario USER_TAB_COLUMNS. SELECT COLUMN_NAME FROM USER_TAB_COLUMNS WHERE TABLE_NAME = 'NAME_OF_TABLE'; Gerando o DML:INSERT INTO NAME_OF_TABLE(COLUMN_01, COLUMN_02, ...COLUMN_08, COLUMN_09)...;Uma das tabelas tinha algumas colunas virtuais, causando o seguinte erro:ORA-54013: INSERT operation disallowed on virtual columnsPara identificar apenas as colunas que nao sao virtuais, usei a view de dicionario USER_TAB_COLS pois tem a coluna VIRTUAL_COLUMN que identifica se a coluna e virtual.E mudei meu programa para:SELECT COLUMN_NAME FROM USER_TAB_COLS WHERE TABLE_NAME = 'NAME_OF_TABLE' AND VIRTUAL_COLUMN = 'NO'; Isso e muito util!GRANT UPDATE (nome_da_coluna_1 ,nome_da_coluna_2, nome_da_coluna_3,...) ON nome_da_tabela TO [role|user]; DECLARE V_CAMPO VARCHAR2(100); V_VALOR VARCHAR2(100);BEGIN V_CAMPO := GET_BLOCK_PROPERTY('BLOCO3',FIRST_ITEM); LOOP V_VALOR := Name_In('BLOCO3.'||V_CAMPO); MESSAGE(V_CAMPO || ' > ' || V_VALOR); MESSAGE(V_CAMPO || ' > ' || V_VALOR); CLEAR_MESSAGE; V_CAMPO := GET_ITEM_PROPERTY('BLOCO3.'||V_CAMPO,NEXTITEM); EXIT WHEN V_CAMPO IS NULL; END LOOP;END; Poxa vida. Quantas vezes nao foi necessario criar uma tabela com um numero de linhas determinadas apenas para exibir um dado tabulado em um relatorio. Por mais que um OUTER JOIN ajude, ele nao cria registros em branco.Bom, numa situacao como esta, eu cheguei a usar uma view de dicionario grande o suficiente apenas para criar um resultado com o numero de linhas necessarias, por exemplo:Mas existe uma forma mais elegante de obter isso.UseSELECT LEVEL FROM dual CONNECT BY level <= 10;por exemplo:Voce pode usar a pseudo coluna "LEVEL" para obter o numero da linha. Dica para programador Oracle Forms. Quando precisar adicionar um registro ao "Elementos da Lista" de um campo do tipo "Item da Lista", use:Selecione o campo e va na propriedades "Elemenstos da lista"Clique no botao para visualizar os itens da lista (conforme exemplo abaixo)Use [Ctrl] + [Shift] + [>] para incluir o registroUse [Ctrl] + [Shift] + [<] para excluir o registro Recebi esta dica do meu colega de trabalho W. Zanuzo. Meu muito obrigado. Simples recurso que lhe permite capturar passo a passo os cliques com o mouse e a digitacao com o teclado. Salva tudo em um unico documento zip, incluindo as imagens.Execute "psr.exe" na caixa de pesquisa:Fonte: O gravador de passos para reproducao de problemas, do Windows 7 OlaVeja esta situacao: fui solicitado que levantasse todas as pessoas que tivessem permissao de DELETE em uma determinada tabela do nosso banco de dados Oracle.Bem, a tabela DBA_TAB_PRIVS contem os privilegios sobre os objetos do banco de dados.SQL> SELECT COMMENTS FROM DICTIONARY WHERE TABLE_NAME = 'DBA_TAB_PRIVS';COMMENTS--------------------------------------------------------------------------------All grants on objects in the databaseSQL> SELECT DISTINCT OBJECT_TYPE FROM DBA_TAB_PRIVS , DBA_OBJECTS WHERE DBA_TAB_PRIVS.TABLE_NAME = DBA_OBJECTS.OBJECT_NAME ORDER BY DBA_OBJECTS.OBJECT_TYPE;OBJECT_TYPE-------------------CONSUMER GROUPDIRECTORYEVALUATION CONTEXTFUNCTIONINDEXINDEXTYPEJAVA CLASSJAVA RESOURCEJOB CLASSLIBRARYOPERATORPACKAGEPACKAGE BODYPROCEDUREQUEUESEQUENCESYNONYMTABLETYPETYPE BODYVIEW21 rows selectedSQL> SELECT DISTINCT PRIVILEGE FROM DBA_TAB_PRIVS ORDER BY PRIVILEGE;PRIVILEGE----------------------------------------ALTERDEBUGDELETEDEQUEUEEXECUTEFLASHBACKINDEXINSERTON COMMIT REFRESHQUERY REWRITEREADREFERENCESSELECTUNDERUPDATEWRITE16 rows selectedEntao, um exemplo usando o esquema de teste HR, e este: verificar quem tem acesso a tabela EMPLOYEES:SQL> SELECT DBA_TAB_PRIVS.PRIVILEGE, DBA_TAB_PRIVS.GRANTEE ROLE_OR_USER, DBA_ROLE_PRIVS.GRANTEE USER_NAME FROM DBA_TAB_PRIVS, DBA_ROLE_PRIVS WHERE DBA_TAB_PRIVS.TABLE_NAME = 'EMPLOYEES' AND DBA_ROLE_PRIVS.GRANTED_ROLE(+) = DBA_TAB_PRIVS.GRANTEE ORDER BY DBA_TAB_PRIVS.PRIVILEGE, DBA_TAB_PRIVS.GRANTEEPRIVILEGE ROLE_OR_USER USER_NAME---------------------------------------- ------------------------------ ------------------------------REFERENCES OE SELECT OE O usuario "OE" (Order Entry, esquema para exemplo de Ordem de Entrada) pode fazer SELECT e