일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 메소드
- 스프링
- wrapper
- 클래스
- 인텔리제이
- 박싱
- https://start.spring.io
- unboxing
- Short
- Java
- suvlet
- 무한
- 콜렉션
- 제네릭
- 싱글톤
- 제너릭
- 루프
- 싱글턴
- 언박싱
- Scanner
- dependency
- 내장객체
- 컬렉션
- 빌드
- 자동형변환
- maven
- start.spring.io
- bootstrap
- boxing
- Jenkins
- Today
- Total
목록K-DigitalTraining 강의/2. Oracle + PLSQL (38)
Developer Gonie
* 아래서 테이블의 출력결과에는 오타 있는게 좀 있어서 살짝 다르게 나올수도 있음 drop table albums; create table albums( num number primary key, song varchar2(30) not null, singer varchar2(30) not null, company varchar2(20) not null, price number default 0 ); drop sequence albumseq; --sequence albumseq 생성 : 1~100까지 증가 create sequence albumseq increment by 1 start with 1 minvalue 1 maxvalue 100; -- 아래의 형태로 3번의 insert 하기 insert int..
예외의 종류 - others : Java에서의 Exception 클래스와 같이 모든 예외를 받을 수 있음. - too_many_rows : 2줄 이상의 레코드가 조회되었을 때 발생하는 예외 - no_data_found : 발견된 레코드가 없을 때 발생하는 예외 이외에도 구글에 plsql 예외처리 라고 입력하면 더 다양한 예외를 볼 수 있다. 1개의 예외만을 다루는 예시 declare i number; begin i := 6/0; dbms_output.put_line('i:' || i); end; / 1행에 오류: ORA-01476: 제수가 0 입니다 ----------------------------------------------------------------- declare i number; beg..
커서를 이용해 한 줄 씩 가져와 모든 행의 레코드를 출력하는 방법 커서란? 쿼리문의 결과를 담을 수 있는 공간으로, 이 공간에 접근하기 위해서는 접근 시작전 open, 마무리 후 close를 해줘야 한다. 또한, 루프를 빠져나오기 위해 exit ... NOTFOUND를 사용해줘야 함. 커서 선언은 declare 부분에서 이뤄진다. declare vno book.no%type; vtitle book.title%type; vpublisher book.publisher%type; cursor book_cursor is select no, title, publisher from book; begin open book_cursor; loop fetch book_cursor into vno, vtitle, vpub..
프로시저란? 내부에서의 동작은 함수와 같지만 함수와 다르게 반환값이 없음. void procedure()와 같이 반환값이 없는 메소드와 같음. 반환값이 없기 때문에 select 에서 함수를 호출하듯이 특정 열의 값을 연산하여 대치해주는 것이 불가하다. 프로시저 동작 방식을 이해하기 위한 초간단 예시 * as 대신에 is 도 사용가능한데 별차이 없음 -- 특정 레코드를 update 하는 프로시저 create or replace procedure ptest(no number) -- 이름이 ptest인 프로시저 as -- 함수와 다르게 return, return 타입이 없음 begin update members set salary = salary*1.1 where id = no; end; / -- 함수는 호출..
* 만드려는 함수이름이 존재하는 테이블의 이름과 같으면 오류가 뜨는데, 이럴 땐 테이블을 삭제해주던지 함수의 이름을 다르게 지정해 주어야 한다. * 반환타입에 varchar2타입을 사용할 경우 사이즈는 지정하지 않고 'varchar2' 까지만 써줘야 한다. 1. 파라미터를 받지않는 함수 정의 및 호출방법 --test 라는 함수가 있으면 만들고 만들어놓은게 있다면 내가 만드는대로 변경해라 create or replace function test -- 'test' 부분은 함수의 이름, 함수를 만들지만 test 라는 이름을 가진 테이블이 존재하면 에러남에 주의 return number as -- return 타입이 number 라는 것, 이 부분은 declare를 대신해서 변수를 선언하는 부분이기도 함 x n..
* 변수를 선언할 때 sum, avg 등의 함수의 이름은 사용할 수 없음에 주의하자. * 반복횟수가 정해져 있을 때는 for~loop 를 사용하고, 이외의 상황은 loop 혹은 while문을 사용하면된다. 1. loop -- loop를 이용해 1~10까지 출력하는 코드 declare i number := 1; begin loop dbms_output.put_line('i: ' || i); exit when i = 10;-- 조건을 만족하면 루프를 빠져나옴 i := i + 1;-- java처럼 i++, ++i은 없음 end loop; dbms_output.put_line('loop를 빠져나옴'); end; / i: 1 i: 2 i: 3 i: 4 i: 5 i: 6 i: 7 i: 8 i: 9 i: 10 loo..
변수의 타입을 간편하게 지정하는 방법 "변수 테이블.컬럼%type" declare vid members.id%type; -- members테이블의 id 컬럼과 같은 타입으로 지정한다는 의미. vname members.name%type;-- members테이블의 name 컬럼과 같은 타입으로 지정한다는 의미. vsalary members.salary%type;-- members테이블의 salary 컬럼과 같은 타입으로 지정한다는 의미. begin select id, name, salary into vid, vname, vsalary from members where id = 3; dbms_output.put_line(vid || ' ' || vname || ' ' || vsalary); end; / 1줄의..
-- 첫번째 방법, 일반적인 구조 case(변수명) when 변수값 혹은 변수 비교 then 실행부; when 변수값 혹은 변수 비교 then 실행부; else 실행부; -- 생략가능 end case; -- 두번째 방법, 실행부에서 변수에 값을 할당하는 코드만 들어가있는 경우 활용가능한 변수 := case(변수명) when 변수값 then 할당값 -- 세미콜론 제거 when 변수값 then 할당값 -- 세미콜론 제거 else 할당값 -- 생략가능 end; -- 이땐 case 키워드를 빼준다. -- 세번째 방법, if문과 같이 수식을 이용해 구현하는 구조(Java는 case 문에서 수식을 넣는게 불가능한데 오라클은 가능) case -- 여기에서 변수를 받지 않음 when 수식 then 실행부; when 수..
declare x number := 2; result varchar2(15); begin if x = 1 then result := 'one'; elsif x = 2 then result := 'two'; elsif x = 3 then result := 'three'; else result := '그 밖의 수'; end if; dbms_output.put_line('result: ' || result); end; / result: two PL/SQL 처리가 정상적으로 완료되었습니다. declare vsabun number := '&조회할사번'; -- 조회할 사번을 입력받음 vname varchar2(12); vdeptno number; vdept varchar(20); begin select sabun,..
1-1. INSERT 쿼리문 예시 -- 변수 선언할게 없으면 declare 를 지워도 정상 작동함 begin insert into customer values(5, '웬디', '서울'); end; / PL/SQL 처리가 정상적으로 완료되었습니다. declare vno number; vname varchar2(10) := '슬기'; vaddr varchar2(10) := '부산'; begin vno := 6; insert into customer values(vno, vname, vaddr); end; / PL/SQL 처리가 정상적으로 완료되었습니다. 1-2. INSERT 쿼리문 예시, 사용자의 입력을 받아서 처리하는 것 declare vcode varchar2(10) := '&code'; -- 오른쪽의 ..
* 주의, select ~ into구문은 쿼리문의 결과가 1줄만 나오는 경우에만 사용이 가능하다. * PL/SQL 에서는 한 번에 모두를 읽어오는 기능은 없고, 한 줄 씩만 읽어오는게 가능하다. * 조회된 결과를 받아올 변수는 컬럼의 타입과 일치해야 한다. 기본예제 --바로 아래의 쿼리문의 결과에서 값을 가져오는 방법이다. select name, position, salary from company where sabun=3; NAME POSITION SALARY ------------------------ -------------------- ---------- 찬열 과장 3000 ------------------------------------------------------- declare vname..
PL(Procedural Language, 절차적 언어)/SQL이란? 오라클 DBMS에서 SQL 언어를 확장하여 사용하기 위해 만들어진 프로그래밍 언어이다. SQL 명령문만으로 처리하기에는 복잡한 자료의 저장이나 프로시저와 트리거 등을 작성하는 데 쓰인다. 각 관계형 데이터베이스마다 확장 언어들이 있는데, 이러한 확장 언어의 대표적인 예로 마이크로소프트의 마이크로소프트 SQL 서버와 SybaseASE에는 트랜잭트 SQL(Transact SQ; TSQL)이 있고 PostgreSQL에는 PL/pgSQL 마지막으로 IBM DB2는 ISO SQL의 SQL/PSM 표준을 따르는 SQL Procedural를 포함한다. PL/SQL 코드를 실행하는 위치 SQL PLUS 콘솔창, SQL DEVELOPER 둘 다 그냥 ..