종종.. 다른 테이블에서 유사한 필드만 뽑아서 하나의 뷰로 만들어야 하는 경우가 종종 있다.
다음과 같이 뷰를 만들어서 select해보면 잘 된다.

문제는 다른 테이블에서 유사한 정보만 묶어서 하나의 테이블처럼 쓰려는것이다보니,
기본키가 기존에 존재했다고 해도 union 되면서 유일성이 사라질수 있어서
ROWID를 키처럼 쓰려고 한것이다.


CREATE OR REPLACE FORCE VIEW "jmc"."VIEW_TEST" AS

SELECT
  ROWID AS LOGID,
  bm_content as HTML_BODY
FROM BBS_MEDIA

UNION ALL

SELECT
 ROWID as AS LOGID,
  sf_content as HTML_BODY
FROM FREE_MEDIA

근데...
select * from VIEW_TEST; (잘됨)
select * from VIEW_TEST where LOGID = 'AAAEZIAATAAAAHVAAC'; 이렇게 where절에 rowid를 검색해보려고하면...안됨.




ORA-01410: invalid ROWID

참 이런에러 지랄리스틱하다...
에러메시지 찾아도.. 한글로 번역해놓은 에러만 설명되어있을뿐 ㄱ-

일단, 나같은 case의 경우는 뷰에서 ROWID를 cast해서 필드형을 바꿔서 뷰를 만들면 해결된당...
인터넷 어딜 뒤져도 이런 해결법은 없더군 흠흠..


CREATE OR REPLACE FORCE VIEW "jmc"."VIEW_TEST" AS

SELECT 
  cast(ROWID as CHAR(18)) AS LOGID,
  bm_content as HTML_BODY
FROM BBS_MEDIA

UNION ALL

SELECT 
  cast(ROWID as CHAR(18)) AS LOGID,
  sf_content as HTML_BODY
FROM FREE_MEDIA


+ Recent posts