레이블이 PL/SQL인 게시물을 표시합니다. 모든 게시물 표시
레이블이 PL/SQL인 게시물을 표시합니다. 모든 게시물 표시

2021년 12월 25일 토요일

PL/SQL 커서, Where Current Of, PLSQL Cursor, PK, ROWID, 오라클 PLSQL에서 커서다루기, 자바학원, 자바교육, 오라클학원, JAVA학원

 

PL/SQL 커서, Where Current Of, PLSQL Cursor, PK, ROWID, 오라클 PLSQL에서 커서다루기, 자바학원, 자바교육, 오라클학원, JAVA학원


http://ojc.asia/bbs/board.php?bo_table=LecSQLnPlSql&wr_id=710 


PL/SQL 커서, Where Current Of, PLSQL Cursor, PK, ROWID, 오라클 PLSQL에서 커서다루기

PL/SQL 커서, Where Current Of, PLSQL Cursor, PK, ROWID, 오라클 PLSQL에서 커서다루기오라클 PL/SQLWhere Current Of Cursor강의 : 이종철WHERE CURRENT OF 커서ROWID, PK 컬럼을 이용하지 않고 현재 커서가 참조하는 행을 갱

ojc.asia

https://www.youtube.com/watch?v=HKy8Nk6nwQ0&list=PLxU-iZCqT52CfP98Y4gCDKIm52tKvgy36&index=17 

https://www.youtube.com/watch?v=8hc030THr8w&list=PLxU-iZCqT52CfP98Y4gCDKIm52tKvgy36&index=16 

https://www.youtube.com/watch?v=RMJTLEHE9vY&list=PLxU-iZCqT52CfP98Y4gCDKIm52tKvgy36&index=14 

오라클 PL/SQL


Where Current Of Cursor



강의 : 이종철



WHERE CURRENT OF 커서


  • ROWID, PK 컬럼을 이용하지 않고 현재 커서가 참조하는 행을 갱신하고 삭제하는 방법을 제공 합니다. 코드를 조금 줄여주는 이점외에 별 이점이 없으며, rowid를 이용하여 실무에서 많이 사용 합니다.
  • SELECT FOR UPDATE로 읽어 들인 행은 Exclusive Lock을 거니 조심해야 한다. 해당 테이블에 대해 다른 세션에서 변경하지 않은 편안한 시간에 작업을 하는 것이 좋습니다.


[실습]

사원 테이블에서 10번 부서 사원들을 읽어 급여(SAL) 2000 보다 크면 급여에 10을 더하고 작으면 20을 더하세요


-- PK를 이용한 방법

DECLARE

    CURSOR  c_emp  IS SELECT empno, ename, sal FROM emp WHERE DEPTNO = 10;

BEGIN

      FOR  emp_rec  IN  c_emp  LOOP

          DBMS_OUTPUT.PUT_LINE(emp_rec.ename || ',' || emp_rec.sal);

          IF  emp_rec.sal < 2000  THEN

                UPDATE emp  SET sal = sal + 20 

                where  empno = emp_rec.empno;

         ELSE

               UPDATE emp  SET sal = sal + 10

               where  empno = emp_rec.empno;

         END IF;

     END LOOP;

END;

/


CLARK,2450

MILLER,1300


select ename, sal from emp where deptno = 10;


CLARK 2460

MILLER 1320


rollback;


-- rowid를 이용한 방법

DECLARE

    CURSOR  c_emp  IS SELECT rowid, empno, ename, sal FROM emp WHERE DEPTNO = 10;

BEGIN

      FOR  emp_rec  IN  c_emp  LOOP

          DBMS_OUTPUT.PUT_LINE(emp_rec.ename || ',' || emp_rec.sal);

          IF  emp_rec.sal < 2000  THEN

                UPDATE emp  SET sal = sal + 20 

                where  rowid = emp_rec.rowid;

         ELSE

               UPDATE emp  SET sal = sal + 10

               where  rowid = emp_rec.rowid;

         END IF;

     END LOOP;

END;

/


-- WHERE CURRENT OF 커서를 이용한 방법

DECLARE

    CURSOR  c_emp  IS SELECT ename, sal FROM emp WHERE DEPTNO = 10 FOR UPDATE;

BEGIN

      FOR  emp_rec  IN  c_emp  LOOP

          DBMS_OUTPUT.PUT_LINE(emp_rec.ename || ',' || emp_rec.sal);

          IF  emp_rec.sal < 2000  THEN

                UPDATE emp  SET sal = sal + 20;

                WHERE CURRENT OF c_emp;

         ELSE

               UPDATE emp  SET sal = sal + 10

               WHERE CURRENT OF c_emp;

         END IF;

     END LOOP;

END;

/






#PL/SQL, #WhereCurrentOf,#PLSQL, #Cursor, #오라클커서, #오라클CURSOR, #오라클교육, #오라클학원, #오라클동영상, #SQL학원, #SQL교육, PL/SQL, WhereCurrentOf,PLSQL, Cursor, 오라클커서, 오라클CURSOR, 오라클교육, 오라클학원, 오라클동영상, SQL학원, SQL교육,  

2021년 12월 24일 금요일

PL/SQL에서 SQL, SELECT 사용, SELECT 예외처리, too_many_rows , no_data_found, 오라클PLSQL동영상, PLSQL교육, 오라클교육, 자바교육, ORACLE교육

 









PL/SQL에서 SQL, SELECT 사용, SELECT 예외처리, too_many_rows , no_data_found, 오라클PLSQL동영상, 오라클교육, 자바학원, 오라클학원


오라클 PL/SQL



SELECT 사용하기

SELECT 예외처리



강의 : 이종철




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)


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)

데이터가 한건도 없습니다.



#PL/SQL, #SELECT, #SELECT예외처리, #too_many_rows , #no_data_found, #PLSQL동영상, #오라클교육, #자바학원, #오라클학원, #자바교육, PL/SQL, SELECT, SELECT예외처리, too_many_rows , no_data_found, PLSQL동영상, 오라클교육, 자바학원, 오라클학원, 자바교육, 




PL/SQL %TYPE, %ROWTYPE, 동적타입, DECLARE, CREATE로 프로시저 만들기, 자바학원, 오라클학원, 자바교육, 오라클교육, 오라클동영상, JAVA동영상

 










PL/SQL %TYPE, %ROWTYPE, 동적타입, DECLARE, CREATE로 프로시저 만들기




오라클 PL/SQL



%TYPE

%ROWTYPE


강의 : 이종철



%TYPE 속성


  • 실무에서 테이블의 모든 컬럼에 대해 데이터 타입 및 길이를 정확히 알고 있을 수는 없고, 가끔 칼럼 사이즈는 변하기도 한다. 이 경우 %TYPE 속성을 사용한다면 동적으로 대처할 수 있다. 
  • 변수의 데이터 타입을 어떤 테이블의 어떤 칼럼과 같이 하라는 의미 또는 이전에 정의한 다른 변수와 타입을 같이하라는 의미를 지닌다.


DECLARE

v_ename    emp.ename%TYPE;

v_sal        emp.sal%TYPE;

tot_sal       v_sal%TYPE;

 



SET SERVEROUTPUT ON;

DECLARE
  NAME  EMP.ENAME%TYPE;
BEGIN
  SELECT ENAME INTO NAME
  FROM   EMP
  WHERE  EMPNO = 7499;
  
  DBMS_OUTPUT.PUT_LINE('7369 ename : ' || NAME);  
END;
/




%ROWTYPE 속성


  • SELECT LIST에서 전체 컬럼을 선택해서 변수에서 받을 때(SELECT * ) 유용하게 이용된다.
  • 어떤 테이블의 ROW(로우, 행, 레코드)와 타입을 같이 하라는 속성이다.
  • 테이블의 칼럼에 대해 잘 모르는 경우,  칼럼의 속성들이 자주 변하는 경우에 유용하다.



SQL> edit ojc10


SET SERVEROUTPUT ON

CREATE OR REPLACE PROCEDURE ojc10(p_empno IN NUMBER) 

IS

          emp_record   emp%ROWTYPE

BEGIN

          SELECT *

          INTO emp_record

          FROM emp

          WHERE empno = p_empno ;

         

        DBMS_OUTPUT.PUT_LINE(emp_record.empno || ',' || emp_record.ename || ',' || emp_record.sal || ',' || emp_record.deptno);

END;

/


SQL> @ojc10

프로시저가 생성되었습니다.


SQL> exec ojc10(7369)

7369,SMITH,4500,20





SELECT문의 사용


  • SELECT문의 종료는 세미콜론(;)으로 표시한다.
  • SELECT절의 칼럼목록과 INTO절의 칼럼목록은 개수 및 데이터 타입이 동일해야 한다.
  • SELECT * 인 경우 %ROWTYPE을 사용하면 좀 더 효율적이다.
  • INTO절은 필수이며 BEGIN~END 사이에서 사용되는 SELECT는 반드시 한 건만 SELECT 되어야 한다. 한 건도 SELECT 되지 않는다면 ORA-01403(NO_DATA_FOUND) 오류가 발생하고 여러 건 SELECT 된다면 ORA-01422(TOO_MANY_ROWS) 오류가 발생한다.



#PL/SQL, #%TYPE, #%ROWTYPE, #동적타입, #DECLARE, #CREATE, #프로시저, #오라클교육, #자바교육, #오라클학원, #자바학원, #ORACLE교육, #ORACLE동영상, PL/SQL, %TYPE, %ROWTYPE, 동적타입, DECLARE, CREATE, 프로시저, 오라클교육, 자바교육, 오라클학원, 자바학원, ORACLE교육, ORACLE동영상, 
 


(C#교육동영상)C# ADO.NET 실습 ODP.NET/ODAC 설치 오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원

  (C#교육동영상)C# ADO.NET 실습  ODP.NET/ODAC 설치  오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원 https://www.youtube.com/watch?v=qIPU85yAlzc&list=PLxU-i...