C# ADO.NET ODP.NET/ODAC 설치, 오라클 함수호출 실습동영상

Описание к видео C# ADO.NET ODP.NET/ODAC 설치, 오라클 함수호출 실습동영상

C# ADO.NET ODP.NET/ODAC 설치, 오라클 함수 호출 실습 동영상 입니다.



C#, ADO.NET을 이용하여 오라클 서버의 함수를 호출하는 실습을 합니다.

실습환경 : 오라클 19C, VS 2022
ODP.NET으로 오라클 DB의 함수를 호출하여 데이터 추출


[오라클 실습 환경 구성]

1. 오라클 전용 드라이버를 사용하기 위해 ODP.NET을 사용하려면 https://www.oracle.com/database/techn... 에 접속하여 ODAC 관련 ZIP 파일을 다운받아 setup.exe를 실행하여 오라클 유니버설 인스톨러를 통해 설치해야 한다. ODAC에는 오라클 접근을 위한 여러 드라이버들이 존재한다.



2. OLEDB를 사용방식으로 오라클에 접근하기 위해서는 System.Data 네임스페이스를 사용하면 되고 별다른 설치는 필요 없다.

3. VS2022에서 우리가 만드는 프로젝트를 64비트로 작동 시키기 위해 프로젝트에서 마우스 우측버튼 속성창의 빌드에서 플랫폼대상을 *64로 선택해야 한다.






[오라클 서버의 함수]
CREATE OR REPLACE FUNCTION getDept(deptno IN NUMBER)
RETURN SYS_REFCURSOR IS
refcur_ret SYS_REFCURSOR;
BEGIN
OPEN refcur_ret FOR 'SELECT * FROM EMP WHERE DEPTNO = :1' using deptno;
RETURN refcur_ret;
END getDept;

[생성함수 테스트]
variable a refcursor;
exec :a := getDept(10);
print a;

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- -------- ---------- ---------- ----------
7782 CLARK MANAGER 7839 81/06/09 2450 10
7934 MILLER CLERK 7782 82/01/23 1300 10




[C# 콘솔 프로젝트 생성]

using System;
using System.Data;
using Oracle.DataAccess.Client;
using Oracle.DataAccess.Types;

namespace OracleTest
{
class OracleRefCursorSample
{
static void Main()
{
//오라클 연결 문자열
string constr = "User Id=scott;Password=tiger;Data Source=orcl";

//오라클 Connection 생성 및 OPEN
OracleConnection con = new OracleConnection(constr);
con.Open();

// 서버의 함수를 호출하기 위한 Command객체 생성(SQL실행)
OracleCommand cmd = new OracleCommand("getDept", con);
cmd.CommandType = CommandType.StoredProcedure;

// Bind the parameters
// output은 서버에서 리턴되는 참조커서를 받기위한 파라미터
// REURN REF CURSOR bound to SELECT * FROM EMP WHERE DEPTNO = :1
OracleParameter output = cmd.Parameters.Add("refcur_ret", OracleDbType.RefCursor);
output.Direction = ParameterDirection.ReturnValue;

//부서코드를 던져주기 위한 Input Parameter
OracleParameter input = cmd.Parameters.Add("deptno", OracleDbType.Int16);
input.Direction = ParameterDirection.Input;
input.Value = 10;

// 오라클 서버의 getDept함수를 호출
cmd.ExecuteNonQuery();

// 실행하면 참조커서가 리턴해주는 사원목록이 output 파라미터에 들어가고
// 이를 OracleDataReader 타입으로 변환한다.
// ADO.NET에서SELECT 목록은 Reader로 받음, 자바는 ResultSet
OracleDataReader reader1 = ((OracleRefCursor)output.Value).GetDataReader();

Console.Write(reader1.GetName(0) + "\t"); Console.WriteLine(reader1.GetName(1));
Console.WriteLine("---------------------");
while (reader1.Read())
{
Console.Write(reader1[0].ToString() + "\t"); Console.WriteLine(reader1[1].ToString());
}

reader1.Close();
reader1.Dispose();
output.Dispose();
input.Dispose();
cmd.Dispose();
con.Close();
con.Dispose();
}
}
}

[결과]

EMPNO ENAME
---------------------
7782 CLARK
7934 MILLER

Комментарии

Информация по комментариям в разработке