Quiero ejecutar una consulta que selecciona datos de un esquema diferente de la especificada en la base de datos de la conexión (el mismo servidor de Oracle, el mismo de la base de datos, esquema diferente)

Tengo una aplicación python hablando a un servidor de Oracle. Se abre una conexión a la base de datos (servidor/esquema), y ejecuta consultas de selección para las tablas dentro de la base de datos.

He intentado lo siguiente :

select .... 
from pct.pi_int, pct.pi_ma, pct.pi_es
where ...

Pero me sale:

ORA-00942: table or view does not exist

También he intentado que rodea el nombre de esquema con corchetes:

from [PCT].pi_int, [PCT].pi_ma, [PCAT].pi_es

Puedo obtener:

ORA-00903: invalid table name

Las consultas se ejecutan utilizando el cx_Oracle el módulo de python dentro de una aplicación de Django.

Se puede hacer esto o debo hacer una nueva conexión db?

Por curiosidad ¿de probar esta declaración en Sapo o SQL Developer antes de intentarlo en python?
En Oracle terminología, una base de datos es una colección de archivos de datos. Parece que quieres para seleccionar los datos de un esquema diferente en la misma base de datos que es lo que he editado tu pregunta para reflexionar. Lo Oracle llama un «esquema» es similar a lo que muchos otros RDBMS productos se refieren como una «base de datos». Si usted realmente quiere decir que hay dos bases de datos en el servidor y desea conectarse a Una base de datos y consulta de tablas en la base de datos B, que es posible, pero entonces usted necesita para añadir un enlace de base de datos a la solución.
Eso es correcto, me refiero a dos esquemas.
He probado esta y otras consultas utilizando el interprete de python, y todas las otras consultas de trabajo.
[ y ] son caracteres no válidos para (ANSI) de SQL identificadores.

OriginalEl autor marianov | 2012-12-04

3 Comentarios

  1. 21

    ¿El usuario que utiliza para conectarse a la base de datos (usuario A en este ejemplo) tienen SELECT de acceso a los objetos en el PCT esquema? Suponiendo que A no tienen este acceso, se llega a la «tabla o vista no existe error».

    Más probable es que usted necesita su DBA para conceder a los usuarios A el acceso a todas las tablas en la PCT esquema que usted necesita. Algo así como

    GRANT SELECT ON pct.pi_int
       TO a;

    Una vez hecho esto, usted debe ser capaz de referirse a los objetos en el PCT esquema utilizando la sintaxis pct.pi_int como se demostró inicialmente en su pregunta. La sintaxis de corchetes enfoque no funcionará.

    Sería genial tener la instrucción select que muestra lo que otorga PCT ha dado.

    OriginalEl autor Justin Cave

  2. 5

    Además de las becas, usted puede intentar la creación de sinónimos. Se evitará la necesidad de precisar el propietario de la tabla de esquemas cada vez.

    De la conexión esquema:

    CREATE SYNONYM pi_int FOR pct.pi_int;

    A continuación, puede consultar pi_int como:

    SELECT * FROM pi_int;

    OriginalEl autor Sanjaya Balasuriya

  3. 0

    Dependiendo del esquema de la cuenta que está utilizando para conectarse a la base de datos, creo que te falta una subvención a la cuenta que está utilizando para conectarse a la base de datos.

    Conectar como PCT cuenta en la base de datos, a continuación, conceder la cuenta que está utilizando, seleccione el acceso de la tabla.

    grant select on pi_int to Account_used_to_connect

    OriginalEl autor Michael Ballent

Dejar respuesta

Please enter your comment!
Please enter your name here