我有两个数据库,一个在测试环境中,是sqllite3,另一个是qa / prod的oracle db。这不是我的系统,我无法控制这个设置。我写了一个在我的测试环境中工作的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
答案 0 :(得分:2)
'agency'和'advertiser'在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%';
答案 1 :(得分:0)
删除表名周围的引号。