oracle db“无效的表名”,但适用于sqlite

时间:2012-02-09 18:25:32

标签: oracle

我有两个数据库,一个在测试环境中,是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

2 个答案:

答案 0 :(得分:2)

'agency'和'advertiser'在Oracle中不是有效的表名。

最常见的是,表格会被命名为AGENCYADVERTISER,然后您可以更改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)

删除表名周围的引号。

相关问题