프로시져는 리턴값을 가지지 못한다. 하지만 out 매개변수를 사용하여 매개변수에 값을 대입할 수는 있다.
사용하는 매개변수는 IN, OUT, INOUT 이 있다.
파라미터만을 가지는 프로시져 , IN 매개변수를 사용함
create or replace procedure proc_test(
v_dno in departments.dno%type
)
is
v_dname departments.dname%type;
begin
select dname into v_dname from departments
where dno = v_dno;
dbms_output.put_line('프로시져 작동' || v_dname);
end;
/
select * from user_source where name = Upper('proc_test');
execute proc_test(10);
OUT 매개변수를 사용하여 파라미터에 값을 저장한 모습.
create or replace procedure proc_test(
v_dno in departments.dno%type,
v_dname out departments.dname%type
)
is
begin
select dname into v_dname from departments
where dno = v_dno;
dbms_output.put_line('프로시져 작동' || v_dname);
end;
/
select * from user_source where name = Upper('proc_test');
--변수 생성
variable v_dname varchar2(255);
-- out 매개변수는 : 을 사용
execute proc_test(10,:v_dname);
-- print 로 출력
print v_dname;
커서를 이용한 프로시져.
create or replace procedure proc_test
is
cursor c1 is select * from departments;
row_dept departments%rowtype;
begin
open c1;
dbms_output.put_line('프로시져 작동');
loop
exit when (c1%notfound);
fetch c1 into row_dept; -- fetch 커서 into 변수
dbms_output.put_line(row_dept.dno || ' / '||row_dept.dname||' / '||row_dept.loc);
end loop;
close c1;
end;
/
select * from user_source where name = Upper('proc_test');
-- out 매개변수는 : 을 사용
execute proc_test;
for in 문을 이용한 커서 사용
create or replace procedure proc_test
is
cursor c1 is select * from departments;
row_dept departments%rowtype;
begin
for row_dept in c1 loop
dbms_output.put_line(row_dept.dno || ' / ' || row_dept.dname || ' / ' || row_dept.loc);
end loop;
end;
/
select * from user_source where name = Upper('proc_test');
-- out 매개변수는 : 을 사용
execute proc_test;
'공룡이라는 ORACLE' 카테고리의 다른 글
Trigger (0) | 2020.10.23 |
---|---|
FUNCTION (0) | 2020.10.23 |
다중 insert 시 시퀀스 넘버가 PK 제약조건을 어긋내는 경우 해결방안. (0) | 2020.10.20 |
TopN (0) | 2020.10.06 |
간단한 백업 (0) | 2020.10.03 |