>  기사  >  오라클에 API가 있나요?

오라클에 API가 있나요?

小老鼠
小老鼠원래의
2023-07-06 10:05:041105검색

Oracle에는 API가 있습니다. Oracle 데이터베이스에는 네 가지 주요 유형의 API가 있습니다. 1. Oracle에서 제공하는 C 언어 프로그래밍 인터페이스인 OCI API 2. Java 언어로 Oracle 데이터베이스를 연결하기 위한 API 라이브러리인 JDBC API 4. .NET API 등 다양한 데이터베이스를 연결하기 위해 Microsoft 통합 API 사양에서 제공됩니다.

오라클에 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.