标签: ora-00904

在WHERE子句中使用别名

我有一个查询,它旨在向我显示表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函数.有什么想法吗?(接受修复和变通方法......)

sql oracle alias decode ora-00904

64
推荐指数
3
解决办法
11万
查看次数

ORA-00904:无效的标识符

我尝试使用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)

sql database oracle ora-00904

64
推荐指数
3
解决办法
52万
查看次数

如何在SELECT语句中使用BOOLEAN类型

我在参数中有一个带有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无法识别.

我怎样才能做到这一点?

sql oracle plsql oracle10g ora-00904

55
推荐指数
4
解决办法
23万
查看次数

为什么即使列存在,我也有ORA-00904?

我在执行hibernate sql查询时看到一个错误.

java.sql.SQLException:ORA-00904:"table_name"."column_name":无效的标识符

当我在sqldeveloper中打开表时,列就存在了.

错误仅发生在PROD中,而不是发生在DEV中.

我该怎么检查?

oracle oracle10g ora-00904

28
推荐指数
4
解决办法
14万
查看次数

Oracle子查询没有看到外部块2级别的变量

我想在一个查询中获得一篇帖子以及与该帖子相关的第一条评论.这是我在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中没有限制/偏移),我无法仅使用一个注释.

我在这做错了什么?

sql oracle ora-00904

26
推荐指数
1
解决办法
3万
查看次数

在where子句中使用'case expression column'

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'?

sql oracle oracle10g ora-00904

24
推荐指数
3
解决办法
5万
查看次数

有一种方法可以在where子句中使用计算字段吗?

有一种方法可以在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)

sql oracle plsql ora-00904

14
推荐指数
1
解决办法
2万
查看次数

"date"作为列名

我有一张名为日历的表.

其中一个列名为'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错误:标识符无效.

你有什么建议?

谢谢.

database oracle database-design ora-01747 ora-00904

12
推荐指数
2
解决办法
4万
查看次数

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":标识符无效

我无法理解我在这里做错了什么.

sql oracle ora-00904

7
推荐指数
2
解决办法
2万
查看次数

奇怪的Oracle SQL"无效标识符"错误

任何人都可以帮我弄清楚为什么我会收到错误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)

sql oracle ora-00904

6
推荐指数
1
解决办法
2万
查看次数

标签 统计

ora-00904 ×10

oracle ×10

sql ×8

oracle10g ×3

database ×2

plsql ×2

alias ×1

database-design ×1

decode ×1

ora-01747 ×1