... 적어도 그것이 문제라고 생각합니다.예약어 NUMBER이 (가) 커서 선언에 오류를 일으키는 열 이름으로 사용되었습니다
저는 열의 하나가 예약어 NUMBER (예, 알고 있습니다 ..) 인 테이블에 액세스하는 커서 선언을 포함하는 함수를 작성하고 있습니다. 함수는 컴파일시에 문제를 발생시킵니다.
오류 (16,10) : PL/SQL : ORA-06552 : PL/SQL : 컴파일 단위 분석이 종료되었습니다. ORA-06553 : PLS-488 : 유효하지 않은 변수 선언 : ,
CURSOR my_cur
IS
SELECT "NUMBER", col2, col3
FROM tb1_x;
그래도 문제가 있는지 확인하기 위해, 나는
CURSOR my_cur
IS
SELECT 'NUMBER', 'col2', 'col3'
FROM dual;
에 코드를 변경하고 확실히 컴파일 : 번호는 '
MY 코드가 같은 것을 보이는 유형 또는 하위 유형이어야합니다하지만 분명히 그것은 내가 원하는 것이 아닙니다.
불행히도, 난 (한숨) 열 이름을 변경할 수있는 옵션을 가지고 있지 않으며, 기록을 위해
SELECT "NUMBER", col2, col3
FROM tb1_x;
정상적인 SQL 실행에서 확인을 작동합니다.
어쨌든이 문제를 해결할 수 있습니까? 어떤 도움을 많이 주시면 감사하겠습니다!
여기에 빨대에서 파악 ...하지만 당신은'NUMBER'으로 "번호"를 선택하거나 '같은 NUMBER'' 또는 뭔가'으로 "번호"를 선택 시도? – gangreen
@gangreen 나는 그것이 효과가 있다고 생각하지 않는다. 사실, tb1_x 테이블이 사용되는 한 사실상 커서 선언은 컴파일 타임에 실패 할 것이다. 심지어 범인 컬럼 "NUMBER"이 전혀 액세스되지 않고있다.아래처럼 실패 할 것이다 :'CURSOR my_cur IS SELECT col2, col3 FROM tb1_x; ' – alchn
나는이 문제를 해결한다. 범인 테이블을 감싸기 위해 뷰를 생성하여 뷰에서 NBR으로 "NUMBER"컬럼의 이름을 변경합니다. 그런 다음 원래 표나 "NUMBER"를 언급하지 않고 NBR보기 및 열을 사용하여 커서를 선언 할 수 있습니다. 컴파일이 잘되어 잘 작동합니다. – alchn