CREATE VIEW PLAYER_AGE
AS (SELECT ROUND((SYSDATE-BIRTH_DATE)/365) AGE, P.* FROM PLAYER);
버리기
DROP
검색 SELECT*FROM PLAYER_AGE WHERE AGE>30;
수정하기
CREATE OR REPLACE VIEW view_name AS
SELECT ----
FROM -----
WHERE -----;
외부 유저의 테이블
유저명.테이블명
CREATE VIEW : 권한이 필요 ->관리자 계정으로 들어가서 권한을 주어야함
SQL> grant create view to C##IDEV; 실행 후 재연결 혹은 재접속
CREATE VIEW V_CUSTOMSALE
AS
SELECT TB.CUSTOMID , TB.PCODE ,SUM(TP.PRICE*TB.QUANTITY) MONEY,
RANK() OVER (PARTITION BY TB.CUSTOMID ORDER BY SUM(TP.PRICE*TB.QUANTITY)DESC) "RANK"
FROM TBL_BUY TB, TBL_PRODUCT TP
WHERE TB.PCODE = TP.PCODE
GROUP BY TB.CUSTOMID, TB.PCODE ;
-일반적인 select처럼 조회형식 모두 사용 가능
SELECT vc.*, TP.PNAME
FROM V_CUSTOMSALE vc ,TBL_PRODUCT tp
WHERE vc.PCODE=tp.PCODE AND "RANK" =1;
Declare (선언부)
Executable (실행부) -BEGIN ~ END
Exception (예외 처리부)
- Anonymous PL/SQL Block(익명블록) - 일회성
1) 익명 프로시저(일회용)
DECLARE -- 변수선언부
-- vname varchar2(40); -- 스칼라변수
-- vage number(3,0);
vname tbl_custom.name %TYPE; -- 참조변수(타입변수): 테이블명.컬럼명 %TYPE
vage tbl_custom.age %TYPE;
BEGIN --프로시저 시작(실행부)
SELECT name,age
INTO vname , vage -- 프로시저 구문: 검색결과를 프로시저 일반 변수 vname, vage 에 저장/ 홍길동의 이름,나이 저장
FROM "TBL_CUSTOM" tc
WHERE CUSTOM_ID ='hongGD'; -- 1개 행만 결과 조회되는 조건 (직접 지정)
DBMS_OUTPUT.PUT_LINE('고객이름 : ' || vname);
DBMS_OUTPUT.PUT_LINE('고객나이 : ' || vage);
EXCEPTION -- 예외(오류)처리
WHEN no_data_found THEN -- no_data_found : (지정된) 예외 이름 , 모든 예외: OTHERS
DBMS_OUTPUT.PUT_LINE('찾는 데이터가 없습니다.');
END; --끝
- Stored PL/SQL Block (저장 프로시저) -반복적
서버에 파싱해서 저장해 놓고 주기적으로 반복해서 사용할 경우 사용
서브프로그램 또는 프로그램 단위라고도 하며, 스키마를 구성하는 오브젝트로서 파싱된 후 오라클 서버 내부에 저장되거나 오라클 툴 안에 라이브러리 형태로 저장되어 있음
-저장 프로시저 생성
CREATE OR REPLACE PROCEDURE 프로시저 이름
( 매개변수이름 [IN 또는 OUT] 데이터 타입,.....) --IN: 입력매개변수(넣을것)
[IS 또는 AS] -- OUT:출력매개변수(리턴값 저장하는 변수)
프로시저 변수 선언
BEGIN
프로시저 작업 내용 SQL들....
EXCEPTION
WHEN 예외이름 THEN 처리 내용;
END ;
- 코드1 (익명에서 저장으로)
- 1번(익명)을 저장 프로시저로 변경했습니다.
-인자와 리턴을 주는 형식. 저장프로시저 정의하기
CREATE OR REPLACE PROCEDURE search_custom( -- 프로시저 이름 설정
c_id IN tbl_custom.CUSTOM_ID %TYPE -- 매개변수(인자) IN
)
IS --DECLARE없음... AS도 가능(AS=IS)
vname tbl_custom.name %TYPE; -- 지정된 테이블의 컬럼과 동일형식의 변수
vage tbl_custom.age %TYPE;
BEGIN
SELECT name,age
INTO vname , vage
FROM "TBL_CUSTOM" tc
WHERE CUSTOM_ID =c_id; -- 1개 행만 결과 조회되는 조건. 매개변수로 전달된 값으로 조건 실행
DBMS_OUTPUT.PUT_LINE('고객이름 : ' || vname);
DBMS_OUTPUT.PUT_LINE('고객나이 : ' || vage);
EXCEPTION -- 예외(오류)처리
WHEN no_data_found THEN
DBMS_OUTPUT.PUT_LINE(CHR(10)'찾는 데이터가 없습니다.');
END;
--프로시저 실행
BEGIN
SEARCH_CUSTOM('mina012');
END;
--vs에서는 됨 디비버는 안됨
EXEC SEARCH_CUSTOM('twice');
- 코드2 (출력변수 사용)
- 구매 수량이 최대인 고객의 이름, 나이 출력하는 프로시저 : max_custom
CREATE OR REPLACE PROCEDURE max_custom( -- 자바의 메소드 인자와 같은 개념/ NAME, AGE->매개변수
p_name OUT tbl_custom.NAME %TYPE, -- 출력(리턴) 변수
p_age OUT tbl_custom.AGE %TYPE
)
IS
maxval number(5);
cid tbl_custom.custom_id %TYPE;
BEGIN
SELECT max(quantity) --구매 수량 최대값 찾기
INTO maxval --조회결과를 일반 변수에 저장
FROM tbl_buy; --다음 문의 조건식으로 사용함
SELECT customid
INTO cid --조회결과를 일반 변수에 저장
FROM tbl_buy
WHERE quantity = maxval; --최대값을 가지고 고객의 아이디를 찾는구나
SELECT name,age
INTO p_name , p_age --출력 매개변수에 저장
FROM "TBL_CUSTOM" tc
WHERE CUSTOM_ID =cid; --고객의 아이디로 고객의 이름과 나이를 찾는구나
END;
-프로시저 실행: 출력 매개변수가 있는 프로시저
DECLARE
VNAME TBL_CUSTOM.NAME %TYPE;
VAGE TBL_CUSTOM.AGE %TYPE;
BEGIN
MAX_CUSTOM(VNAME,VAGE);
DBMS_OUTPUT.PUT_LINE(CHR(10));
DBMS_OUTPUT.PUT_LINE('=고객이름: ' || VNAME);
DBMS_OUTPUT.PUT_LINE('=고객나이: ' || VAGE);
END;
- 출력코드 (DBMS_OUTPUT)
- DBMS_OUTPUT 는 콘솔에 출력하는 오라클 패키지의 하나이며 PUT_LINE 함수
- 오라클 문자열에서 줄바꿈은 아스키코드값 10 :CHR(10)
- ||는 문자열 연결 연산
DBMS_OUTPUT.PUT_LINE('고객이름 : ' || vname);
DBMS_OUTPUT.PUT_LINE('고객나이 : ' || vage);
DBMS_OUTPUT.PUT_LINE(CHR(10)'찾는 데이터가 없습니다.');
- 출력코드: dbms_output.put_line('결과 : ' || vresult )
- 테이블복사 : PK, FK는 복사 안됨
IF문
전역변수 선언
private static final int key = 3;
public String encrypt(String pw){
String en_pw = "";
for(int i = 0; i<pw.length(); i++){
en_pw += (char)(pw.charAt(i) + key) 혹은 (pw.charAt(i) * key)
return en_pw;}