Oracle에는 API가 있습니다. Oracle 데이터베이스에는 네 가지 주요 유형의 API가 있습니다. 1. Oracle에서 제공하는 C 언어 프로그래밍 인터페이스인 OCI API 2. Java 언어로 Oracle 데이터베이스를 연결하기 위한 API 라이브러리인 JDBC API 4. .NET API 등 다양한 데이터베이스를 연결하기 위해 Microsoft 통합 API 사양에서 제공됩니다.
이 튜토리얼의 운영 환경: Windows 10 시스템, Oracle 버전 19c, Dell G3 컴퓨터.
최근 몇 년 동안 Oracle 데이터베이스는 점점 더 널리 사용되고 있으며 많은 엔터프라이즈 애플리케이션 시스템에서 첫 번째 선택이 되었습니다. 개발자로서 오라클 데이터베이스의 API 개발 기술을 익히는 것은 매우 중요합니다. 이 기사에서는 Oracle API 개발 내용을 소개하고 몇 가지 실제 사례를 제공합니다.
1. 소개
API 전체 이름(Application Programing Interface)은 애플리케이션 프로그래밍 인터페이스입니다. 간단히 말하면, API는 소프트웨어 응용프로그램이 외부 세계와 상호작용하기 위한 인터페이스입니다. API를 통해 외부 데이터 상호작용 및 호출이 실현될 수 있으며, 다양한 응용프로그램과 시스템 간의 데이터 전송 및 통신이 실현될 수 있습니다.
Oracle 데이터베이스 API에는 네 가지 주요 범주가 있습니다.
(1) OCI API: Oracle 호출 인터페이스, Oracle에서 제공하는 C 언어 프로그래밍 인터페이스입니다.
(2) JDBC API: Java Database Connectivity는 Java 언어로 Oracle 데이터베이스를 연결하기 위한 API 라이브러리입니다.
(3) ODBC API: Open Database Connectivity는 다양한 데이터베이스를 연결하기 위해 Microsoft에서 제공하는 통합 API 사양입니다.
(4) .NET API: Oracle 데이터베이스에 연결하기 위해 Microsoft .NET Framework에서 제공하는 API 라이브러리입니다.
여기에서는 주로 OCI API를 소개하겠습니다.
2. OCI API
OCI API는 Oracle 데이터베이스의 C 언어 프로그래밍 인터페이스인 Oracle Call Interface입니다. OCI API는 여러 언어를 지원하는 효율적이고 강력한 API 라이브러리입니다.
OCI는 애플리케이션에 일련의 라이브러리 기능을 제공하고 애플리케이션이 런타임에 이러한 기능을 호출할 수 있도록 하여 Oracle 데이터베이스와의 상호 작용을 가능하게 합니다. OCI의 프로그래밍 모델은 C 언어의 표준 I/O 함수 라이브러리와 유사하므로 C 언어를 사용하는 프로그래머도 빠르게 시작할 수 있습니다.
OCI 설치 패키지는 오라클 공식 홈페이지나 오라클 설치 CD에서 찾을 수 있습니다. 설치 후 프로젝트의 OCI가 위치한 디렉토리에 include, lib, oraclnt.dll을 추가하세요.
VS Code를 사용하는 경우 Visual Studio Code를 사용하여 Oracle 데이터베이스 작업을 통합하여 OCI API를 애플리케이션에 통합할 수 있습니다.
실제 OCI API 사용 사례를 살펴보겠습니다.
3. OCI API 사용 예
3.1 Oracle 데이터베이스에 연결
Oracle 데이터베이스에 연결하는 것은 OCI API의 가장 기본적인 작업 중 하나입니다. 먼저 Oracle 데이터베이스에 연결하는 간단한 코드를 살펴보겠습니다.
#include #include #include #define USERNAME "scott" #define PASSWORD "tiger" #define DATABASE "orcl" #define SQLSTR "select * from emp" int mn(int argc, char *argv[]) { OCIEnv *envhp; // 环境句柄 OCIError *errhp; // 错误句柄 OCISvcCtx *svchp; // 服务上下文句柄 OCIServer *srvhp; // 服务器句柄 OCISession *authp; // 验证句柄 OCIStmt *stmthp; // 语句句柄 OCIDefine *defnp; // 取值句柄 sword errcode; text errbuf[512]; ub4 errlen; ub2 rcount; ub4 empno; if (OCIEnvCreate(&envhp, OCI_DEFAULT, (dvoid *)0, (dvoid *(*)(dvoid *, size_t))0, (dvoid *(*)(dvoid *, dvoid *, size_t))0, (void (*)(dvoid *, dvoid *))0, (size_t)0, (dvoid **)0)) { printf("OCIEnvCreate Error!\n"); return 0; } OCIHandleAlloc(envhp, (dvoid **)&errhp, OCI_HTYPE_ERROR, 0, (dvoid **)0); OCIHandleAlloc(envhp, (dvoid **)&svchp, OCI_HTYPE_SVCCTX, 0, (dvoid **)0); OCIHandleAlloc(envhp, (dvoid **)&srvhp, OCI_HTYPE_SERVER, 0, (dvoid **)0); OCIHandleAlloc(envhp, (dvoid **)&authp, OCI_HTYPE_SESSION, 0, (dvoid **)0); OCIHandleAlloc(envhp, (dvoid **)&stmthp, OCI_HTYPE_STMT, 0, (dvoid **)0); if (OCIServerAttach(srvhp, errhp, (text *)DATABASE, strlen(DATABASE), OCI_DEFAULT) != OCI_SUCCESS) { OCIErrorGet(errhp, 1, (text *)0, &errcode, errbuf, sizeof(errbuf), OCI_HTYPE_ERROR); printf("OCIServerAttach Error: %s\n", errbuf); return 0; } OCIAttrSet(svchp, OCI_HTYPE_SVCCTX, (dvoid *)srvhp, (ub4)0, OCI_ATTR_SERVER, errhp); OCIAttrSet(authp, OCI_HTYPE_SESSION, (dvoid *)USERNAME, strlen(USERNAME), OCI_ATTR_USERNAME, errhp); OCIAttrSet(authp, OCI_HTYPE_SESSION, (dvoid *)PASSWORD, strlen(PASSWORD), OCI_ATTR_PASSWORD, errhp); if (OCISessionBegin(svchp, errhp, authp, OCI_CRED_RDBMS, OCI_DEFAULT)) { OCIErrorGet(errhp, 1, (text *)0, &errcode, errbuf, sizeof(errbuf), OCI_HTYPE_ERROR); printf("OCISessionBegin Error:%s\n", errbuf); return 0; } OCIAttrSet(svchp, OCI_HTYPE_SVCCTX, (dvoid *)authp, (ub4)0, OCI_ATTR_SESSION, errhp); if (OCIStmtPrepare(stmthp, errhp, (text *)SQLSTR, strlen(SQLSTR), OCI_NTV_SYNTAX, OCI_DEFAULT)) { OCIErrorGet(errhp, 1, (text *)0, &errcode, errbuf, sizeof(errbuf), OCI_HTYPE_ERROR); printf("OCIStmtPrepare Error:%s\n", errbuf); return 0; } if (OCIStmtExecute(svchp, stmthp, errhp, 1, 0, NULL, NULL, OCI_STMT_SCROLLABLE_READ_ONLY)) { OCIErrorGet(errhp, 1, (text *)0, &errcode, errbuf, sizeof(errbuf), OCI_HTYPE_ERROR); printf("OCIStmtExecute Error:%s\n", errbuf); return 0; } while ((errcode = OCIStmtFetch(stmthp, errhp, 1, OCI_FETCH_NEXT, OCI_DEFAULT)) == OCI_SUCCESS) { OCIAttrGet(stmthp, OCI_HTYPE_STMT, (dvoid *)&empno, NULL, OCI_ATTR_ROWID, errhp); printf("%d\n", empno); } OCISessionEnd(svchp, errhp, authp, OCI_DEFAULT); OCIServerDetach(srvhp, errhp, OCI_DEFAULT); OCIHandleFree(errhp, OCI_HTYPE_ERROR); OCIHandleFree(srvhp, OCI_HTYPE_SERVER); OCIHandleFree(svchp, OCI_HTYPE_SVCCTX); OCIHandleFree(authp, OCI_HTYPE_SESSION); OCIHandleFree(stmthp, OCI_HTYPE_STMT); OCIEnvFree(envhp); return 0; }
위 코드는 OCI를 사용하여 Oracle 데이터베이스에 연결하고 OCI 문 핸들을 통해 데이터 쿼리 작업을 구현합니다.
3.2 데이터 삽입
OCI API는 OCIStmtPrepare 및 OCIStmtExecute 함수를 사용하여 데이터베이스에 데이터를 삽입할 수 있습니다. 코드는 다음과 같습니다:
char *insert_sql = "insert into emp values(:empno, :ename, :job, :mgr, :hiredate, :sal, :comm, :deptno)"; OCIBind *bind[8]; struct tm *p_tm; time_t tm = time(NULL); p_tm = localtime(&tm); OCIDate o_hire; OCIDateTime *p_hire; OCIDescriptor *p_dt = NULL; OCIStmtPrepare(stmthp, errhp, (text *)insert_sql, strlen(insert_sql), OCI_NTV_SYNTAX, OCI_DEFAULT); OCIDescriptorAlloc(envhp, &p_dt, OCI_DTYPE_TIMESTAMP, 0, NULL); OCIDateTimeConstruct(envhp, errhp, p_dt, p_tm->tm_year + 1900, p_tm->tm_mon + 1, p_tm->tm_mday, p_tm->tm_hour, p_tm->tm_min, p_tm->tm_sec, 0, NULL, 0); OCIDateTimeToOracle(envhp, p_dt, &o_hire); // 绑定 empno 参数 OCIBindByName(stmthp, &bind[0], errhp, (text *)":empno", -1, &empno, sizeof(empno), SQLT_INT, NULL, NULL, NULL, 0, NULL, OCI_DEFAULT); // 绑定 ename 参数 OCIBindByName(stmthp, &bind[1],
위 내용은 오라클에 API가 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!