Pergunta

Eu estou tentando selecionar a partir da dba_tab_cols ver de dentro de um procedimento armazenado. Não está funcionando e eu não sei porquê.

Se eu executar o seguinte SQL como uma consulta:

SELECT t.data_type FROM dba_tab_cols t
WHERE 
    t.table_name = 'ACCOUNTTYPE' AND 
    t.column_name = 'ACCESSEDBY';

ele funciona bem. No entanto, se eu copiá-lo em um procedimento armazenado como assim:

SELECT t.data_type INTO dataType FROM dba_tab_cols t
WHERE
    t.table_name = 'ACCOUNTTYPE' AND 
    t.column_name = 'ACCESSEDBY';

Eu recebo a mensagem de erro "PL / SQL: ORA-00942: tabela ou exibição não existe" e as dba_tab_cols editor de destaques ao tentar compilar. O mesmo usuário db está sendo usado em ambos os casos.

dataType é declarado como: dataType VARCHAR2 (128);

PL / SQL (Oracle 9)

Alguém sabe o problema?

Foi útil?

Solução

É provavelmente um problema de privilégios. É a permissão de acesso dba_tab_columns através de um papel ou é uma concessão selecione direto para o seu usuário? Privilégios concedidos via Roles não estão disponíveis em SPROCS.

Uma rápida olhada no Google sugere o uso de all_tab_cols vez e ver se que a tabela tem as informações necessárias que você precisa.

Outras dicas

Para adicionar a resposta de Eoin:

Para a maioria das pessoas, ela vem como um surpreender que o usuário não pode selecionar a tabela de dentro de um procedimento se ele não foi concedido o select direita directamente (em oposição a através o papel)

Se usuário tenta tabela para compilar este procedimento, ele recebe um ORA-00942 embora esta tabela certamente existe e ele foi concedido o direito de escolher essa mesa. O problema é que procedimentos não respeitam papéis; só direitos directamente concedidos são respeitados. Então, isso significa que o proprietário da tabela tem de regrant o direito de escolha:

http://www.adp-gmbh.ch/ora/err /ora_00942.html

Eu não tenho Oracle instalado, mas talvez dataType é uma palavra reservada. Eu ia tentar outra coisa.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top