안녕하세요
C# 프로그램에서 Running 중인 DB session에 테이블 컬럼 추가/삭제시 에러가 발생하는데요
쿼리가 select *일때 발생하며 selesct A, B, C.. 로 컬럼 명시를 하면 발생하지 않네요
이 문제는 왜 발생 할까요?
컬럼 추가시 Internals error 발생
컬럼 삭제시 ORA-01007 variable not in select list
입니다
컬럼 추가 삭제 시
프로그램 내지는 프로시저에서 발생하는 에러 아닌가요?
보통 프로그램, 프로시저에는 * 를 사용하지 않습니다.
예를 들어 (이는 예시이며, 이마 다른 에러 코드가 나올겁니다)
insert into 테이블A(컬럼들) select * from 테이블B
라는 쿼리가 있다고 하면, 테이블 B, 테이블 A 에 컬럼이 추가 될경우,
에러가 발생할 겁니다.
하지만, 이게 타입 선언이나 커서 생성 및 호출부에서는
ORA-01007 이 발생하겠죠.
insert into 테이블A( a, b, c) select a,b,c from 테이블B 처럼 컬럼을 명시하게 되면 이런 에러는 안납니다.
오해의 소지가 있게 제가 문의를 드렸네요
프로그램으로 select 쿼리 중 컬럼 변경시 이슈구요..
DB session connect -> select * (결과 ok) -> 해당 테이블 컬럼 추가/삭제 -> select * (exception 발생)
현상입니다.
구글링을 아무리 해도 select 시 필요한 컬럼을 명시 해라는 솔루션만 있고 기술적인 원인을 못찾겠네요ㅠㅠ
참고로 오라클 쿼리 select는 OracleCommand의 Excutereader()로 수행 중입니다
select * 를 함수를 하는지, 프로그램을 하는지 잘 모르겠지만,
sql developer 같은 툴에서 테이블을 select 하는 건 아닌 것 같습니다.
해당 프로그램의 로직상 컬럼에 대응되는 변수가 있을것이구요.
result 에 대응하는 결과 변수도 있을것이라 생각합니다.
이 상황에서 DDL 변경이 있게 되면,
변수에 대한 매핑 삭제 및 추가로 인한
불일치 문제가 발생할 것 같습니다.
꼭 컬럼추가삭제를 해야한다면 임시테이블을 쓰시는건 어떤가요?