2014-04-04 2 views
0

오라클 객체 테이블에서 객체를으로 가져 오는 가장 좋은 방법은 무엇입니까? 내가 그런오라클 객체 참조 표 객체

create table partners of person; 

, var에로 person를 얻을 :이와

create or replace TYPE person AS OBJECT (
    dni   VARCHAR2(20), 
    nom   VARCHAR2(20), 
    MAP MEMBER FUNCTION get_dni RETURN varchar2 
); 

create or replace TYPE BODY person AS 
    MAP MEMBER FUNCTION get_dni RETURN varchar2 IS 
    BEGIN 
    RETURN dni; 
    END; 
END; 

테이블 객체 :

declare 
    a_person person; 
begin 
    select deref(ref(p)) into a_person 
     from partners p 
    where p.dni = 1; 
    ... 
end; 

이 내 실제 방법은 유형을 가정 할 수 있습니다

참조 개체를 가져 오는보다 우아한 방법이 있습니까?

답변

1

당신의 테이블 선언 스타일에 정말 우아한 대안이없는 것 같습니다.

만 변형 아래

,하지만 당신보다 덜 우아 것으로 보인다 :

declare 
    a_person person; 
begin 
    select person(p.dni, p.nom) into a_person 
    from partners p 
    where p.dni = 1; 
end; 

즉, 객체를 필드로 분해하고 다시 구성합니다.

하지만 개체 유형 필드가있는 표를 신고하면 (예 :

create table new_partners (pers person) 

다음 액세스가 훨씬 간단 할 것이다 :

declare 
    a_person person; 
begin 
    select p.pers into a_person 
    from new_partners p 
    where p.pers.dni = 1; 
end; 

SQLFiddle

+0

감사합니다. 대안을 기다리게하겠습니다. Middletime, 사람들이 비 학술 프로젝트에서 객체 확장을 사용하는지 알고 있습니까? – danihp

+0

대부분의 경우 개체 확장은 상속 및 방법없이 매우 한정된 방식으로 사용되며 사용자 지정 저장소 구조와 동일합니다. 이 시점에서 나는 [이 대답] (http://stackoverflow.com/a/1504037/232279)에 동의합니다. 개인적으로 나에게 OOP 방식으로 객체 사용을 중단시키는 주된 요인은 패키지가있는 일반 관계형 테이블과 비교할 때 데이터 구조의 변경에 대한 나쁜 지원입니다. 핵심 개체 중 하나에 새 필드를 추가하는 방법에 대해 생각해보십시오. – ThinkJet