레이블이 참조커서인 게시물을 표시합니다. 모든 게시물 표시
레이블이 참조커서인 게시물을 표시합니다. 모든 게시물 표시

2022년 1월 8일 토요일

오라클PLSQL DBMS_SQL 참조커서(REFCURSOR) 실습, 동적SQL,TO_REFCURSOR,오라클교육,SQL교육,JAVA교육,오라클학원,SQL학원,SQL동영상

 오라클PLSQL DBMS_SQL 참조커서(REFCURSOR) 실습, 동적SQL,TO_REFCURSOR,오라클교육,SQL교육,JAVA교육,오라클학원,SQL학원,SQL동영상


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


PLSQL DBMS_SQL 참조커서(REFCURSOR) 실습, 동적SQL,TO_REFCURSOR,오라클교육,SQL교육,JAVA교육,오라클학원,SQL

PLSQL DBMS_SQL 참조커서(REFCURSOR) 실습, 동적SQL,TO_REFCURSOR,오라클교육,SQL교육,JAVA교육,오라클학원,SQL학원,SQL동영상오라클 PL/SQLDBMS_SQL일반커서를 참조커서로 변경리턴하기실습DBMS_SQL 패키지를 이용한

ojc.asia

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

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


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

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



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


DBMS_SQL 패키지를 이용한 참조커서(REF CURSOR)


  • 기본적으로 DBMS_SQL 패키지는 동적 SQL을 사용하여 DML(데이터 조작 언어) 또는 DDL(데이터 정의 언어) 문을 구문 분석, 실행, 데이터 조작할 수 있는 인터페이스를 제공한다.


  • DBMS_SQL 패키지의 PARSE 프로시저를 사용하여 SQL 구문을 파싱하며, DDL의 경우 별도의 EXECUTE 프로시저를 호출하지 않아도 된다.


  • ORACLE 11g이후 DBMS_SQL의 TO_REFCURSOR를 이용하여 일반 커서를 참조커서(REF CURSOR)로  변경할 수 있다.


  • 일반 커서는 정적이며 커서가 한번 SQL 영역을 가리키면 가리키는 곳을 변경 못한다. 하지만  참조커서(REF CURSOR)는 가능하다.


  • 일반 커서가 가리키는 데이터는 함수나 프로시저를 호출한 곳으로 리턴 할 수 없지만 참조커서(REF CURSOR)가 가리키는 데이터는 리턴하는 것이 가능하다.




[실습 : DBMS_SQL로 일반커서를 참조커서로 변환하고 리턴]

-- 이번에는 REF CURSOR를 리턴해 보자.

-- 아래처럼 함수의 리턴타입을 SYS_REFCURSOR로 하고 v_rc 변수의 타입도 SYS_REFCURSOR로 주면 된다. 

CREATE OR REPLACE FUNCTION emplist (p_deptno emp.deptno%TYPE)

        RETURN SYS_REFCURSOR

    IS

           v_sql     CLOB;

           v_cursor  PLS_INTEGER;

           v_rc      SYS_REFCURSOR;  --REF CURSOR형

           v_execute PLS_INTEGER;

       BEGIN

          v_cursor := DBMS_SQL.OPEN_CURSOR;

          v_sql :='SELECT * FROM emp WHERE deptno = :d';

 

         -- Dynamic SQL문 파싱

         DBMS_SQL.PARSE(v_cursor, v_sql, DBMS_SQL.NATIVE);

 

         -- 바인드변수 바인딩

         DBMS_SQL.BIND_VARIABLE(v_cursor, 'd', p_deptno);

 

         -- SQL문 실행

         v_execute := DBMS_SQL.EXECUTE(v_cursor);

 

         -- REF CURSOR로 변환

         v_rc := DBMS_SQL.TO_REFCURSOR(v_cursor);

 

         return v_rc;

      END;

     /


함수가 생성되었습니다.


set autoprint on

variable refcur refcursor

exec :refcur := emplist(20);


     EMPNO ENAME      JOB          MGR   HIREDATE     SAL      COMM     DEPTNO

     -----------------------------------------------------------------------------------------------------

      7782   CLARK      MANAGER    7839     81/06/09     3404.4               10

      7839   KING       PRESIDENT             81/11/17     6946.8               10

      7934   MILLER     CLERK        7782     82/01/23     2257.5               10



 

#PLSQL, #DBMS_SQL, #참조커서, #REFCURSOR, #동적SQL, #TO_REFCURSOR,#오라클교육,#SQL교육,#JAVA교육,#오라클학원,#SQL학원,#SQL동영상, PLSQL, DBMS_SQL, 참조커서, REFCURSOR, 동적SQL, TO_REFCURSOR,오라클교육,SQL교육,JAVA교육,오라클학원,SQL학원,SQL동영상,  

2022년 1월 1일 토요일

PLSQL, 동적SQL, Dynamic SQL, 커서OPEN FO에서 Dynamaic SQL사용하기, 참조커서, 오라클교육, SQL교육, 자바교육, SQL학원, 오라클학원, 자바학원

 

PLSQL, 동적SQL, Dynamic SQL, 커서OPEN FO에서 Dynamaic SQL사용하기, 참조커서, 오라클교육, SQL교육, 자바교육, SQL학원, 오라클학원, 자바학원


https://www.youtube.com/watch?v=upkNZLX6CV4&list=PLxU-iZCqT52CE6piTNJMXGGUvDvKw46_T&index=12 



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

https://youtu.be/OCv-7nsq1w0



Native Dynamic SQL

OPEN FOR, FETCH, CLOSE 



강의 : 이종철






동적SQL(Dynamic SQL)이 필요한 이유?


DDL(데이터베이스 정의 언어) 문을 실행해야 하는 프로그램을 작성할 때, 변수를 이용하여 SQL문장을 동적으로 만들어 낼때, 컴파일타임에 존재하지 않는 DB Object를 참조하는 경우(테이블의 이름을 동적으로 생성), PL/SQL블록에서 다른 프로시저등을 호출하는 경우에 사용합니다.


이번 강좌에서는 Dynamic SQL 문이 여러 행을 반환하는 SELECT 문을 나타내는 경우를 실습하는데  다음과 같이 Native  Dynamic SQL로 처리할 수 있습니다.


OPEN FOR문을 사용하여 커서 변수를 Dynamic SQL문과 연결하는데, OPEN FOR 문의 USING 절에서 동적 SQL 문의 각 자리 표시자(:)에 대한 바인드 변수를 지정합니다.


이번 강좌에서는 Native Dynamic SQL의 형태로 커서를 사용하면서 동적 SQL문을 작성해 보겠습니다.


DECLARE
  -- 참조커서 타입 정의
  TYPE EmpCurTyp  IS REF CURSOR;
  v_emp_cur       EmpCurTyp;
  v_emp_record    emp%ROWTYPE;
  v_sql_text      VARCHAR2(200);
  v_deptno        emp.deptno%TYPE;
BEGIN
  -- 자리표시자와 함께  Dynamic SQL 구문을 작성 합니다.
  v_sql_text := 'SELECT * FROM EMP WHERE DEPTNO = :1';

  -- 커서를 오픈하고 USING구에서 :1 바인드 변수 값을 지정 합니다.
  OPEN v_emp_cur FOR v_sql_text USING 20;

  -- 커서에서 한건씩 레코드를 FETCH 합니다.
  LOOP
    FETCH v_emp_cur INTO v_emp_record;
    EXIT WHEN v_emp_cur%NOTFOUND;
    DBMS_OUTPUT.PUT_LINE('EMPNO : ' || v_emp_record.empno || ',' || 'ENAME : ' || v_emp_record.ename);
  END LOOP;

  -- Close cursor:
  CLOSE v_emp_cur;
END;
/



#PLSQL, #동적SQL, #DynamicSQL, #커서, #SQL, #참조커서, #오라클교육, #SQL교육, #자바교육, #SQL학원, #오라클학원, #자바학원, PLSQL, 동적SQL, DynamicSQL, 커서, SQL, 참조커서, 오라클교육, SQL교육, 자바교육, SQL학원, 오라클학원, 자바학원

2021년 12월 25일 토요일

오라클 참조커서, RefCursor, 자바JDBC에서 오라클함수리턴값받기, SQL교육, SQL학원, 오라클교육, 오라클학원, 자바교육, 자바학원,JAVA학원

 

오라클 참조커서, RefCursor, 자바JDBC에서 오라클함수리턴값받기, SQL교육, SQL학원, 오라클교육, 오라클학원, 자바교육, 자바학원,JAVA학원


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


오라클 참조커서, RefCursor, 자바JDBC에서 오라클함수리턴값받기, SQL교육, SQL학원, 오라클교육, 오

오라클 참조커서, RefCursor, 자바JDBC에서 오라클함수리턴값받기, SQL교육, SQL학원, 오라클교육, 오라클학원, 자바교육, 자바학원오라클 PL/SQL참조커서(Ref Cursor)참조커서로 SELECT결과를 클라이언트로

ojc.asia

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

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

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

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


오라클 PL/SQL



참조커서(Ref Cursor)

참조커서로 SELECT결과를 클라이언트로 리턴

자바JDBC에서 Ref Cursor로 리턴받기




참조커서(REF CURSOR)


  • 일반 커서는 정적이며 커서가 한번 SQL 영역을 가리키면 가리키는 곳을 변경 못한다. 하지만  참조커서(REF CURSOR)는 가능하다.



Declare
   Type refcur is ref cursor;
   cursor c is select * from dual;
   myCur refCur;
begin
  --myCur는 ref cursor
if (to_char(sysdate,'DY') = '일') then
    open myCur for select * from emp;
elsif (to_char(sysdate,'DY') != '일') then
    open myCur for select * from dept;
end if;
open c;  -- 일반커서
end;
/

  • 일반 커서가 가리키는 데이터는 함수나 프로시저를 호출한 곳으로 보낼 수 없지만 참조커서(REF CURSOR)가 가리키는 데이터는 가능하다.



-- 커서를 리턴할 수 있는 함수를 만든다. 

CREATE OR REPLACE FUNCTION emptest(v_deptno in number) RETURN SYS_REFCURSOR    AS

       test_cursor SYS_REFCURSOR;

       sql_string Varchar2(500);

BEGIN

       sql_string := 'Select empno, ename, sal from Emp where deptno = :deptno' ;

       Open test_cursor FOR sql_string USING v_deptno;

       RETURN test_cursor;

       CLOSE test_Cursor;

  END;

  /


variable a refcursor ;

exec :a := emptest(20) ;

print a;



EMPNO ENAME             SAL

---------- ---------- ----------

      7566 JONES            2975

      7788 SCOTT            3000

      7876 ADAMS            1100

      7902 FORD             3000


-- JAVA/JSP등에서 확인


                Class.forName(driver_name); //jdbc 드라이버연결

                conn =  DriverManager.getConnection(url,user,pwd); //Connection인수 입력

               

                String proc_call = "{? = call emptest(?)}";

             

                // 오라클 함수 또는 프로시저를 호출하기 위해 callable statement를 이용

                CallableStatement cstmt = conn.prepareCall(proc_call);

 

                // key here is to register the output parameter

                // of type cursor, execute, then cast it as a ResultSet.

                -- emptest 함수의 output 파라미터 타입을 CURSOR로 한다.

                -- 첫번째  ?가 출력파라미터, 두번째 파리미터는 입력파라미터

                cstmt.registerOutParameter(1, OracleTypes.CURSOR);

                cstmt.setInt(2, 10);  //10번 부서의 데이터 얻기 위해

                cstmt.executeQuery();


                rs = (ResultSet)cstmt.getObject(1);

                while(rs.next()) {

                        out.println(rs.getString("ename") + "<br>");

                        ……

                }



#참조커서, #오라클참조커서, #RefCursor, #오라클커서, #커서란, #SQL교육, #SQL학원, #오라클학원, #오라클교육, #자바교육, #자바학원, #오라클동영상, 참조커서, 오라클참조커서, RefCursor, 오라클커서, 커서란, SQL교육, SQL학원, 오라클학원, 오라클교육, 자바교육, 자바학원, 오라클동영상, 
 

2020년 7월 19일 일요일

오라클참조커서, (REF CURSOR)

5.6 참조커서(REF CURSOR)

n 일반 커서는 정적이며 커서가 한번 SQL 영역을 가리키면 가리키는 곳을 변경 못한다. 하지만 참조커서(REF CURSOR)는 가능하다.

SQL> Declare

Type refcur is ref cursor;

cursor c is select * from dual;

myCursor refCur;

begin

//myCur는 ref cursor

if (to_char(sysdate,’dd’) = 30) then

open myCur for select * from emp;

elsif ((to_char(sysdate,’dd’) = 20) then

open myCur for select * from dept;

end if;

open c; //일반커서

end;

/

n 일반 커서가 가리키는 데이터는 함수나 프러시저를 호출한 곳으로 보낼 수 없지만 참조커서(REF CURSOR)가 가리키는 데이터는 가능하다.

-- 커서를 리턴할 수 있는 함수를 만든다.

SQL> CREATE OR REPLACE FUNCTION emptest(v_deptno in number) RETURN SYS_REFCURSOR AS

test_cursor SYS_REFCURSOR;

sql_string Varchar2(500);

BEGIN

sql_string := 'Select empno, ename, sal from Emp where deptno = :deptno' ;

Open test_cursor FOR sql_string USING v_deptno;

RETURN test_cursor;

CLOSE test_Cursor;

END;

/

함수가 생성되었습니다.

-- SQL*Plus 에서 확인

SQL>variable a refcursor

SQL>exec :a := emptest(10)

SQL>print a

EMPNO ENAME SAL

---------- ---------- ----------

7782 CLARK 2450

7839 KING 5000

7934 MILLER 1300

-- JAVA/JSP등에서 확인

Class.forName(driver_name); //jdbc 드라이버연결

conn = DriverManager.getConnection(url,user,pwd); //Connection인수 입력

String proc_call = "{? = call emptest(?)}";

// 오라클 함수 또는 프러시저를 호출하기 위해 callable statement를 이용

cstmt = conn.prepareCall(proc_call);

// key here is to register the output parameter

// of type cursor, execute, then cast it as a ResultSet.

-- emptest 함수의 output 파라미터 타입을 CURSOR로 한다.

-- 첫번째 ?가 출력파라미터, 두번째 파리미터는 입력파라미터

cstmt.registerOutParameter(1, OracleTypes.CURSOR);

cstmt.setInt(2, 10); //10번 부서의 데이터만 얻기 위해

cstmt.executeQuery();

rs = (ResultSet)cstmt.getObject(1);

while(rs.next()) {

out.println(rs.getString("ename") + "<br>");

……

}

(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...