/
CREATE OR REPLACE PROCEDURE NEW_JOB_PROC
  (
    --param
    P_JOB_ID IN JOBS.JOB_ID%TYPE,
    P_JOB_TITLE IN JOBS.JOB_TITLE%TYPE,
    P_MIN_SALARY IN JOBS.MIN_SALARY%TYPE,
    P_MAX_SALARY IN JOBS.MAX_SALARY%TYPE
  )
is
BEGIN
  MERGE INTO JOBS J
  USING (SELECT COUNT(*) CNT FROM JOBS WHERE JOB_ID =P_JOB_ID) I
  on (i.cnt =1)
  
  WHEN MATCHED THEN
      UPDATE SET 
        J.JOB_TITLE = P_JOB_TITLE,
        J.MIN_SALARY = P_MIN_SALARY,
        J.MAX_SALARY = P_MAX_SALARY
      WHERE J.JOB_ID = P_JOB_ID
      
  when not matched then    
    INSERT
    (j.JOB_ID, j.JOB_TITLE, j.MIN_SALARY, j.MAX_SALARY)
    VALUES
    (P_JOB_ID, P_JOB_TITLE, P_MIN_SALARY, P_MAX_SALARY);
    
  commit;
END;
/
show err;

/
EXEC NEW_JOB_PROC('sample','sample',2000,2000);
select * from jobs where job_id = 'sample';

'DB' 카테고리의 다른 글

[pl/sql] procedure return  (0) 2020.10.20
[pl/sql]procedure in out param  (0) 2020.10.20
[pl/sql] procedure default value setting  (0) 2020.10.20
[pl/sql] insert or update procedure  (0) 2020.10.20
[mysql] 게시판 조회수 업데이트 쿼리  (0) 2019.05.28


--procedure return 
--return is stop procedure like exit
CREATE OR REPLACE PROCEDURE NEW_JOB_PROC
(
  PJOBID JOBS.JOB_ID%TYPE,
  PJOBTITLE JOBS.JOB_TITLE%TYPE,
  pminsal JOBS.MIN_SALARY%TYPE,
  pmaxsal JOBS.max_salary%TYPE
)
IS
  VN_CNT NUMBER := 0;
  VN_CUR_DATE DATE;
BEGIN
  --급여가 1000보다 작으면 리턴
  IF PMINSAL < 1000 THEN
    DBMS_OUTPUT.PUT_LINE('최소 급여는 1000 이상이어야 합니다');
  
  END IF;
  
  return;
end;
/
--show err
show err;

exec NEW_JOB_PROC('sample','sample2',900,2000);

 

 

 

--log

--Procedure NEW_JOB_PROC이(가) 컴파일되었습니다.

--PL/SQL 프로시저가 성공적으로 완료되었습니다.

--최소 급여는 1000 이상이어야 합니다

'DB' 카테고리의 다른 글

[pl/sql] procedure merge into  (0) 2020.10.20
[pl/sql]procedure in out param  (0) 2020.10.20
[pl/sql] procedure default value setting  (0) 2020.10.20
[pl/sql] insert or update procedure  (0) 2020.10.20
[mysql] 게시판 조회수 업데이트 쿼리  (0) 2019.05.28

/
--out, in out
--procedure 생성시 파라메터는 default in 
--out param 생성시 out 명시
CREATE OR REPLACE PROCEDURE NEW_JOB_PROC
  (
    --param
    P_JOB_ID IN JOBS.JOB_ID%TYPE,
    P_JOB_TITLE IN JOBS.JOB_TITLE%TYPE,
    P_MIN_SALARY IN JOBS.MIN_SALARY%TYPE,
    P_MAX_SALARY IN JOBS.MAX_SALARY%TYPE,
    p_return_time out date
  )
IS
  VN_CNT NUMBER := 0;
  vn_cur_date date := sysdate;
BEGIN
  --동일 job id check
  SELECT COUNT(*)
  into vn_cnt
  FROM JOBS
  WHERE JOB_ID = P_JOB_ID;
  
  --없을시 insert
  INSERT INTO JOBS
  (JOB_ID, JOB_TITLE, MIN_SALARY, MAX_SALARY)
  VALUES
  (p_job_id, p_job_title, p_min_salary, p_max_salary);
  --있을시 update
  UPDATE JOBS 
  SET JOB_TITLE = P_JOB_TITLE,
    MIN_SALARY = P_MIN_SALARY,
    MAX_SALARY = P_MAX_SALARY
  where job_id = p_job_id;
  
  --return value setting
  p_return_time := sysdate;  
  commit;
END;
/
--err check
SHOW ERR;
/

--실행
--EXEC NEW_JOB_PROC('SAMPLE1','sample2',2000,4000,NULL);
--out param 사용을 위해 익명 블록 실행 필요
/
  SET SERVEROUTPUT ON;

/
DECLARE
  VN_NOWTIME DATE;
BEGIN 
  NEW_JOB_PROC('SAMPLE1','sample2',2000,4000,VN_NOWTIME);
  dbms_output.put_line(vn_nowtime);
end;

'DB' 카테고리의 다른 글

[pl/sql] procedure merge into  (0) 2020.10.20
[pl/sql] procedure return  (0) 2020.10.20
[pl/sql] procedure default value setting  (0) 2020.10.20
[pl/sql] insert or update procedure  (0) 2020.10.20
[mysql] 게시판 조회수 업데이트 쿼리  (0) 2019.05.28

--default value procedure
CREATE OR REPLACE PROCEDURE JOB_PROC
(
  --param
  P_JOBID IN JOBS.JOB_ID%TYPE,
  P_JOB_TITLE IN JOBS.JOB_TITLE%TYPE,
  P_MIN_SAL IN JOBS.MIN_SALARY%TYPE := 10,
  P_max_sal IN JOBS.max_salary%TYPE := 100
)
IS 
  VN_CNT NUMBER:= 0;
BEGIN
  --동일한 job id가 있는지 확인
  SELECT count(*)
  into vn_cnt
  FROM JOBS
  WHERE JOB_ID = P_JOBID;
  
  --없으면 insert
  IF VN_CNT = 0 THEN
    INSERT INTO JOBS
    ( 
      JOB_ID,
      JOB_TITLE,
      MIN_SALARY,
      MAX_SALARY
    )
    VALUES
    (
      P_JOBID,
      P_JOB_TITLE,
      P_MIN_SAL,
      P_MAX_SAL
    );
    
  --있으면 update
  ELSE
    UPDATE JOBS
    SET JOB_TITLE = P_JOB_TITLE
    ,MIN_salary = P_MIN_SAL
    ,max_salary = p_max_sal
    WHERE JOB_ID = P_JOBID;
  end if;
  
  commit;
END;
/
--오류 확인
SHOW ERR;

EXEC JOB_PROC('SM_JOB1','Sample JOB1');
EXEC JOB_PROC('SM_JOB1','Sample JOB1',2000);

/
SELECT * FROM JOBS
where job_id = 'SM_JOB1';

'DB' 카테고리의 다른 글

[pl/sql] procedure return  (0) 2020.10.20
[pl/sql]procedure in out param  (0) 2020.10.20
[pl/sql] insert or update procedure  (0) 2020.10.20
[mysql] 게시판 조회수 업데이트 쿼리  (0) 2019.05.28
[MySql] mysql mybatis 페이지네이션 쿼리  (0) 2019.05.21

CREATE OR REPLACE PROCEDURE JOB_PROC ( --param P_JOBID IN JOBS.JOB_ID%TYPE, P_JOB_TITLE IN JOBS.JOB_TITLE%TYPE, P_MIN_SAL IN JOBS.MIN_SALARY%TYPE, P_max_sal IN JOBS.max_salary%TYPE ) IS VN_CNT NUMBER:= 0; BEGIN --동일한 job id가 있는지 확인 SELECT count(*) into vn_cnt FROM JOBS WHERE JOB_ID = P_JOBID; --없으면 insert IF VN_CNT = 0 THEN INSERT INTO JOBS ( JOB_ID, JOB_TITLE, MIN_SALARY, MAX_SALARY ) VALUES ( P_JOBID, P_JOB_TITLE, P_MIN_SAL, P_MAX_SAL ); --있으면 update ELSE UPDATE JOBS SET JOB_TITLE = P_JOB_TITLE ,MIN_salary = P_MIN_SAL ,max_salary = p_max_sal WHERE JOB_ID = P_JOBID; end if; commit; END; / SHOW ERR; -- pl/sql 실행 EXEC JOB_PROC('SM_JOB1','Sample JOB1',4000,8000); / --실행 결과 조회 SELECT * FROM JOBS where job_id = 'SM_JOB1';

---plsql
CREATE OR REPLACE PROCEDURE JOB_PROC
(
  --param
  P_JOBID IN JOBS.JOB_ID%TYPE,
  P_JOB_TITLE IN JOBS.JOB_TITLE%TYPE,
  P_MIN_SAL IN JOBS.MIN_SALARY%TYPE,
  P_max_sal IN JOBS.max_salary%TYPE
)
IS 
  VN_CNT NUMBER:= 0;
BEGIN
  --동일한 job id가 있는지 확인
  SELECT count(*)
  into vn_cnt
  FROM JOBS
  WHERE JOB_ID = P_JOBID;
  
  --없으면 insert
  IF VN_CNT = 0 THEN
    INSERT INTO JOBS
    (
      JOB_ID,
      JOB_TITLE,
      MIN_SALARY,
      MAX_SALARY
    )
    VALUES
    (
      P_JOBID,
      P_JOB_TITLE,
      P_MIN_SAL,
      P_MAX_SAL
    );
    
  --있으면 update
  ELSE
    UPDATE JOBS
    SET JOB_TITLE = P_JOB_TITLE
    ,MIN_salary = P_MIN_SAL
    ,max_salary = p_max_sal
    WHERE JOB_ID = P_JOBID;
  end if;
  
  commit;
END;
/
SHOW ERR;


EXEC JOB_PROC('SM_JOB1','Sample JOB1',4000,8000);
/
SELECT * FROM JOBS
where job_id = 'SM_JOB1';

exec job_proc(p_jobid =>'SM_JOB1', p_job_title => 'Sample JOB1', p_min_sal=> 5000, p_max_sal => 10000);

/

         UPDATE BOARD_LIST
         SET
            HIT = IFNULL(HIT, 0) + 1
         WHERE
            ROWINDEX= #{rowindex}

게시글을 클릭했을때 해당 글의 조회수를 1증가 시켜주는 쿼리

'DB' 카테고리의 다른 글

[pl/sql] procedure default value setting  (0) 2020.10.20
[pl/sql] insert or update procedure  (0) 2020.10.20
[MySql] mysql mybatis 페이지네이션 쿼리  (0) 2019.05.21
[MySql] mysql 문자열 합치기  (0) 2019.05.21
[MySql] mysql 주석 단축키  (0) 2019.01.23

oracle 페이지 네이션 쿼리

		SELECT
		*
		FROM
			(SELECT ROWNUM rnum, A.* FROM 
			(SELECT * FROM TABLE_NAME
			ORDER BY table_column DESC) A
			WHERE ROWNUM <![CDATA[<]]>= #{endRowNum })
		WHERE rnum <![CDATA[>]]>= #{startRowNum }

rownum을 이용한 페이지네이션 쿼리였지만

myslq에서는 row넘을 쓸수없었기에 새로운 쿼리를 작성

 

 

		SELECT
		  A.*
		FROM 
		(
			SELECT * FROM tableName 
			<if test="searchKeyword != null and searchKeyword != ''">
		        <choose>
		            <when test="searchCondition == 1">
						WHERE title LIKE CONCAT('%',#{searchKeyword},'%')
					</when>
				</choose>
			</if>
		) A
		order by rowindex DESC
		LIMIT #{startRowNum}, 10

limit을 이용해서 페이지 네이션 쿼리작성

oracle에서 '%'|| '문자열' ||'%' 이렇게 문자열을 결합했는데

mysql에서는 안먹혀서 찾아보니

CONCAT('%',#{searchKeyword},'%')

  concat 이라는 함수를 이용해야 하더라..

 

 

ctrl + / 가 맞지만 마우스키보드의 / 입니다 ?! 

주석과 주석해제 모두 ctrl + /(마우스 키보드) 입니다.





주석 처리된 모습입니다



각 서브쿼리마다 alias 를 달지 않아 생기는 에러입니다.



[에러]


select * from (select * from table);


 


[수정]


select * from (select * from table) t ;



'DB' 카테고리의 다른 글

[mysql] 게시판 조회수 업데이트 쿼리  (0) 2019.05.28
[MySql] mysql mybatis 페이지네이션 쿼리  (0) 2019.05.21
[MySql] mysql 문자열 합치기  (0) 2019.05.21
[MySql] mysql 주석 단축키  (0) 2019.01.23
mysql,maria DB 널처리 null  (0) 2018.11.24

+ Recent posts