2013-04-18 4 views
2

Oracle에 테이블이 있습니다. 이 테이블에는 EMPLOYEE_ID (NUMBER, Nullable, NULL 수는 0) 및 EMPLOYEE_NUMBER (VARCHAR2, Nullable하지만 NULL 수는 0)가 있습니다.보기의 Oracle nullable 및 nullable이 아닌 열

는 지금은이 테이블에 대한 뷰를 작성합니다

CREATE OR REPLACE FORCE VIEW APPS.XXKE_L2E_EMPLOYEE 
(
    PERSON_ID, 
    EMPLOYEE_NUMBER, 
    ... 
) 
AS 
    SELECT EMPLOYEE_ID, 
      EMPLOYEE_NUMBER, 
      ... 
    FROM xxke.xxke_employees e 
      INNER JOIN xxke.xxke_organizations o ON e.organization_id = o.organization_id 
      INNER JOIN xxke.xxke_operating_units ou ON e.org_id = ou.org_id; 

ALTER VIEW APPS.XXKE_L2E_EMPLOYEE 
ADD CONSTRAINT XXKE_L2E_EMPLOYEE_V_PK 
PRIMARY KEY(PERSON_ID) DISABLE; 

어떻게이 땅에서 그보기 person_id로가된다 있다는 것이 가능하다 Null 허용 EMPLOYEE_NUMBER는 (심지어 NVL 트릭을 사용하여), 그러나이 Null 허용하지

질문 : person_id로 열이보기에 Null 허용하지가되도록 내가, 오라클은 방법으로 뷰를 만들 수 있습니까? 또는 내 WCF oData 서비스가이 뷰를 쿼리하도록 어떻게 만들 수 있습니까? 현재 edmx 파일을 업데이트 한 후 다음과 같이 표시됩니다.

오류 : Oracle.ssdl (227,6) : 오류 0075 : 키 파트 : XXERS_L2E_EMPLOYEE 유형의 'PERSON_ID'이 (가) 유효하지 않습니다. 키의 모든 부분은 Null이 허용되지 않아야합니다.

+0

otehr이 아닌 열 중 하나에서 NVL을 사용하고있을 수 있습니까? – Limey

+1

당신은 분노한 질문을하는 방식으로 당신의 분노를 허용했습니다. 실제로 무슨 일이 일어나고 있는지 설명하고, 당신이하고 싶은 일에서 벗어나는 것을 말해주세요. – APC

+0

NVL과 동일하거나 호환되지 않습니다. 또한 edmx를 업데이트 한 후 Entity Framework에서 뷰에 액세스하려고 할 때 얻는 결과입니다. 지정된 스키마가 유효하지 않습니다. 오류 : Oracle.ssdl (227,6) : 오류 0075 : 키 부품 : XXERS_L2E_EMPLOYEE 유형의 'PERSON_ID'이 (가) 유효하지 않습니다. 키의 모든 부분은 Null이 허용되지 않아야합니다. 가장 좋은 점은 VS2010에서이 열은 자동으로 null이 아닌 것으로 설정되어 PK로 표시된다는 것입니다. –

답변

0

nullable이되는 이유는 employee_id에 nvl을 사용하는 뷰 쿼리를 생성 할 때입니다. 직원은 쿼리에서 nullable이 아니므로 그렇지 않습니다. 뷰에서 oracle은 결과로 나오는 열을 null로 만듭니다. 뷰는 정적이 아니라 쿼리입니다. 문제가 발생하지 않도록하려면 nvl pre가 쿼리에 적용된 상태에서 테이블의 구체화 된보기를 만들면 쿼리에 null이 선택되지 않습니다. 그런 다음 인덱스를 수행하면 쿼리가 훨씬 빨라집니다.

+1

이 답변은 잘못되었습니다. NVL 기능이 있든 없든 동일합니다. 사실이 질문을 위해 NVL을 제거해야합니다. 그것은 단지 불필요한 혼란을 초래합니다 ... –

0

뷰의 열을 Null을 허용하지 않으려면이 열을 기본 키로 포함하는 테이블과 내부 조인하고 뷰 정의에서 해당 테이블의 PERSON_ID를 선택하십시오 (이 경우). 그것으로 문제가 해결됩니다.