Pregunta

Estoy intentando SELECCIONAR desde la vista dba_tab_cols desde un procedimiento almacenado. No funciona y no sé por qué.

Si ejecuto el siguiente SQL como una consulta:

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

funciona bien. Sin embargo, si lo copio en un procedimiento almacenado así:

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

Recibo el mensaje de error "PL / SQL: ORA-00942: la tabla o vista no existe" y el editor resalta dba_tab_cols al intentar compilar. Se está utilizando el mismo usuario de db en ambos casos.

dataType se declara como:     dataType varchar2 (128);

PL / SQL (Oracle 9)

¿Alguien sabe el problema?

¿Fue útil?

Solución

Es muy probable que sea un problema de privilegios. ¿El permiso para acceder a dba_tab_columns a través de un rol o es una concesión de selección directa para su usuario? Los privilegios otorgados a través de Roles no están disponibles en SPROCS.

Una mirada rápida en Google sugiere usar all_tab_cols en su lugar y ver si esa tabla tiene la información requerida que necesita.

Otros consejos

Para agregar a la respuesta de Eoin:

  

Para la mayoría de las personas, se trata de un   sorpresa que el usuario no pueda seleccionar   la tabla desde dentro de un procedimiento si   no se le ha concedido el selecto   directamente directamente (a diferencia de a través de   el rol)

     

Si el usuario de la tabla intenta compilar esto   procedimiento, obtiene un ORA-00942   aunque esta tabla ciertamente existe   y se le concedió el derecho de seleccionar   Esta mesa. El problema es ese   los procedimientos no respetan roles; solamente   Se respetan los derechos otorgados directamente.   Entonces, eso significa que el propietario de la mesa tiene que   vuelva a conceder el derecho a seleccionar:

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

No tengo instalado Oracle, pero quizás dataType es una palabra reservada. Intentaría otra cosa.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top