编译错误说"mm"和"cc"是无效的标识符!
with m as (
select instructor,
count(*) as c
from class
group by instructor),
mm as (
select max(m.c) as cc
from m)
select m.instructor
from m
where m.c = mm.cc;
Run Code Online (Sandbox Code Playgroud) 在Oracle查询中是否有任何方法可以在其外部的子查询中引用列,或者即使通过不同的方式实现该效果?到目前为止,我在网上看到的所有东西都没有帮助.
例如(这是我想要的事情):
SELECT a.product_code, b.received, b.issued
FROM productinfo a,
(SELECT SUM(qty_received) AS received, SUM(qty_issued) AS issued
FROM productdetail b WHERE b.product_code = a.product_code AND active = 1);
Run Code Online (Sandbox Code Playgroud)
我已经尝试了大量不同的变体/组合当我得到像ORA-00904这样的错误:与WHERE子句关系有关的无效标识符.
目前,如果我作为单独的查询运行,例如:
SELECT product_code FROM productinfo;
Run Code Online (Sandbox Code Playgroud)
然后为每个记录:
SELECT SUM(qty_received) AS received, SUM(qty_issued) AS issued FROM productdetail
WHERE product_code = '(specified)' AND active = 1;
Run Code Online (Sandbox Code Playgroud)
这可能需要半个多小时来运行8000个记录,这只是简单的愚蠢.
用完头发,任何帮助赞赏!! 谢谢.
我想能够像这样执行我的下面的过程:
exec procname('29-JAN-2011');
Run Code Online (Sandbox Code Playgroud)
proc代码是:
PROCEDURE procname(pardate VARCHAR2) IS
vardate DATE := to_date(pardate, 'DD-MON-YYYY');
SQLS VARCHAR2(4000);
BEGIN
SQLS := 'SELECT cola, colb
FROM tablea
WHERE TRUNC(coldate) = TRUNC(TO_DATE('''||pardate||''',''DD/MON/YYYY''))';
EXECUTE IMMEDIATE SQLS;
END;
Run Code Online (Sandbox Code Playgroud)
它不断抛出错误:
ORA-00904:"JAN":标识符无效.
它编译,但它在我运行此命令时抛出错误:
EXEC procname('29-JAN-2011');
Run Code Online (Sandbox Code Playgroud) SELECT instmax
FROM
(SELECT instmax ,rownum r
FROM
( SELECT instmax FROM pswlinstmax ORDER BY instmax DESC NULLS LAST
)
WHERE r = 2
);
Run Code Online (Sandbox Code Playgroud)
ORA-00904: "R": invalid identifier
00904. 00000 - "%s: invalid identifier"
*Cause:
*Action:
Error at Line: 39 Column: 8
Run Code Online (Sandbox Code Playgroud)
为什么它会给出这个错误?
当我清楚地识别出变量时,Oracle一直给我一个无效的标识符错误.
//get parameters from the request
String custID=request.getParameter("cust_ID");
String saleID=request.getParameter("sale_ID");
String firstName=request.getParameter("first_Name");
String mInitial=request.getParameter("mI");
String lastName=request.getParameter("last_Name");
String streetName=request.getParameter("street");
String city=request.getParameter("city");
String state=request.getParameter("state");
String zipCode=request.getParameter("zip_Code");
String DOB2=request.getParameter("DOB");
String agentID=request.getParameter("agent_ID");
String homePhone=request.getParameter("home_Phone");
String cellPhone=request.getParameter("cell_Phone");
String profession=request.getParameter("profession");
String employer=request.getParameter("employer");
String referrer=request.getParameter("referrer");
query =
"UPDATE customer"
+ " SET customer.cust_ID=custID, customer.sale_ID=saleID, customer.first_Name=firstName, customer.mI=mInitial, customer.last_Name=lastName, customer.street_Name=streetName, customer.city=city, customer.state=state, customer.zip_Code=zipCode,customer. DOB=DOB2, customer.agent_ID=agentID, customer.home_Phone=homePhone, customer.cell_Phone=cellPhone, customer.profession=profession, customer.employer=employer, customer.referrer=referrer"
+ " WHERE customer.cust_ID=custID " ;
preparedStatement = conn.prepareStatement(query);
preparedStatement.executeUpdate();
Run Code Online (Sandbox Code Playgroud)
SQL TABLE
CREATE TABLE customer
(cust_ID NUMBER NOT NULL, …Run Code Online (Sandbox Code Playgroud) 我正在使用merge命令将不存在的记录插入表中.当我使用简单的插入命令时,它工作正常.如果我使用合并系统总是警告ORA-00904:"T"."GROUP_COMPANY_ID"无效的标识符.一旦我将ON条件更改为(1 = 1)以强制为true,则merge命令正常工作.
原始合并声明出错了什么?我非常确定该表是在没有双引号的情况下创建的,所以这里没有案例问题.
create table test
(
create_date DATE not null,
group_company_id CHAR(16) not null
)
-- This is okay
INSERT INTO test (create_date, group_company_id) VALUES (TO_DATE('20100531', 'YYYYMMDD'), 'abc');
-- This one will raise ORA-00904 error
MERGE INTO test T
USING (SELECT 'abc' AS group_company_id FROM DUAL) C
ON (T.group_company_id = C.group_company_id)
-- ON (1 = 1)
WHEN NOT MATCHED THEN
INSERT (create_date, group_company_id)
VALUES (TO_DATE('20100531', 'YYYYMMDD'), 'abc')
WHEN MATCHED THEN
UPDATE SET group_company_id = 'abc';
Run Code Online (Sandbox Code Playgroud) 我创建了以下选择查询来显示基于 if then else 使用的数据 CASE-WHEN-THEN
select id,name,
case
when rating between 4.0 and 5 then "very good"
when rating between 3.0 and 3.5 the "good"
else "Good Resort"
end as comment
from resort
order by id;
Run Code Online (Sandbox Code Playgroud)
执行时它给出了这个
错误
ORA-00904 : "Good Resort": 无效标识符
为什么我在执行这个SQL时会得到无效的标识符?我完全难过了.这个简单的代码可能有什么问题.我得到的错误是
ORA-00904 ::无效的标识符
CREATE TABLE themepark
(
apples NUMBER(10) PRIMARY KEY,
bananas VARCHAR2(20), NOT NULL,
cherries VARCHAR2(10), NOT NULL,
eggs VARCHAR2(10) NOT NULL
);
Run Code Online (Sandbox Code Playgroud)
我正在使用Oracle DB来使用SQL Fiddle.
另一方面,下面的代码可行.
CREATE TABLE ticket
(
red1 VARCHAR2(15) PRIMARY KEY,
orange NUMBER(10) NOT NULL,
yellow NUMBER(4,2) NOT NULL,
green VARCHAR2(2) NOT NULL,
blue VARCHAR2(15) NOT NULL
);
Run Code Online (Sandbox Code Playgroud)
什么使得第一个代码(不起作用),与第二个代码有什么不同呢?