Ошибка с SQL и Python — таблица или представление не существует

#python #sql #database #left-join #oracle-sqldeveloper

#python #sql #База данных #левое соединение #oracle-sqldeveloper

Вопрос:

Я не могу запустить сценарий, если я добавлю left JOIN t2 ON Col10 = Col1 в качестве команды в sql-запрос на Python. Без этого я могу запустить скрипт без проблем.

ошибка, которую я получаю: ошибка SQL: таблица или представление ORA-00942 не существует

PS- Сценарий полного сценария отлично работает в SQL developer.

Любой совет, почему?

 import cx_Oracle
import pandas as pd

conn = cx_Oracle.connect('......')

cur = conn.cursor()

sql = "SELECT 
    Col1, 
    Col2 
    FROM t1 
    left JOIN t2 ON Col10 = Col1"

cur.execute(sql)

sql_data = pd.DataFrame(cur.fetchall())
col_names = [row[0] for row in cur.description]
sql_data.columns = col_names
sql_data
  

Комментарии:

1. Вы не выбираете Col10.

2. может быть, таблица t2 находится в другой схеме?

Ответ №1:

PS — Полный скрипт отлично работает в SQL developer.

Если это так, это означает, что пользователь, к которому вы подключены в SQL Developer, имеет доступ как t1 к таблицам, так и t2 к таблицам.


Если Oracle жалуется, что

ORA-00942 таблица или представление не существует

когда вы выполняете ту же SELECT инструкцию из Python, это означает, что пользователь, к которому вы подключены сейчас

 conn = cx_Oracle.connect('......')
  

не имеет права доступа к t2 таблице. Это может быть связано с

  • вы неправильно написали его имя
  • кто-то удалил таблицу, поэтому она больше не существует в этой схеме
  • он принадлежит кому-то другому, но вы обращаетесь к нему, поскольку владелец предоставил вам права на это (и эти права теперь отозваны)
  • вы используете его как общедоступный синоним, который был удален

или по какой-либо другой причине. Сложно отлаживать «общий» код, который вы опубликовали, поскольку, очевидно, таблицы на самом деле не являются t1 nor t2 , а столбцы col1 — nor col2 и т. Д. Поэтому перечитайте то, что я только что сказал, и попытайтесь найти виновника. Удачи!