기록해! 정리해!

7-2 본문

Oracle

7-2

zsuling 2022. 5. 24. 11:37

5. select 구문

 

--select 경우의 수 2가지

1. 리턴이 1개 : put_line

2. 리턴이 여러개 : pkg

 

--insert,update,delete는 리턴 안함


[ 1 ] 하나의 레코드값 출력하기

Create procedure mySelect1

as

var1 VARCHAR2(10);

var2 VARCHAR2(30);

var3 VARCHAR2(30);

begin

select sno, sname, dept into var1, var2, var3 from student

where sno=100;

DBMS_OUTPUT.put_line('학생정보'|| var1 ||' ' || var2 || ' ' || var3);

end;

-------------------------------------------------------------------------

EXECUTE mySelect1();

[ 2 ] 조건을 받아 하나의 레코드값 출력하기

Create procedure mySelect2

(

strSno in VARCHAR2

)

as

var1 VARCHAR2(10);

var2 VARCHAR2(30);

var3 VARCHAR2(30);

begin

select sno, sname, dept into var1, var2, var3 from student

where sno=strSno ;

DBMS_OUTPUT.put_line('학생정보: '|| var1 ||' ' || var2 || ' ' || var3);

end;

--------------------------------------

EXECUTE mySelect2('200');

 

create or replace procedure sp_student_select2
(
strSno in varchar2,
strName in varchar2
)
as
var1 varchar2(10);
var2 varchar2(30);
var3 varchar2(30);

begin 
 select sno, sname, dept into var1,var2,var3 from student
 where sno=strSno or sname=strName;
 DBMS_OUTPUT.put_line('학생정보:'||var1||' '||var2||' '||var3); --한 라인만 출력할 수 있고 여러라인은 출력할 수 없음
end;

execute sp_student_select2('200'); --두개인데 하나넣으면 에러
execute sp_student_select2('999','박종화'); --or라서 한명만 나옴
execute sp_student_select2('200','박종화'); --두사람이 나와야하는데 오류가 난다
PUT_LINE은 한 라인만 출력가능하고 여러라인은 출력 불가하기 때문에

 

6. 패키지 만들기 ( 여러개의 레코드 실행 )

create or replace package pkg is
  type t_ref is ref cursor;
end;

----------------------------------------------

CREATE OR REPLACE procedure myProc1

(

ret OUT pkg.t_ref

)

is

BEGIN

OPEN ret FOR

SELECT * from enrol ;

END;

--------------------------------------------------------------------------

* 여러개의 레코드 결과값을 보는 경우 실행 명령은 의미가 없다.

Execute() <--- 실행해도 의미가 없다. !!

[ 프로시져에서 오른쪽 클릭해서 결과를 봐야 한다. ]

 

create or replace procedure sp_student_select4 --프로시저 네임
(
ret out pkg.t_ref, --아웃풋
strSname1 in varchar2, --인풋
strSname2 in varchar2
)
is
begin 
 open ret for
  select sno, sname, dept from student
  where sname like strsname1 or dept like strsname2; --in 값에 %둘% 이렇게 넣어야함
end;

 

  where sname like '%'||strsname1||'%' or dept like '%'||strsname2||'%'; --in 값에 둘 이렇게 넣어야함

  -- 파이프라인 오라클에서만 가능


--execute 하면 안나오고 프로시저에서 [실행] in 값에 직접 입력해줘야한다 [출력변수]



 

 

 

 

 

 

 

'Oracle' 카테고리의 다른 글

7-4(bigdata)  (0) 2022.05.24
7-3 (프로시저)  (0) 2022.05.24
6-SQL 기본문법 정리  (0) 2022.05.24
7-1  (0) 2022.05.24
7-예제1(데이터 베이스 용어)  (0) 2022.05.24
Comments