#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
и т. Д. Поэтому перечитайте то, что я только что сказал, и попытайтесь найти виновника. Удачи!