ID 필드가 공통 인 두 개의 테이블이 있습니다.오라클 저장 프로 시저에서 동적 커서를 반환하는 방법
커서의 첫 번째 테이블에 대한 모든 레코드를 가져옵니다. 그럼 커서의 각 ID에 기초하여 두 번째 테이블에서 값을 가져온 다음 그 값을 반환하려고합니다.
어떻게해야합니까? 도와주세요 !!!
ID 필드가 공통 인 두 개의 테이블이 있습니다.오라클 저장 프로 시저에서 동적 커서를 반환하는 방법
커서의 첫 번째 테이블에 대한 모든 레코드를 가져옵니다. 그럼 커서의 각 ID에 기초하여 두 번째 테이블에서 값을 가져온 다음 그 값을 반환하려고합니다.
어떻게해야합니까? 도와주세요 !!!
숙제?
이것은 기본 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.
가 반환 구조를 보유하는 유형을 생성 : 의견에 따라 :
일부 샘플 데이터. 데이터 유형이 table1
및 table2
이 테이블의 데이터 유형과 일치 할 필요는주의 (% 유형이 작동하지 않습니다를, 그래서 그들은 일치해야합니다)
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'));
등으로 필요한 경우 입력을 전달할 수 .. 답장을 보내
감사합니다. 코드 아래에 - –
답장을 보내 주셔서 감사합니다. r_row에서 제공 한 코드 (select * from tab2 b, 여기서 b.id = v_id) 루프 null; 여기 뭐든지해라. 끝 루프; 이 코드에서는 tab2에서 값을 가져 오지만 몇 가지 ID에 대해이 값을 tab2로 유지하고이 값을 모두 저장 프로 시저에서 반환하려고합니다. 어떻게해야합니까? –
@NamanGoyal 어떻게 사용하실 건가요? 쉽게 배열로 반환 할 수 있습니다. 그게 도움이 되겠습니까?출력을 결과 세트로 사용 하시겠습니까 (예 : your_func() 또는 return_array = your_func() 스타일에서 select select를 수행 하시겠습니까?) – DazzaL