2011-03-10 2 views
2

은 이제 내가 쿼리를 동일한 패키지 본체에가져 오기 무리

type type_bla is record (id number, ...); 

또한이 패키지 A이 있다고 가정하자, 그 구성하는 데 필요한 모든 필드를 가져옵니다 그 물체.

select type_bla(t1.id, t2.foo, t1.bar ...) 
into instance_of_type_bla 
from table t 
inner join table2 t2 ON ... 

을하지만 패키지에 정의 된 사용자 정의 유형이 있기 때문에 - 그것은 생성자를하지 않은, 그래서으로 변경 할 의무 : 나는 저장된 객체가 있다면 내가 할 수있는

select t1.id, t2.foo, t1.bar ... 
into instance_of_type_bla.id, instance_of_type_bla.foo ... 
from table t 
inner join table2 t2 ON ... 

그런 종류의 물건을 채우는 것이 더 우아한 방법입니까?

답변

3

% ROWTYPE 레코드를 선언 한 것처럼 레코드에 직접 데이터를 선택할 수 있어야합니다.

나는 GET_REC 기능은 사용자의 기록을

SQL> create or replace package pkg_foo 
    2 as 
    3 type my_rec is record(col1 number, col2 number, col3 varchar2(10)); 
    4 function get_rec 
    5  return my_rec; 
    6 end; 
    7/

Package created. 

SQL> create or replace package body pkg_foo 
    2 as 
    3 function get_rec 
    4  return my_rec 
    5 is 
    6  l_rec my_rec; 
    7 begin 
    8  select 1, 2, 'Justin' 
    9  into l_rec 
10  from dual; 
11  return l_rec; 
12 end; 
13 end; 
14/

Package body created. 

를 채 웁니다 패키지 PKG_FOO를 선언합니다 그리고 그냥 작동하는지 보여

SQL> declare 
    2 l_rec pkg_foo.my_rec; 
    3 begin 
    4 l_rec := pkg_foo.get_rec; 
    5 p.l('Col1 = ' || l_rec.col1); 
    6 p.l('Col2 = ' || l_rec.col2); 
    7 p.l('Col3 = ' || l_rec.col3); 
    8 end; 
    9/
Col1 = 1 
Col2 = 2 
Col3 = Justin 
+0

오 : -S 내가 물었다 전에 확인해야했다. 감사 ;-) – zerkms