无法想出这个错误?

时间:2012-08-04 08:29:28

标签: sql oracle

代码:

SELECT * FROM Grade   
WHERE grade = ‘MG’ ‘1-9’  
SELECT * StaffNo, Name, DOB, ReportsTo,  
FROM Staff  
ORDER BY DOB DESC; 

我一直在

  

ORA-00911:无效字符

这是代码的问题吗?

2 个答案:

答案 0 :(得分:2)

一些问题 -

1.您需要在第一个和第二个UNION语句之间执行SELECT,在这种情况下,SELECT上的列(数据类型)应匹配。此外,其中一列应为DOB

SELECT StaffNo, Name, DOB, ReportsTo  --you can do * here if Grade has exactly 4 columns of same datatype as in columns in the select below
  FROM Grade   
WHERE grade IN ('MG', '1', '9') --Check for Missing grade or grade 1 or grade 9
UNION  
SELECT StaffNo, Name, DOB, ReportsTo
  FROM Staff  
ORDER BY DOB DESC;

或者这些是两个完全不同的查询,例如 -

SELECT * FROM Grade   
WHERE grade IN ('MG','1', '9');

SELECT StaffNo, Name, DOB, ReportsTo  --* means all columns so its either * or just the column name specifically. Both can be done, but doesn't make sense
FROM Staff  
ORDER BY DOB DESC;

2. 在Oracle中是一个错误的字符,它应该是'

3.在第二个SELECT中,ReportsTo列以,结尾。这将被Oracle视为非法。

答案 1 :(得分:1)

这是问题,原因可能有两个:

WHERE grade = ‘MG’ ‘1-9’  

您的实际是否在查询中包含了引号?如果是这样,那可能就是Oracle抱怨无效字符的原因。

然而,目前还不清楚你想要匹配的是什么。你想要任何以MG开头的东西,然后是1到9之间的字符吗?如果是这样,您可以使用:

WHERE grade BETWEEN 'MG1' AND 'MG9'

如果 不是你的意思,你需要更仔细地解释你想要做的事情 - 并理解如果 human 无法理解你的意图,SQL解析器更不可能......