oracle db "неверное имя таблицы", но работает с sqllite - PullRequest
0 голосов
/ 09 февраля 2012

У меня есть две базы данных, одна находится в тестовой среде и является sqllite3, а другая - Oracle db для qa / prod. Это не моя система, и я не контролирую эту настройку. Я написал SQL-запрос, который работает в моей тестовой среде, но не с qa. Я предполагаю, что это как-то связано с расхождениями между oracle и sqllite3, но я не могу понять, что происходит. спасибо за помощь.

вот ошибка и SQL:

OCIError: ORA-00903: неверное имя таблицы:

SELECT 'agency' AS came_from,
account.name as account_name, agency.id as id,
agency.name as name,
agency.contact_name as contact_name, 
agency.contact_email as
contact_email, agency.phone_number as phone_number,
agency.account as account
FROM 'agency' LEFT OUTER JOIN account 
ON account.id ='agency'.account WHERE account in (1601)   
UNION SELECT 'advertiser' AS  came_from, 
account.name as account_name, advertiser.id as id,
advertiser.name as name, advertiser.contact_name as contact_name,
advertiser.contact_email as contact_email, 
advertiser.phone_number as phone_number,
advertiser.account as account 
FROM 'advertiser' 
LEFT OUTER JOIN account ON account.id = 'advertiser'.account 
WHERE account in (1601) AND (advertiser.workflow_state <> 'deleted'
OR advertiser.workflow_state
IS NULL)  ORDER BY name asc

Ответы [ 2 ]

2 голосов
/ 09 февраля 2012

«агентство» и «рекламодатель» не являются допустимыми именами таблиц в Oracle.

Чаще всего таблицы называются AGENCY и ADVERTISER, и тогда вы можете изменить свои предложения FROM наудалить одинарные кавычки.Потенциально, однако, вы создали таблицы с использованием чувствительных к регистру идентификаторов, и вам потребуется использовать двойные кавычки для ссылки на имя таблицы, т. Е.

SELECT *
  FROM "agency"

Еще менее вероятно, что вы создали таблицы с использованием чувствительных к регистру идентификаторови включил одинарные кавычки в имя таблицы, в этом случае вам понадобятся как двойные кавычки, так и одинарные кавычки, но это будет исключительно странно

SQL> create table "'agency'" (col1 number);

Table created.

SQL> select *
  2    from "'agency'";

no rows selected

Если вы не уверены, как называется таблицаВы можете запросить словарь данных

SELECT owner, table_name
  FROM all_tables
 WHERE lower(table_name) like '%agency%';
0 голосов
/ 09 февраля 2012

Удалить кавычки вокруг имен таблиц.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...