代码:
SELECT * FROM Grade
WHERE grade = ‘MG’ ‘1-9’
SELECT * StaffNo, Name, DOB, ReportsTo,
FROM Staff
ORDER BY DOB DESC;
我一直在
ORA-00911:无效字符
这是代码的问题吗?
答案 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解析器更不可能......