SlideShare une entreprise Scribd logo
1  sur  5
Télécharger pour lire hors ligne
www.topcredu.co.kr
3.2 PL/SQL에서 SQL문장 사용
 PL/SQL은 SELECT, INSERT, UPDATE, DELETE와 같은 DML(Data Manipulation Language) 및
COMMIT, ROLLBACK과 같은 TCL(Transaction Control Language)을 지원한다.
 DDL(Data Definition Language)에 대해서는 지원하지 않는다(CREATE, DROP, ALTER). 만약 사용
하려 한다면 Dynamic SQL(EXECUTE IMMEDIATE 구문, DBMS_SQL패키지 이용)을 사용해야 한
다.
 DCL(Data Control Language)도 지원하지 않는다.(GRANT, REVOKE)
3.2.1 SELECT문의 사용
 SELECT문의 종료는 세미콜론(;)으로 표시한다.
 SELECT절의 칼럼목록과 INTO절의 칼럼목록은 개수 및 데이터 타입이 동일해야 한다.
 SELECT * 인 경우 %ROWTYPE을 사용하면 좀 더 효율적이다.
 INTO절은 필수이며 BEGIN~END 사이에서 사용되는 SELECT는 반드시 한 건만 SELECT 되어
야 한다. 한 건도 SELECT 되지 않는다면 ORA-01403(NO_DATA_FOUND) 오류가 발생하고 여
러 건 SELECT 된다면 ORA-01422(TOO_MANY_ROWS) 오류가 발생한다.
[기본형식]
SELECT select_list
INTO 변수명 or 레코드이름
FROM table
WHERE conditions
-- EMP 테이블에서 이름을 입력받아 해당 사원의 급여 및 입사일자를 표시
SQL> edit ojc14
set serveroutput on
create or replace procedure ojc14
(v_ename in emp.ename%type)
is
v_sal emp.sal%type;
v_hiredate emp.hiredate%type;
begin
select sal, hiredate
into v_sal, v_hiredate
from emp
where ename = v_ename;
dbms_output.put_line('급여 : '||to_char(v_sal,'999,999'));
dbms_output.put_line('입사일자 : '||to_char(v_hiredate, 'yyyy.mm.dd'));
end;
/
SQL> @ojc14
프로시저가 생성되었습니다.
SQL> exec ojc14('SMITH')
급여 : 4,500
입사일자 : 1980.12.17
-- SELECT예외 처리예제
SQL> set serveroutput on
SQL> create or replace procedure ojc15
(v_sal in emp.sal%type)
is
v_ename emp.ename%type;
v_hiredate emp.hiredate%type;
begin
select ename, hiredate
into v_ename, v_hiredate
from emp
where sal = v_sal;
dbms_output.put_line('이름 : '||v_ename);
dbms_output.put_line('입사일자 : '||to_char(v_hiredate, 'yyyy.mm.dd'));
end;
/
프로시저가 생성되었습니다.
SQL> exec ojc15(950);
이름 : JAMES
입사일자 : 1981.12.03
SQL> exec ojc15(1250);
BEGIN ojc15(1250); END;
*
1행에 오류:
ORA-01422: 실제 인출은 요구된 것보다 많은 수의 행을 추출합니다
ORA-06512: "SCOTT.OJC15", 7행
ORA-06512: 1행
-- 예외처리 예문
SQL> set serveroutput on
SQL> create or replace procedure ojc15
(v_sal in emp.sal%type)
is
v_ename emp.ename%type;
v_hiredate emp.hiredate%type;
begin
select ename, hiredate
into v_ename, v_hiredate
from emp
where sal = v_sal;
dbms_output.put_line('이름 : '||v_ename);
dbms_output.put_line('입사일자 : '||to_char(v_hiredate, 'yyyy.mm.dd'));
exception
when too_many_rows then
dbms_output.put_line('데이터가 여러건 추출 되었습니다.');
when no_data_found then
dbms_output.put_line('데이터가 한건도 없습니다.');
when others then
dbms_output.put_line('SQL ERROR CODE : ' || SQLCODE);
dbms_output.put_line('SQL ERROR MSG : ' || SQLERRM);
end;
/
프로시저가 생성되었습니다.
SQL> exec ojc15(1250)
데이터가 여러건 추출 되었습니다.
SQL> exec ojc15(9999)
데이터가 한건도 없습니다.
3.2.2 INSERT/UPDATE/DELETE문의 사용
 일반적인 DML 사용하는 방법과 같다.
 WHERE절을 만족하는 레코드가 없더라도 오류가 발생하지 않고 WHERE절을 기술하지 않았
다면 전체 레코드에 대해 DML이 처리된다.
-- EMP 테이블에서 모든 사원의 급여를 10% 상승시키세요.
SQL> select ename, sal from emp;
ENAME SAL
---------- ----------
SMITH 800
ALLEN 1600
WARD 1250
……
14 개의 행이 선택되었습니다.
SQL> DECLARE
BEGIN
UPDATE EMP SET sal = sal + ROUND(10/100*sal);
COMMIT;
END;
/
PL/SQL 처리가 정상적으로 완료되었습니다.
SQL> select ename, sal from emp;
ENAME SAL
---------- ----------
SMITH 880
ALLEN 1760
WARD 1375
……
14 개의 행이 선택되었습니다.

Contenu connexe

Plus de 탑크리에듀(구로디지털단지역3번출구 2분거리)

(WPF교육)ListBox와 Linq 쿼리를 이용한 간단한 데이터바인딩, 새창 띄우기, 이벤트 및 델리게이트를 통한 메인윈도우의 ListB...
(WPF교육)ListBox와 Linq 쿼리를 이용한 간단한 데이터바인딩, 새창 띄우기, 이벤트 및 델리게이트를 통한 메인윈도우의 ListB...(WPF교육)ListBox와 Linq 쿼리를 이용한 간단한 데이터바인딩, 새창 띄우기, 이벤트 및 델리게이트를 통한 메인윈도우의 ListB...
(WPF교육)ListBox와 Linq 쿼리를 이용한 간단한 데이터바인딩, 새창 띄우기, 이벤트 및 델리게이트를 통한 메인윈도우의 ListB...탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...
[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...
[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...탑크리에듀(구로디지털단지역3번출구 2분거리)
 
C#기초에서 윈도우, 스마트폰 앱개발 과정(c#.net, ado.net, win form, wpf, 자마린)_자마린학원_씨샵교육_WPF학원...
C#기초에서 윈도우, 스마트폰 앱개발 과정(c#.net, ado.net, win form, wpf, 자마린)_자마린학원_씨샵교육_WPF학원...C#기초에서 윈도우, 스마트폰 앱개발 과정(c#.net, ado.net, win form, wpf, 자마린)_자마린학원_씨샵교육_WPF학원...
C#기초에서 윈도우, 스마트폰 앱개발 과정(c#.net, ado.net, win form, wpf, 자마린)_자마린학원_씨샵교육_WPF학원...탑크리에듀(구로디지털단지역3번출구 2분거리)
 
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]탑크리에듀(구로디지털단지역3번출구 2분거리)
 
3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]
3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]
3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]탑크리에듀(구로디지털단지역3번출구 2분거리)
 

Plus de 탑크리에듀(구로디지털단지역3번출구 2분거리) (20)

[wpf학원,wpf교육]닷넷, c#기반 wpf 프로그래밍 인터페이스구현 재직자 향상과정
[wpf학원,wpf교육]닷넷, c#기반 wpf 프로그래밍 인터페이스구현 재직자 향상과정[wpf학원,wpf교육]닷넷, c#기반 wpf 프로그래밍 인터페이스구현 재직자 향상과정
[wpf학원,wpf교육]닷넷, c#기반 wpf 프로그래밍 인터페이스구현 재직자 향상과정
 
(WPF교육)ListBox와 Linq 쿼리를 이용한 간단한 데이터바인딩, 새창 띄우기, 이벤트 및 델리게이트를 통한 메인윈도우의 ListB...
(WPF교육)ListBox와 Linq 쿼리를 이용한 간단한 데이터바인딩, 새창 띄우기, 이벤트 및 델리게이트를 통한 메인윈도우의 ListB...(WPF교육)ListBox와 Linq 쿼리를 이용한 간단한 데이터바인딩, 새창 띄우기, 이벤트 및 델리게이트를 통한 메인윈도우의 ListB...
(WPF교육)ListBox와 Linq 쿼리를 이용한 간단한 데이터바인딩, 새창 띄우기, 이벤트 및 델리게이트를 통한 메인윈도우의 ListB...
 
[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...
[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...
[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...
 
[구로자마린학원/자마린강좌/자마린교육]3. xamarin.ios 3.3.5 추가적인 사항
[구로자마린학원/자마린강좌/자마린교육]3. xamarin.ios  3.3.5 추가적인 사항[구로자마린학원/자마린강좌/자마린교육]3. xamarin.ios  3.3.5 추가적인 사항
[구로자마린학원/자마린강좌/자마린교육]3. xamarin.ios 3.3.5 추가적인 사항
 
3. xamarin.i os 3.3 xamarin.ios helloworld 자세히 살펴보기 3.4.4 view controllers an...
3. xamarin.i os 3.3 xamarin.ios helloworld 자세히 살펴보기 3.4.4 view controllers an...3. xamarin.i os 3.3 xamarin.ios helloworld 자세히 살펴보기 3.4.4 view controllers an...
3. xamarin.i os 3.3 xamarin.ios helloworld 자세히 살펴보기 3.4.4 view controllers an...
 
5. 서브 쿼리(sub query) 5.1 서브 쿼리(sub query) 개요 5.2 단일행 서브쿼리(single row sub query)
5. 서브 쿼리(sub query) 5.1 서브 쿼리(sub query) 개요 5.2 단일행 서브쿼리(single row sub query)5. 서브 쿼리(sub query) 5.1 서브 쿼리(sub query) 개요 5.2 단일행 서브쿼리(single row sub query)
5. 서브 쿼리(sub query) 5.1 서브 쿼리(sub query) 개요 5.2 단일행 서브쿼리(single row sub query)
 
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld(단일 뷰) 실습[...
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld(단일 뷰) 실습[...3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld(단일 뷰) 실습[...
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld(단일 뷰) 실습[...
 
(닷넷,자마린,아이폰실습)Xamarin.iOS HelloWorld 실습_멀티화면,화면전환_Xamarin교육/Xamarin강좌
(닷넷,자마린,아이폰실습)Xamarin.iOS HelloWorld 실습_멀티화면,화면전환_Xamarin교육/Xamarin강좌(닷넷,자마린,아이폰실습)Xamarin.iOS HelloWorld 실습_멀티화면,화면전환_Xamarin교육/Xamarin강좌
(닷넷,자마린,아이폰실습)Xamarin.iOS HelloWorld 실습_멀티화면,화면전환_Xamarin교육/Xamarin강좌
 
C#기초에서 윈도우, 스마트폰 앱개발 과정(c#.net, ado.net, win form, wpf, 자마린)_자마린학원_씨샵교육_WPF학원...
C#기초에서 윈도우, 스마트폰 앱개발 과정(c#.net, ado.net, win form, wpf, 자마린)_자마린학원_씨샵교육_WPF학원...C#기초에서 윈도우, 스마트폰 앱개발 과정(c#.net, ado.net, win form, wpf, 자마린)_자마린학원_씨샵교육_WPF학원...
C#기초에서 윈도우, 스마트폰 앱개발 과정(c#.net, ado.net, win form, wpf, 자마린)_자마린학원_씨샵교육_WPF학원...
 
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]
 
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld_자마린학원_자마린...
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld_자마린학원_자마린...3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld_자마린학원_자마린...
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld_자마린학원_자마린...
 
3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]
3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]
3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]
 
2. xamarin.android 2.5.3 xamarin.android .aar binding(안드로이드 .aar file을 자마린 바...
2. xamarin.android  2.5.3 xamarin.android .aar binding(안드로이드 .aar file을 자마린 바...2. xamarin.android  2.5.3 xamarin.android .aar binding(안드로이드 .aar file을 자마린 바...
2. xamarin.android 2.5.3 xamarin.android .aar binding(안드로이드 .aar file을 자마린 바...
 
유니티,Unity 엔진을 활용한 VR/AR 콘텐츠 개발 _사물인터넷(IoT) 네크워크 프로그래밍
유니티,Unity 엔진을 활용한 VR/AR 콘텐츠 개발 _사물인터넷(IoT) 네크워크 프로그래밍유니티,Unity 엔진을 활용한 VR/AR 콘텐츠 개발 _사물인터넷(IoT) 네크워크 프로그래밍
유니티,Unity 엔진을 활용한 VR/AR 콘텐츠 개발 _사물인터넷(IoT) 네크워크 프로그래밍
 
2. xamarin.android 2.5 xamarin.android(with .jar, .aar, native android librar...
2. xamarin.android 2.5 xamarin.android(with .jar, .aar, native android librar...2. xamarin.android 2.5 xamarin.android(with .jar, .aar, native android librar...
2. xamarin.android 2.5 xamarin.android(with .jar, .aar, native android librar...
 
2. xamarin.android 2.5 xamarin.android(with .jar, .aar, native android librar...
2. xamarin.android 2.5 xamarin.android(with .jar, .aar, native android librar...2. xamarin.android 2.5 xamarin.android(with .jar, .aar, native android librar...
2. xamarin.android 2.5 xamarin.android(with .jar, .aar, native android librar...
 
2. xamarin.android 2.3 hello android multi screen example part2
2. xamarin.android 2.3 hello android multi screen example part22. xamarin.android 2.3 hello android multi screen example part2
2. xamarin.android 2.3 hello android multi screen example part2
 
2. xamarin.android 2.2 hello xamarin android 구조 2.2.7 simple intent example(현...
2. xamarin.android 2.2 hello xamarin android 구조 2.2.7 simple intent example(현...2. xamarin.android 2.2 hello xamarin android 구조 2.2.7 simple intent example(현...
2. xamarin.android 2.2 hello xamarin android 구조 2.2.7 simple intent example(현...
 
2. xamarin.android 2.2 hello xamarin android 구조 2.2.7 simple intent example(현...
2. xamarin.android 2.2 hello xamarin android 구조 2.2.7 simple intent example(현...2. xamarin.android 2.2 hello xamarin android 구조 2.2.7 simple intent example(현...
2. xamarin.android 2.2 hello xamarin android 구조 2.2.7 simple intent example(현...
 
2. xamarin.android 2.2 hello xamarin android 구조 2.2.6 simple intent example(웹...
2. xamarin.android 2.2 hello xamarin android 구조 2.2.6 simple intent example(웹...2. xamarin.android 2.2 hello xamarin android 구조 2.2.6 simple intent example(웹...
2. xamarin.android 2.2 hello xamarin android 구조 2.2.6 simple intent example(웹...
 

PLSQL에서 SQL문장의 사용_SELECT/INSERT/UPDATE/DELETE

  • 1. www.topcredu.co.kr 3.2 PL/SQL에서 SQL문장 사용  PL/SQL은 SELECT, INSERT, UPDATE, DELETE와 같은 DML(Data Manipulation Language) 및 COMMIT, ROLLBACK과 같은 TCL(Transaction Control Language)을 지원한다.  DDL(Data Definition Language)에 대해서는 지원하지 않는다(CREATE, DROP, ALTER). 만약 사용 하려 한다면 Dynamic SQL(EXECUTE IMMEDIATE 구문, DBMS_SQL패키지 이용)을 사용해야 한 다.  DCL(Data Control Language)도 지원하지 않는다.(GRANT, REVOKE) 3.2.1 SELECT문의 사용  SELECT문의 종료는 세미콜론(;)으로 표시한다.  SELECT절의 칼럼목록과 INTO절의 칼럼목록은 개수 및 데이터 타입이 동일해야 한다.  SELECT * 인 경우 %ROWTYPE을 사용하면 좀 더 효율적이다.  INTO절은 필수이며 BEGIN~END 사이에서 사용되는 SELECT는 반드시 한 건만 SELECT 되어 야 한다. 한 건도 SELECT 되지 않는다면 ORA-01403(NO_DATA_FOUND) 오류가 발생하고 여 러 건 SELECT 된다면 ORA-01422(TOO_MANY_ROWS) 오류가 발생한다. [기본형식] SELECT select_list INTO 변수명 or 레코드이름 FROM table WHERE conditions -- EMP 테이블에서 이름을 입력받아 해당 사원의 급여 및 입사일자를 표시 SQL> edit ojc14 set serveroutput on create or replace procedure ojc14 (v_ename in emp.ename%type) is v_sal emp.sal%type; v_hiredate emp.hiredate%type; begin select sal, hiredate
  • 2. into v_sal, v_hiredate from emp where ename = v_ename; dbms_output.put_line('급여 : '||to_char(v_sal,'999,999')); dbms_output.put_line('입사일자 : '||to_char(v_hiredate, 'yyyy.mm.dd')); end; / SQL> @ojc14 프로시저가 생성되었습니다. SQL> exec ojc14('SMITH') 급여 : 4,500 입사일자 : 1980.12.17 -- SELECT예외 처리예제 SQL> set serveroutput on SQL> create or replace procedure ojc15 (v_sal in emp.sal%type) is v_ename emp.ename%type; v_hiredate emp.hiredate%type; begin select ename, hiredate into v_ename, v_hiredate from emp where sal = v_sal; dbms_output.put_line('이름 : '||v_ename); dbms_output.put_line('입사일자 : '||to_char(v_hiredate, 'yyyy.mm.dd')); end; / 프로시저가 생성되었습니다. SQL> exec ojc15(950); 이름 : JAMES
  • 3. 입사일자 : 1981.12.03 SQL> exec ojc15(1250); BEGIN ojc15(1250); END; * 1행에 오류: ORA-01422: 실제 인출은 요구된 것보다 많은 수의 행을 추출합니다 ORA-06512: "SCOTT.OJC15", 7행 ORA-06512: 1행 -- 예외처리 예문 SQL> set serveroutput on SQL> create or replace procedure ojc15 (v_sal in emp.sal%type) is v_ename emp.ename%type; v_hiredate emp.hiredate%type; begin select ename, hiredate into v_ename, v_hiredate from emp where sal = v_sal; dbms_output.put_line('이름 : '||v_ename); dbms_output.put_line('입사일자 : '||to_char(v_hiredate, 'yyyy.mm.dd')); exception when too_many_rows then dbms_output.put_line('데이터가 여러건 추출 되었습니다.'); when no_data_found then dbms_output.put_line('데이터가 한건도 없습니다.'); when others then dbms_output.put_line('SQL ERROR CODE : ' || SQLCODE); dbms_output.put_line('SQL ERROR MSG : ' || SQLERRM); end; / 프로시저가 생성되었습니다.
  • 4. SQL> exec ojc15(1250) 데이터가 여러건 추출 되었습니다. SQL> exec ojc15(9999) 데이터가 한건도 없습니다. 3.2.2 INSERT/UPDATE/DELETE문의 사용  일반적인 DML 사용하는 방법과 같다.  WHERE절을 만족하는 레코드가 없더라도 오류가 발생하지 않고 WHERE절을 기술하지 않았 다면 전체 레코드에 대해 DML이 처리된다. -- EMP 테이블에서 모든 사원의 급여를 10% 상승시키세요. SQL> select ename, sal from emp; ENAME SAL ---------- ---------- SMITH 800 ALLEN 1600 WARD 1250 …… 14 개의 행이 선택되었습니다. SQL> DECLARE BEGIN UPDATE EMP SET sal = sal + ROUND(10/100*sal); COMMIT; END; / PL/SQL 처리가 정상적으로 완료되었습니다. SQL> select ename, sal from emp; ENAME SAL ---------- ----------
  • 5. SMITH 880 ALLEN 1760 WARD 1375 …… 14 개의 행이 선택되었습니다.