티스토리

프로그램잉
검색하기

블로그 홈

프로그램잉

pro-gramm-ing.tistory.com/m

밍래그로프 님의 블로그입니다.

구독자
5
방명록 방문하기
공지 거의 메모장 수준에 가까운 블로그 모두보기

주요 글 목록

  • PIVOT - 행을 열로 바꾸기 통계페이지와 같은 집계가 필요한 경우 종종 로우를 칼럼으로 바꿔서 출력해야될 경우가 있다. 로우를 칼럼으로 바꾸는 방법을 3개 정도 알아보고자 한다. 1.DECODE 혹은 CASE 문을 사용하는 방법 2.WITH 절을 이용한 방법 3.PIVOT 함수를 이용하는 방법 이 글에서 사용하는 테스트 데이터는 다음과 같다. create table table_score( years varchar(100) ,game_name varchar(100) ,play_level varchar(100) ,rate int ); insert into table_score values ('2023','ez2on','lv14',92); insert into table_score values ('2023','ez2on','lv15',8.. 공감수 0 댓글수 1 2023. 11. 14.
  • CONNECT BY 사용하기 CONNECT BY 란 계층형 쿼리를 조회하기 위한 쿼리이다. 다음과 같이 회사 조직도가 있다고 해보자. 조직에는 각 계층이 있다. 각 계층을 A레벨, B레벨 ,C 레벨이라 하겠다. 각 레벨들의 정보들을 기록한 테이블이 다음과 같다고 해보자. 각 row 에는 상위 부서 번호와 해당 부서의 번호가 있고, 부서번호가 만약에 시퀸스값으로 insert 가 된다고 할 때 만약에 조회를 할 때 A레벨부터 B레벨, C레벨 순으로 나오게끔 하고 싶다면 어떻게 해야될까? 단순히 order by 를 하면 레벨별로 나온다고 무조건 장담할 수 없다. 이럴때 사용하는게 계층형 쿼리이다. 1. 계층형 쿼리 오라클에서 계층형 쿼리의 예약어는 START WITH 이다. START WITH - 계층의 루트노드(처음행)로 사용될 행을 .. 공감수 0 댓글수 0 2023. 11. 7.
  • 서브 프로그램 4 - 트리거 (TRIGGER) 트리거 콜백 메소드라 생각하면 된다. 사용자가 지정해서 제어할 수 없다. 특정 이벤트가 일어날때 자동적으로 실행된다. 너무 많으면 퍼포먼스 저하 우려가 있다. 트리거에 관한 기능을 수행할때 생성 CREATE TRIGGER 수정 ALTER TRIGGER 삭제 DROP TRIGGER 의 권한이 다 필요한다. 트리거의 몸체에는 TCL 사용은 불가능하다. B>트리거의 구조 실행 시점 실행시키는 이벤트 트리거의 BODY 로 구성되어 있다. C> 종류 DML과 관련된 트리거 시스템과 관련된 트리거가 있다. D>사용 E>예시 공감수 0 댓글수 0 2021. 1. 21.
  • 서브 프로그램 3 - 패키지 (ORACLE PACKAGE) A>패키지 1.패키지란 연관성이 높은 함수나 프로시저를 묶어놓은 그룹 PL/SQL 이나 복합 유형의 데이터 함수나 프로시져 등이 패키지라는 그룹으로 묶여있다. 2.구성 선언부와 몸체부로 구성된다. 2-1 . 선언부 함수나 프로시져, 변수 등의 정의 선언 부분 B.사용 문형 선언부 CREATE PACKAGE 패키지 이름 IS 함수, 프로시저 ,변수 등의 선언부 END 패키지 이름; 몸체부 CREATE PACKAGE BODY 패키지 이름 IS 실제 실행문 구현부 END 패키지 이름 C> 삭제 둘다 할수도 있고 둘 중 하나만 할 수도 있다. DROP PACKAGE package_name ; DROP PACKAGE BODY package_name ; D> 예시 1) 예시1 --패키지 선언부 생성 CREATE O.. 공감수 0 댓글수 0 2021. 1. 21.
  • 서브 프로그램 - 내장함수(FUNCTION) A>선언 CREATE FUNCTION 이름 [ 파라미터 ] RETURN 데이터 타입 IS PL/SQL블록 B>수정 DROP FUNCTION 으로 삭제 ALTER FUNCTION 으로 수정 C>예시 1.예시 CREATE OR REPLACE FUNCTION s_max_sal return number IS max_sal emp.sal%TYPE; BEGIN SELECT max(sal) INTO max_sal (s_deptno emp.deptno%TYPE) FROM emp WHERE deptno = s_deptno; RETURN max_sal; --3번째 줄의 리턴타입과 같아야한다. END; / --결과 출력 SELECT s_max_sal(10) FROM dual; 2)예시2 CREATE OR REPLACE FU.. 공감수 0 댓글수 0 2021. 1. 21.
  • 서브 프로그램 - 프로시져(PROCEDURE) PL/SQL은 재사용을 못한다. 서브 프로그램은 된다. 종류는 프로시저, 함수, 패키지 ,트리거 등이다. A>서브 프로그램은 1. 이름이 지정된 PL/SQL 블록이다. 2. 최초 실행될때 한번만 컴파일 된다. 3. 데이터 베이스에 저장이 된다. 4. 다른 응용프로그램에서 호출이 가능하다. 5. 함수일 경우 리턴값이 존재할 수 있다. 6. 파라미터를 사용가능하다. B>프로시져 1.생성 문법 CREATE[OR REPLACE] PROCEDURE 프로시져 이름 IS|AS PL/SQL블록 2.파라미터 IN, OUT, INOUT 모드로 나뉘어 진다. 선언시 데이터 타입은 명시하되 크기는 명시하지 않는다. 선언부의 파라미터 = 형식 파라미터 실행시 파라미터 = 실행 파라미터 선언시 default 사용해 기본값 부여 .. 공감수 0 댓글수 0 2021. 1. 21.
  • 예외와 예외처리 A>예외 오라클 예외와 사용자 정의 예외가 있다. 1.오라클 예외 오라클이 정의한 상황에서 자동 발생 예외명이 정해진것과 없는것이 있다. 2. 사용자 정의 예외 사용자가 예외처리를 정의 예외처리부에서 RAISE 문을 통해 명시적으로 예외를 발생시킨다. B>종류 ACCESS_INTO_NULL CASE_NOT_FOUND COLLECTION_IS_NULL CURSOR_ALREADY_OPEN :이미 커서가 열려있음 JUP_VAL_ON_INDEX: 인덱스 중복 INVALID_NUBER:문자 to 숫자 실패 등 C> 사용 주의점 : 예외 종류가 중복되면 안된다. 문형1. DECLARE BEGIN 실행문 실행문 EXCETPION WHEN 오류 THEN 실행 내용 END; 문형2. 사용자 정의 오류 DECLARE 예외.. 공감수 0 댓글수 0 2021. 1. 21.
  • PL/SQL -4 CURSOR A> CURSOR SQL에서 커서란 SQL문을 실행, 처리를 위한 메모리공간에서 특정한 레코드에 위치한 포인터와 비슷한 개념 커서의 위치를 변경해서 특정 실행 결과를 가지고 온다. 커서의 서브쿼리는 select문만 올 수가 있다. B> 종류 묵시적/ 명시적 1.묵시적 커서 오라클 서버가 만듦 SQL% 이 있으면 묵시적 커서 하나만 선언 가능 1-1.문형 SQL%속성 1-2. 종류 1)SQL%ROWCOUNT 해당 커서에서 실행한 총 행의 개수 2)SQL%FOUND 커서 안에 데이터가 있느냐 없느냐 TURE, FALSE 리턴 3)SQL%ISOPEN 메모리에 OPEN되어 있으면 true 아니면 false 4)예시 DECLARE v_deptno number := &dno; BEGIN delete emp wher.. 공감수 0 댓글수 0 2021. 1. 21.
  • PL/SQL 3- 복합 변수, 제어문 레코드 타입과 테이블 타입이 있다. A>레코드 타입 1.정의와 선언 TYPE 타입 이름 IS RECORD( 필드 선언 ); 식별자 TYPE_NAME 2. 예시 이때는 %TYPE 은 되어도 %ROWTYPE은 안된다. 예시2. 입력받고 출력 B>테이블 타입 변수 =컬렉션 이라고도 한다. 배열이 여러개 중첩된 것 같은 테이블 모양 키와 값으로 구성되어 있다. 0.종류 1.키 UNIQUE 속성이며 숫자일 경우 :BINARY INTEGER 또는 PLS_INTEGER 문자일 경우 :VARCHAR2 2.값 스칼라 데이터 유형도 가능 레코드 타입도 가능 3.정의와 선언 예시1. 사번이 7499 사람 이름 인덱스 0에 저장하고 출력 DECLARE t_name VARCHAR2(20); TYPE tbl_emp_name IS.. 공감수 0 댓글수 0 2021. 1. 20.
  • PL/SQL -2 스칼라 변수 A>렉시칼 : 문자 집합 PL/ SQL 렉시칼: pl/sql 안에서 사용되는 문자 집합들 ex)식별자, 구분자 ,리터럴 등.... 1.따옴표가 쓰일때 식별자의 대소문자 구분이 필요할 때, 공백 같은 문자가 포함될 경우 예약어 사용시 B>중첩된 PL/SQL 블록 작성하기 예시1. 변수의 스코프 DECLARE v_first VARCHAR2(5) := 'Outer'; --자바로 따지면 전역변수 BEGIN DECLARE v_second VARCHAR2(5) := 'Inner'; --자바로 따지면 지역변수 BEGIN DBMS_OUTPUT.PUT_LINE(v_first); DBMS_OUTPUT.PUT_LINE(v_second); END ; DBMS_OUTPUT.PUT_LINE(v_first); DBMS_OUTPUT.. 공감수 0 댓글수 0 2021. 1. 20.
  • PL/SQL -1 기본적으로 블록 구조이다. 중첩 블록도 가능. 포함된 블록을 nested block 이라 한다. 블록 내에서 sql 문을 사용하여 데이터를 검새하고 수정 A>블록의 유형 : 익명블록 :일회성일때 주로 사용 저장된 블록: 서브 프로그램 또는 프로그램 단위 라고도 한다. B>기본 구성 : 선언부(DECLARE) : 변수나 상수 선언 실행부(BEGIN) : 제어문, 반복문 등 실행 예외처리부(EXCEPTION) C>문법 규칙 : 1.END 이외의 예약어 뒤에는 세미콜론을 안 붙임 , 그 외에는 붙임 2. 기본적으로 문장 결과 출력을 안해줌 결과를 화면에 출력하고 싶으면 SET SERVEROUTPUT ON 3. 리터럴(문자,날짜)은 단일인용부호(‘)로 표시, 널 값은 NULL 상수로 기술 4. 예약어는 식별자명.. 공감수 0 댓글수 0 2021. 1. 20.
  • 복수행 함수 - 연산 함수와 그룹함수 연산함수 COUNT SUM AVG MAX MIN ROLLUP :소계값 CUBE :소계 및 전체 총계 GROUPING: 그룹화 여부 - 결과는 1혹 0 GROUPINGSET: 한번의 질의로 여러개 그룹화 그룹화 A.GROUP BY GOURP BY는 열의 행화 라고 생각하면 쉽다. 테이블이 있으면 왼쪽으로 90도 돌려보자 이때 할 칼럼이 이번에는 행이 되지 않았나? 이 행이 GROUP 화 된 결과라고 생각하면 쉽다. !주의점 1. SELECT 절에서 사용된 그룹함수 이외의 컬럼이나 표현식은 GROUP BY 필수 --not a GROUP BY expression 그룹함수 안쓰면 안해도 된다. 2. GROUP BY 절에 사용된 칼럼은 SELECT 절에 사용되지 않아도 된다. --하지만 결과는 SELECT 되지 .. 공감수 0 댓글수 0 2021. 1. 15.
  • 일반 함수(nvl, nvl2, decode) NVL(컬럼, 치환 값) :값이 null일 경우 치환값으로 출력 NVL2(col1,col2,col3) :3항 연산자 역할 col1이 null이 아니면 col2, null이면 col3 DECODE(A,B,C,D): IF문과 비슷 A와 B가 같으면 C출력 아니면 D출력 DECODE(A,B,1,C,2,3) : A와 B가 같으면 1 아니면 C (else if역할) A와 C가 같으면 2 다르면 3 중첩 DECODE도 가능 공감수 0 댓글수 0 2021. 1. 15.
  • 형과 형 변환 함수 CHAR(n) : 고정길이 문자 저장 최대값은 2000바이트 CHAR2(n) :가변 길이 문자 저장 최대값 4000바이트 number(p,s) : p는 전체 자리수 1~38 자리까지 s는 소수점 이하 자리수 DATE :7바이트 LONG : 가변 길이 문자 저장, 최대 2기가 CLOB : 가변 길이 문자 저장, 최대 4기가 (Character Large Object) BLOB: 가변 길이 바이너리 데이터 , 최대 4기가 RAW(n) : 원시 이진 데이터 , 최대 2000바이트 LONG RAW(n) : 원시 2진 데이터, 최대 4기가 BFILE: 외부 파일 저장 데이터, 최대 4기가 형변환 묵시적과 명시적이 존재 묵시적 = 자동 형 변환의 경우 예시 숫자 + 문자 = 숫자 !단 숫자로 변환 가능한 문자만 자.. 공감수 0 댓글수 0 2021. 1. 15.
  • 숫자 함수, 날짜 함수 숫자 ROUND(숫자,원하는 자리수) :반올림 (11.254 ,2) 면 11.26 (11.254,-1) 이면 11 TRUNC: 버림 MOD: 나머지 CEIL : 근접한 큰 정수 FLOOR: 근접한 작은 정수 POWER : MATH.pow(n,2) 날짜함수 날짜 +- 숫자 = 날짜 날짜 +- 날자 = 숫자 날짜에선 미래일수록 큰 날짜 취급 SYSDATE :현재 시간 MONTHS_BETWEEN(날짜,날짜) : 두 날짜 사이의 개월수 같은 달이면 소수점단위 나옴 윤년 구분은 못함 ADD_MONTHS(날짜,더할 개월): 월 더하기 NEXT_DAY(기준 날짜,'돌아오는 가장 최근 요일 날짜' ) ex)NEXT_DAY(SYSDATE,'MON') LAST_DAY() :주어진 날짜가 속한 달의 가장 마지막 날 ROUN.. 공감수 0 댓글수 0 2021. 1. 15.
  • 문자와 관련된 함수 INITCAP :첫글자 대문자로 LOWER :전부 소문자 UPPER: 전부 대문자 LENGTH : 글자 길이 반환 ex)LENGTH('ab') 결과: 2 LENGTHB : 글자 길이의 바이트 값 출력 ex) LENGTHB('한글') 결과 :4 CONCAT : concat , ||과 동일 SUBSTR (문자,시작 인덱스, 추출할 글자수) ex) SUBSTR('ABC',1,2) 결과: AB 주의!! 인덱스가 1부터 시작 SUBSTRB : 문자에서 특정 바이트 추출 ex) SUBSTR('한글',1,2) 결과: 한 INSTR (문자열, 찾을 문자,시작위치 [,몇번째인지 여부]): 주어진 문자열에서 찾을 문자 인덱스 반환 추출할 글자수를 음수로 나오면 오른쪽에서 왼쪽으로 탐색 추출할 글자수 못 찾으면 0 나옴 I.. 공감수 0 댓글수 0 2021. 1. 14.
  • CASE WHEN 문 table 에서 idx, CASE에 해당하는 값 alias , name 을 선택 CASE 기본 CASE 조건 WHEN 결과1 THEN 출력1 WHEN 결과 THEN 출력2 ELSE 출력3 END 칼럼명 1. SELECT idx, CASE WHEN 조건문 THEN 반환값 WHEN 조건문 THEN 반환값 ELSE 반환값 END AS alias ,name FROM table; 예시) SELECT idx, (CASE WHEN name =1 THEN '첫번째 값' WHEN name =2 THEN '두번째 값' ELSE '쓰레기 값' END )AS '값' ,condition FROM table 2. 혹은 케이스 문에서 CASE 조건칼럼 WHEN 조건값 THEN 반환값 WHEN 조건값 THEN 반환값 ELSE 반환값.. 공감수 0 댓글수 0 2021. 1. 14.
  • 오라클 기본 데이터 테이블 = entity 행 = row = record = tuple 열 = colum = attribute(=속성) WHERE 절에서는 대소문자를 구별한다 WHERE 절 날짜 검색 예시 SELECT first_name name from employees WHERE hire_date > '03/12/12'; 같은 날짜 포맷 문자열 혹은 WHERE 날짜칼럼 >= TO_DATE('20210114'); TO_DATE 는 포맷설정도 가능하다 TO_DATE('20210114','yyyy-mm-dd'); ORDER BY 에서 날짜는 최근 날짜가 더 크다. BETWEEN a AND b : a이상 b 이하 >= AND 공감수 0 댓글수 0 2021. 1. 14.
    문의안내
    • 티스토리
    • 로그인
    • 고객센터

    티스토리는 카카오에서 사랑을 담아 만듭니다.

    © Kakao Corp.