ORA-01747: user.table.column, table.column 또는 column 규격이 잘못되었습니다.
루프에서 즉시 실행을 호출하면 위 오류가 발생합니다.
Update CustomersPriceGroups set 1AO00=:disc Where cuno=:cuno
Parameters: disc=66 cuno=000974
Update CustomersPriceGroups set 1AP00=:disc Where cuno=:cuno
Parameters: disc=70.5 cuno=000974
Update CustomersPriceGroups set 1AQ00=:disc Where cuno=:cuno
Parameters: disc=66 cuno=000974
Update CustomersPriceGroups set 1ZA00=:disc Where cuno=:cuno
Parameters: disc=60 cuno=000974
이것은 무엇을 의미합니까?
여기 코드 조각이 있습니다.
c:=PriceWorx.frcPriceListCustomers('020','221');
LOOP
fetch c into comno,cuno,nama,cpls;
exit when c%notfound;
dbms_output.put_Line(cuno);
g:=priceWorx.frcPriceListItemGroups('020','221');
d:=priceworx.frcCustomerDiscounts('020','221',cuno);
loop
fetch g into comno,cpgs,n;
fetch d into comno,cpls,cuno,cpgs,stdt,tdat,qanp,disc,src;
--dbms_output.put(chr(9)||cpgs);
sQ:='Update saap.CustomersPriceGroups set "'|| trim(cpgs)||'"=:disc '
|| ' Where cuno=:cuno';
execute immediate sQ using disc,cuno;
commit;
dbms_output.put_line( sQ );
dbms_output.put_line( chr(9)||'Parameters: disc='|| disc||' cuno='||cuno);
exit when g%notfound;
end loop;
close g;
close d;
end loop;
쿼리에서 이중 쉼표를 확인합니다.
insert into TABLE_NAME (COLUMN1, COLUMN2,,COLUMN3) values(1,2,3);
(COLUMN2 뒤에 쉼표가 추가됨).
업데이트: 최근 (일부 사람들은 특별한 재능을 가지고 있습니다) 새로운 접근 방식으로 동일한 예외를 얻는 데 성공했습니다.
update TABLE_NAME set COLUMN1=7, set COLUMN2=8
(두 번째 SET는 중복됨)
따옴표로 묶지 않은 식별자는 영문자로 시작해야 합니다(여기 규칙 6 참조).이름이 숫자로 시작하는 열에 값을 할당하려고 합니다.1AO00
,1AP00
테정확않음지인하의를의 표 를 보지 ,CustomersPriceGroups
우리는 그것이 그 이름들을 가진 열을 가지고 있는지 모릅니다.그런 경우 따옴표로 묶은 식별자로 생성되어야 합니다.그렇다면 인용문을 사용하여 (모든 곳에서) 그들을 참조해야 합니다. 이는 이상적이지 않습니다. 코드를 읽기가 좀 더 어렵고, 이와 같은 실수를 하기 쉬우며, 무엇이 잘못된 것인지 찾기 어려울 수 있습니다.심지어 Oracle은 다음과 같이 말합니다.
참고: Oracle은 데이터베이스 개체 이름에 따옴표로 묶은 식별자를 사용하지 않는 것이 좋습니다.인용된 이러한 식별자는 SQL*Plus에서 허용되지만 데이터베이스 개체를 관리하는 다른 도구를 사용하는 경우에는 유효하지 않을 수 있습니다.
코드에서 할당할 때 따옴표를 사용하는 것으로 보입니다.sQ
하지만 당신이 보여주는 출력은 그렇지 않습니다; 하지만 그것은 그것을 가지고 있지 않습니다.saap.
스키마 식별자도 마찬가지입니다.생각하는 않기 도 있지만, 만약 당신이 그것을은 단지 . - ▁of▁▁earlier▁the▁that▁you▁instead▁showing▁you있수'습다니을re,었이▁code▁of되▁data손▁not실▁may▁you▁just▁version▁have는'▁been▁because▁lost▁think▁if▁you가 이전 출력은 표시되지 않습니다.c.cuno
이름의 그러나 열 이름의 대소문자가 잘못되었을 수도 있습니다.
에 약에만.execute
오류를 던지고 있습니다. 디버그가 다음에 오기 때문에 루프 주위에서 명령이 실행되는 것을 볼 수 없습니다. 중단되는 값이 아니라 성공한 값을 볼 수 있습니다.기능에 의해 반환되는 모든 값을 점검해야 합니다. 아마도g
는 " 값반환하중입니다는의을"에 대한 값을 하는 중입니다.cpgs
유효한 열 이름이 아닙니다.
@nineside가 말했듯이, 더 많은 정보, 특히 전체 예외 메시지를 보여주면 무엇이 잘못되었는지 식별하는 데 도움이 될 것입니다.
즉, Oracle 파서는 열 중 하나가 유효하지 않다고 생각합니다.이는 열을 잘못 참조했거나 열 이름이 예약된 단어이거나 구문 오류 때문일 수 있습니다.UPDATE
Oracle이 열이 아닌 것을 열이라고 생각하도록 하는 문장입니다.실행 중인 전체 진술, 정의를 보는 것은 정말 도움이 될 것입니다.CustomersPriceGroups
테이블과 제기되는 예외의 전체 텍스트. 종종 어떤 열에 결함이 있는지 알 수 있습니다.
구문 오류 대신 set 문 끝에 추가 ""를 추가하면 ORA-01747이 나오는데, 이는 Oracle에서 매우 특이합니다.
update table1
set col1 = 'Y', --this odd 1
where col2 = 123
and col3 = 456
SQL 문에서 oracle 키워드를 사용했습니다.
여기에 있는 다른 답변에 인용된 이유 외에도 테이블 열 이름에 오라클 데이터베이스에서 특수/예약된 단어로 간주되는 이름이 없는지 확인해야 할 수도 있습니다.
제 경우에는 테이블 열 이름이 uid였습니다.uid는 오라클에서 예약된 단어이기 때문에 이 오류가 발생했습니다.
다행히도, 제 테이블은 새 테이블이었고 데이터가 없었습니다.oracle DROP table 명령을 사용하여 테이블을 삭제하고 문제 열에 대해 수정된 이름으로 새 테이블을 생성할 수 있었습니다.
오라클이 허락하지 않아 문제란 이름을 바꾸는 데 어려움을 겪었고 계속 오류를 던졌습니다.
저는 질문을 이렇게 쓰고 있었습니다.제거해야 했습니다.[
그리고.]
UPDATE SN.TableName
SET [EXPIRY_DATE] = systimestamp + INTERVAL '12' HOUR,
WHERE [USER_ID] ='12345'
최근 SQL Server에서 Oracle로 전환했습니다.
저에게 이 문제는 Oracle에서 예약된 단어인 열 이름 "CLUSTER"에 사용된 것입니다.저는 칼럼에 삽입하려고 했습니다.열 이름을 변경하여 문제가 해결되었습니다.
insert into table (JOB_NAME, VERSION, CLUSTER, REPO, CREATE_TS) VALUES ('abc', 169, 'abc.war', '1.3', 'test.com', 'test', '26-Aug-19 04.27.09.000000949 PM')
Error at Command Line : 1 Column : 83
Error report -
SQL Error: ORA-01747: invalid user.table.column, table.column, or column specification
또한 다음과 같이 select와는 다른 열 집합을 기준으로 그룹화할 때도 원인이 될 수 있습니다.
select tab.a, tab.b, count(*)
from ...
where...
group by tab.a, tab.c;
ORA-01747: user.table.column, table.column 또는 column 규격이 잘못되었습니다.
두 열 ID를 비교할 때 열 관계를 놓쳤을 때 데이터베이스에서 두 열 ID를 모두 동일하게 확인하지 않을 때 얻을 수 있습니다. 여기 제가 직면한 샘플 예가 있습니다.
UPDATE TABLE_NAME SET APPROVED_BY='1000',CHECK_CONDITION=ID, WHERE CONSUMER_ID='200'
여기서 발행되는 문제는 'CHECK_CONDATION' 및 '일 때 표시됩니다.ID' 두 열 ID가 모두 동일하지 않습니다. 이번에는 두 ID가 모두 동일하면 쿼리가 정상적으로 실행됩니다. 코드에서 비교하는 ID ID 두 열을 모두 확인하십시오.
저 같은 경우에는 좀 먹었어요.셈하여같은 백작 (박사)*)
언급URL : https://stackoverflow.com/questions/9459204/ora-01747-invalid-user-table-column-table-column-or-column-specification
'programing' 카테고리의 다른 글
Excel 스프레드시트에서 마지막 행 찾기 (0) | 2023.06.29 |
---|---|
Spring boot app 오류 로그에 oracle.ons에서 FanManager에서 ONS 구성 시도가 실패했다고 표시됩니다.사용 가능한 서버 없음 (0) | 2023.06.29 |
ASP.Net Core 2.1의 ID< - 계정 컨트롤러 사용자 지정 (0) | 2023.06.29 |
"상태 아님" 조건을 기준으로 데이터 프레임에서 행 삭제 (0) | 2023.06.29 |
오라클 시스템이 유니코드 또는 멀티바이트 문자를 지원하도록 설정되었는지 확인하는 방법은 무엇입니까? (0) | 2023.06.29 |