컬럼이 있는데 ORA-00904가 있는 이유는 무엇입니까?
휴지 상태 sql 쿼리 실행 중 오류가 발생하였습니다.
java.sql.SQLException: ORA-00904: "table_name".column_name": 잘못된 식별자
sqdeveloper에 있는 테이블을 열면 기둥들이 있습니다.
에러는 PROD에서만 발생하고 DEV에서는 발생하지 않습니다.
무엇을 확인해야 합니까?
ORA-00904-invalid identifier오류는 대소문자를 구분하는 문제로 인해 자주 발생합니다.일반적으로 Oracle 테이블과 열은 대소문자를 구분하지 않으며 구두점 및 공백을 포함할 수 없습니다.그러나 큰따옴표를 사용하여 따옴표로 묶인 식별자를 작성하는 경우 해당 식별자는 항상 큰따옴표로 참조하고 올바른 대소문자를 사용해야 합니다.예를 들어 다음과 같습니다.
create table bad_design("goodLuckSelectingThisColumn " number);
이 Oracle을 던지다ORA-00904실행 중인 사용자에게 쿼리와 관련된 개체에 대한 적절한 권한이 없는 경우.
같은 영속 데이터베이스 테이블을 사용하여 실수로2개의 엔티티를 정의했을 때 이 문제가 발생하였습니다.한 표에서는 문제의 열이 존재했고 다른 표에서는 존재하지 않았습니다.잘못된 기본 데이터베이스 테이블을 참조하는 유형의 개체를 유지하려고 할 때 이 오류가 발생했습니다.
"columnName"과 같이 DUBLE 따옴표 사이에 열 이름을 적습니다.
에러 메세지에 기재한 문자 대소문자가 다른 경우는, SQL 클라이언트가 자동 대소문자 변환을 실행했을 가능성이 높습니다.이중 따옴표를 사용하여 이 값을 건너뜁니다(이것은 Coogwegrell Client 3.0에서 작동합니다.
이는 DB 중 하나가 "로 생성되었기 때문에 이름은 대소문자를 구분합니다.
Oracle 테이블 열 이름: GoodRec 하이브가 대소문자를 인식할 수 없습니다: ERROR roughed was - Caused by: java.sql.SQL SyntaxErrorException: ORA-00904: "GOODREC": 잘못된 식별자입니다.
해결 방법 : Oracle 열 이름을 모두 대문자로 변경합니다.
java 클래스의 컬럼 주석 위치를 체크합니다.예를 들어, 3열(이름, Roll_No, Marks)로 된 이름의 테이블을 검토합니다.
그런 다음 Setter 메서드 대신 Getter 메서드 앞에 열의 주석 아래에 추가해야 합니다.문제를 @Column(이름 = "이름", 길이 = 100)으로 해결합니다.
**@Column(name = "NAME", length = 100)
public String getName() {**
return name;
}
public void setName(String name) {
this.name= name;
}
Prod와 Dev의 표 정의를 비교했습니까?
SQL Developer에서 실행할 때 Prod(애플리케이션과 동일한 데이터베이스)에서 동일한 사용자와 쿼리를 실행하고 있습니까?
(alter 명령어를 사용하여) 추가할 열이 몇 개 있고 이러한 변경이 아직 prod로 승격되지 않은 경우 이 문제가 발생할 수 있습니다.
테이블의 정의와 실제 쿼리를 게시할 수 있습니까?
Oracle이 이 오류를 발생시키는 경우가 많은 것 같습니다.
저한테는 던져진 거예요. 왜냐하면 제가 이 칼럼에 사용된 칼럼의 자격을 따려고 했기 때문이죠.using절을 참조해 주세요. 중 어느하지 않습니다.
select table1.x -- doesn't work
from table1
join table2 using (x);
select t1.x -- doesn't work
from table1 t1
join table2 t2 using(x);
이유는 '열'을 '열'로 한정할 수 using을 사용법올바른 방법은 다음과 같습니다.
select x
from table1
join table2 using (x);
select x
from table1 t1
join table2 t2 using(x);
이 에러는, 상기와는 조금 다른 이유로 발생하고 있습니다.
기존 (오라클) 테이블을 수정하기 위해 액상화 스크립트를 사용했습니다.모든 것이 괜찮아 보였지만 코드 삽입이 실패하고 있었다.SQL Developer의 자동 완성에서 인용문을 동봉하는 것을 보고 나서야 작성 시 열 이름에 공백이 추가된 것을 알 수 있었습니다.
문제가 되는 리퀴베이스 changeSet 행은 다음과 같습니다('MY_FIELD' 마감 따옴표 앞에 공백이 하나 있음).
<addColumn tableName="MY_TABLE">
<column name="MY_FIELD " type="tinyint" defaultValueNumeric="3">
<constraints nullable="false"/>
</column>
</addColumn>
저는 Oracle용 Toad를 사용하고 있으며, 사용자가 로그인한 테이블이 아닌 다른 사용자 이름이 테이블을 소유하고 있고 사용자가 테이블을 읽을 수 있는 액세스 권한이 있는 경우에도 원래 테이블 소유자를 테이블 이름에 추가해야 할 수 있습니다.
예를 들어 테이블 소유자의 이름이 'OWNER1'이고 사용자가 'USER1'로 로그인했다고 가정합니다.이 쿼리에서 ORA-00904 오류가 발생할 수 있습니다.
select * from table_name where x='test';
table_name 앞에 테이블 소유자를 붙이면 오류가 제거되고 다음과 같은 결과가 나타납니다.
select * from
엔티티에 정의된 열 이름과 테이블의 열 이름(SQL DB)이 일치하지 않기 때문입니다.
java.sql.SQLException: ORA-00904: "table_name"."column_name": 잘못된 식별자입니다(예: sql).SQLException: ORA-00904: "학생"이름": 잘못된 식별자
엔티티 파일) Student.java(Java)와 같은 경우가 있습니다.
'NAME'이라는 곡입니다.
은 "라고.
Oracle에서 동의어 선언을 확인합니다.아래와 같이 PL/SQL 함수를 호출했더니 java.sql이 나왔습니다.SQL SyntaxErrorException: ORA-00904: 비활성 식별자
select oracle_my_pkg.notify_list_function from dual
oracle_my_pkg의 공용 동의어를 선언한 후 오류 메시지가 사라졌습니다.
새 테이블을 만듭니다.단, (큰따옴표로 묶은) 유일한 해결책으로 보이는 값을 제시하지 마십시오.
create table bad_design(goodLuckSelectingThisColumn number);
을 주입한.
create table bad_design("goodLuckSelectingThisColumn " number);
데이터베이스 로그인에 사용되는 사용자 이름 credential을 확인합니다.(explance.xml ? ?).대부분의 문제는 데이터베이스 로그인에 사용되는 사용자 이름\password가 오브젝트(이 경우 table_name)에 대한 가시성이 없다는 것입니다.(데이터 소스에서 사용 가능한 것과 동일한 사용자 이름\비밀번호를 사용하여 sql 개발자에 로그인해 보십시오.
언급URL : https://stackoverflow.com/questions/5722851/why-do-i-have-ora-00904-even-when-the-column-is-present
'codememo' 카테고리의 다른 글
| 스프링 Application Context를 닫는 방법 (0) | 2023.03.04 |
|---|---|
| Angular.js와 부트스트랩 폼 검증 스타일 조정 (0) | 2023.03.04 |
| Flask jsonify가 데이터를 정렬하지 못하도록 합니다. (0) | 2023.03.04 |
| Angular에서 $resource 메서드에 대한 콜백을 추가하는 방법JS (0) | 2023.03.04 |
| Angular 테스트 방법모카를 이용한 JS코드? (0) | 2023.03.04 |