본문 바로가기

빅데이터과정/PL/SQL

#10_140626_PL_SQL_중첩 테이블

728x90

# 중첩 테이블



문제57. (p6-23) 중첩 테이블을 사용해서 dept 테이블에서 모든 부서번호와 부서위치를 출력될 수 있도록 하시오

SET serveroutput ON
DECLARE
 TYPE dept_table_type IS TABLE OF
 dept%ROWTYPE INDEX BY PLS_INTEGER;
 dept_table dept_table_type;
 v_count NUMBER(10) := 10;

BEGIN
 FOR i IN 1..4 LOOP
  SELECT * INTO dept_table(i)
  FROM DEPT
  WHERE deptno = v_count;
  v_count := v_count + 10;
 END LOOP;

 FOR i IN DEPT_TABLE.FIRST .. DEPT_TABLE.LAST LOOP
  dbms_output.put_line(dept_table(i).deptno || ' 의 부서는 ' || dept_table(i).loc);
 END LOOP;
END;


/



문제58. 아래의 작업을 한 후에 사원 테이블에서 사원번호이름월급을 모두 출력하는 PL/SQL을 작성하시오

create table emp12
as select rownum rnk, emp.* from emp;
drop table emp;

rename emp12 to emp;

create table emp12
as select rownum rnk, emp.* from emp;
drop table emp;
rename emp12 to emp;

set serveroutput on
set verify OFF
declare
 type emp_table_type is table of emp%rowtype index by pls_integer;
 emp_table emp_table_type;
 v_cnt number(10);
 begin
  select count(*) into v_cnt
  from emp;
  for i in 1.. v_cnt loop
   select * into emp_table(i)
   from emp
   where rnk=i;     
  end loop;          
  for i in 1.. v_cnt loop
   dbms_output.put_line(emp_table(i).ename || ', ' || emp_table(i).ename || ', ' || emp_table(i).sal);
  end loop;
end;
/
where rnk=i;      // 한번에 여러개의 data가 나오지 않아야 한다한번에 하나씩 나와야 하므로


end loop;            // where절을 통해 조절한다.


'빅데이터과정 > PL/SQL ' 카테고리의 다른 글

#11_140627_PL_SQL_예외처리  (0) 2014.07.14
#10_140626_PL_SQL_CURSOR  (0) 2014.07.14
#10_140626_PL_SQL_RECORD  (0) 2014.07.14
#10_140626_PL_SQL_LABEL  (0) 2014.07.14
#12_140630_PL_SQL_PROCEDURE  (0) 2014.07.14