我有一个查询,它旨在向我显示表A中的任何行,这些行最近还没有更新.(每行应在"month_no"之后的2个月内更新.):
SELECT A.identifier
, A.name
, TO_NUMBER(DECODE( A.month_no
, 1, 200803
, 2, 200804
, 3, 200805
, 4, 200806
, 5, 200807
, 6, 200808
, 7, 200809
, 8, 200810
, 9, 200811
, 10, 200812
, 11, 200701
, 12, 200702
, NULL)) as MONTH_NO
, TO_NUMBER(TO_CHAR(B.last_update_date, 'YYYYMM')) as UPD_DATE
FROM table_a A
, table_b B
WHERE A.identifier = B.identifier
AND MONTH_NO > UPD_DATE
Run Code Online (Sandbox Code Playgroud)
WHERE子句中的最后一行导致"ORA-00904无效标识符"错误.不用说,我不想在WHERE子句中重复整个DECODE函数.有什么想法吗?(接受修复和变通方法......)
我尝试使用Oracle数据库编写以下内部联接查询:
SELECT Employee.EMPLID as EmpID,
Employee.FIRST_NAME AS Name,
Team.DEPARTMENT_CODE AS TeamID,
Team.Department_Name AS teamname
FROM PS_TBL_EMPLOYEE_DETAILS Employee
INNER JOIN PS_TBL_DEPARTMENT_DETAILS Team
ON Team.DEPARTMENT_CODE = Employee.DEPTID
Run Code Online (Sandbox Code Playgroud)
这给出了以下错误:
INNER JOIN PS_TBL_DEPARTMENT_DETAILS Team ON Team.DEPARTMENT_CODE = Employee.DEPTID
*
ERROR at line 4:
ORA-00904: "TEAM"."DEPARTMENT_CODE": invalid identifier
Run Code Online (Sandbox Code Playgroud)
一个表的DDL是:
CREATE TABLE "HRMS"."PS_TBL_DEPARTMENT_DETAILS"
(
"Company Code" VARCHAR2(255),
"Company Name" VARCHAR2(255),
"Sector_Code" VARCHAR2(255),
"Sector_Name" VARCHAR2(255),
"Business_Unit_Code" VARCHAR2(255),
"Business_Unit_Name" VARCHAR2(255),
"Department_Code" VARCHAR2(255),
"Department_Name" VARCHAR2(255),
"HR_ORG_ID" VARCHAR2(255),
"HR_ORG_Name" VARCHAR2(255),
"Cost_Center_Number" VARCHAR2(255),
" " VARCHAR2(255)
)
SEGMENT CREATION IMMEDIATE PCTFREE …Run Code Online (Sandbox Code Playgroud) 我在参数中有一个带有BOOLEAN的PL/SQL函数:
function get_something(name in varchar2, ignore_notfound in boolean);
Run Code Online (Sandbox Code Playgroud)
此功能是第三方工具的一部分,我无法改变这一点.
我想在SELECT语句中使用这个函数,如下所示:
select get_something('NAME', TRUE) from dual;
Run Code Online (Sandbox Code Playgroud)
这不起作用,我得到这个例外:
ORA-00904:"TRUE":标识符无效
据我了解,关键字TRUE无法识别.
我怎样才能做到这一点?
我在执行hibernate sql查询时看到一个错误.
java.sql.SQLException:ORA-00904:"table_name"."column_name":无效的标识符
当我在sqldeveloper中打开表时,列就存在了.
错误仅发生在PROD中,而不是发生在DEV中.
我该怎么检查?
我想在一个查询中获得一篇帖子以及与该帖子相关的第一条评论.这是我在PostgreSQL中的表现:
SELECT p.post_id,
(select * from
(select comment_body from comments where post_id = p.post_id
order by created_date asc) where rownum=1
) the_first_comment
FROM posts p
Run Code Online (Sandbox Code Playgroud)
它工作正常.
但是,在Oracle中我收到错误ORA-00904 p.post_id:无效的标识符.
对于一个子选择似乎工作正常,但由于我需要使用rownum(在Oracle中没有限制/偏移),我无法仅使用一个注释.
我在这做错了什么?
SELECT ename
, job
, CASE deptno
WHEN 10
THEN 'ACCOUNTS'
WHEN 20
THEN 'SALES'
ELSE 'UNKNOWN'
END AS department
FROM emp /* !!! */
WHERE department = 'SALES'
Run Code Online (Sandbox Code Playgroud)
这失败了:
ORA-00904:"%s:无效标识符"
有没有办法克服Oracle 10.2 SQL中的这种限制?如何在where子句中使用'case expression column'?
有一种方法可以在where子句中使用计算字段吗?
我想做点什么
SELECT a, b, a+b as TOTAL FROM (
select 7 as a, 8 as b FROM DUAL
UNION ALL
select 8 as a, 8 as b FROM DUAL
UNION ALL
select 0 as a, 0 as b FROM DUAL
)
WHERE TOTAL <> 0
;
Run Code Online (Sandbox Code Playgroud)
但我得到ORA-00904:"TOTAL":标识符无效.
所以我必须使用
SELECT a, b, a+b as TOTAL FROM (
select 7 as a, 8 as b FROM DUAL
UNION ALL
select 8 as a, 8 as b FROM DUAL
UNION ALL
select …Run Code Online (Sandbox Code Playgroud) 我有一张名为日历的表.
其中一个列名为'date'
当我想选择日期列时,它会给出错误ORA-01747,即无效的table.column.
select date from calendars
Run Code Online (Sandbox Code Playgroud)
我想这是因为'date'是pl/sql的保留字.问题是甚至无法更改列名:
alter table calendars rename column date to date_d
Run Code Online (Sandbox Code Playgroud)
结果是:ORA-00904错误:标识符无效.
你有什么建议?
谢谢.
我已经在我的虚拟XP中安装了Oracle 10g并使用创建了一个表
create table reg1 (
fname varchar2(30),
lname varchar2(30),
addr varchar2(30),
mail varchar2(30),
occu varchar2(30),
uname varchar2(30),
passwd varchar2(30)
);
Run Code Online (Sandbox Code Playgroud)
并且表创建成功.但是当我尝试通过简单查询来获取值时
select fname, lname
from reg1
where uname="bbb";
Run Code Online (Sandbox Code Playgroud)
我得到的错误就像
ORA-00904:"bbb":标识符无效
我无法理解我在这里做错了什么.
任何人都可以帮我弄清楚为什么我会收到错误cms.CRIME_ID:
不合法的识别符
select c.criminal_id, c.first, c.last, cms.CRIME_ID, cc.crime_code, cc.fine_amount
from criminals c join crimes cms on c.criminal_id = cms.criminal_id
join crime_charges cc using (crime_id)
order by c.first, c.last;
Run Code Online (Sandbox Code Playgroud)
我知道列存在的绝对事实,我可以引用该表中的每个其他列,除此之外.
该列唯一不同的是它是该表的主键.
编辑:这是完整的错误和表创建脚本.
Error starting at line 1 in command:
select c.criminal_id, c.first, c.last, cms.CRIME_ID, cc.crime_code, cc.fine_amount
from criminals c join crimes cms on c.criminal_id = cms.criminal_id
join crime_charges cc using (crime_id)
order by c.first, c.last
Error at Command Line:1 Column:39
Error report:
SQL Error: ORA-00904: "CMS"."CRIME_ID": invalid identifier
00904. …Run Code Online (Sandbox Code Playgroud)