programing

ORA-01747: user.table.column, table.column 또는 column 규격이 잘못되었습니다.

yellowcard 2023. 6. 29. 19:57
반응형

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 파서는 열 중 하나가 유효하지 않다고 생각합니다.이는 열을 잘못 참조했거나 열 이름이 예약된 단어이거나 구문 오류 때문일 수 있습니다.UPDATEOracle이 열이 아닌 것을 열이라고 생각하도록 하는 문장입니다.실행 중인 전체 진술, 정의를 보는 것은 정말 도움이 될 것입니다.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

반응형