2013-01-08 2 views

답변

2

숙제?

이것은 기본 SQL입니다. 일반적으로 두 테이블을 결합합니다.

begin 
    for r_row in (select b.* 
        from tab1 a 
         inner join tab2 b 
           on b.id = a.id) 
    loop 
    null; -- do whatever 
    end loop; 
end; 
/

기존 커서를 가지고 your_cursor 그냥 ID 열을 반환하는 곳

예를 변경할 수없는 경우.

begin 
    open your_cursor; 
    loop 
    fetch your_cursor into v_id; 
    exit when your_cursor%notfound; 
    for r_row in (select * from tab2 b where b.id = v_id) 
    loop 
     null; -- do whatever here. 
    end loop; 
    end loop; 
end; 
/

편집 :

SQL> create table table1 (id number primary key, name varchar2(20)); 

Table created. 

SQL> create table table2 (id number, col1 varchar2(20), col2 varchar2(20)); 

Table created. 

SQL> insert into table1 values (1, 'test'); 

1 row created. 

SQL> insert into table1 values (2, 'foo'); 

1 row created. 

SQL> 
SQL> insert into table2 values (1, 'John', 'Smith'); 

1 row created. 

SQL> insert into table2 values (1, 'Peter', 'Jones'); 

1 row created. 

SQL> insert into table2 values (1, 'Jane', 'Doe'); 

1 row created. 

SQL> insert into table2 values (2, 'Nina', 'Austin'); 

1 row created. 

SQL> insert into table2 values (2, 'Naman', 'Goyal'); 

1 row created. 

SQL> commit; 

Commit complete. 

가 반환 구조를 보유하는 유형을 생성 : 의견에 따라 :

일부 샘플 데이터. 데이터 유형이 table1table2이 테이블의 데이터 유형과 일치 할 필요는주의 (% 유형이 작동하지 않습니다를, 그래서 그들은 일치해야합니다)

SQL> create type my_obj as object (
    2 id number, 
    3 name varchar2(20), 
    4 col1 varchar2(20), 
    5 col2 varchar2(20) 
    6 ); 
    7/

Type created. 

SQL> create type my_tab as table of my_obj; 
    2/

Type created. 

이제 함수를 만드는 (당신은 패키지에이 넣을 수있는, 경우 귀하의 실제 코드, 당신은 그것을 가지고).

SQL> create function function1 
    2 return my_tab pipelined 
    3 is 
    4 begin 
    5 for r_row in (select t1.id, t1.name, t2.col1, t2.col2 
    6     from table1 t1 
    7       inner join table2 t2 
    8         on t1.id = t2.id) 
    9 loop 
10  pipe row(my_obj(r_row.id, r_row.name, r_row.col1, r_row.col2)); 
11 end loop; 
12 end; 
13/

Function created. 

SQL> 
SQL> select * 
    2 from table(function1); 

     ID NAME     COL1     COL2 
---------- -------------------- -------------------- -------------------- 
     1 test     John     Smith 
     1 test     Peter    Jones 
     1 test     Jane     Doe 
     2 foo     Nina     Austin 
     2 foo     Naman    Goyal 

그 함수의 예 table(function1('a', 'b')); 등으로 필요한 경우 입력을 전달할 수 .. 답장을 보내

+0

감사합니다. 코드 아래에 - –

+0

답장을 보내 주셔서 감사합니다. r_row에서 제공 한 코드 (select * from tab2 b, 여기서 b.id = v_id) 루프 null; 여기 뭐든지해라. 끝 루프; 이 코드에서는 tab2에서 값을 가져 오지만 몇 가지 ID에 대해이 값을 tab2로 유지하고이 값을 모두 저장 프로 시저에서 반환하려고합니다. 어떻게해야합니까? –

+0

@NamanGoyal 어떻게 사용하실 건가요? 쉽게 배열로 반환 할 수 있습니다. 그게 도움이 되겠습니까?출력을 결과 세트로 사용 하시겠습니까 (예 : your_func() 또는 return_array = your_func() 스타일에서 select select를 수행 하시겠습니까?) – DazzaL

관련 문제