>  기사  >  데이터 베이스  >  C 언어를 사용하여 Oracle 데이터베이스의 저장 프로시저를 호출하는 방법

C 언어를 사용하여 Oracle 데이터베이스의 저장 프로시저를 호출하는 방법

PHPz
PHPz원래의
2023-04-04 09:11:40914검색

소프트웨어를 개발하다 보면 데이터베이스를 운영해야 하는 경우가 종종 있습니다. Oracle 데이터베이스의 저장 프로시저는 매우 중요한 기능 중 하나입니다. 저장 프로시저를 통해 일부 공통 비즈니스 로직을 재사용 가능한 코드 라이브러리로 캡슐화하여 코드 개발 및 유지 관리를 단순화할 수 있습니다. 본 문서에서는 C 언어를 사용하여 Oracle 데이터베이스의 저장 프로시저를 호출하는 방법을 소개합니다.

  1. 준비

C 프로그램 작성을 시작하기 전에 Oracle 데이터베이스와 Oracle 클라이언트를 설치해야 합니다. Oracle 클라이언트를 이미 설치한 경우 이 단계를 건너뛸 수 있습니다.

Oracle 클라이언트를 설치하기 전에 Oracle 데이터베이스를 설치하고 테스트용 데이터베이스 사용자를 생성해야 합니다. Oracle 공식 웹사이트에서 Oracle 클라이언트를 다운로드하고 운영 체제 버전에 맞는 버전을 선택하여 설치할 수 있습니다.

  1. C 코드 작성

다음은 C 언어를 사용하여 사용자 테이블에 지정된 레코드를 쿼리하는 Oracle 저장 프로시저를 호출하는 샘플 코드입니다.

#include <stdio.h>
#include <stdlib.h>
#include <oci.h>

void report_error(OCIError *errhp) {
    text msgbuf[512];
    sb4 errcode = 0;
    OCIErrorGet((dvoid *) errhp, (ub4) 1, (text *) NULL, &errcode, msgbuf, (ub4) sizeof (msgbuf), OCI_HTYPE_ERROR);
    fprintf(stderr, "Error code %d, msg: %s\n", errcode, msgbuf);
    exit(EXIT_FAILURE);
}

int main() {
    OCIEnv *envhp;
    OCIError *errhp;
    OCIServer *srvhp;
    OCISession *authp;
    OCIStmt *stmthp;
    OCIParam *paramhp;
    OCIParam *paramhp2;
    OCIParam *paramhp3;
    ub4 pos = 0;
    text *username = (text *) "YOUR_USERNAME";
    text *password = (text *) "YOUR_PASSWORD";
    text *db = (text *) "YOUR_DATABASE";
    text *proc_name = (text *) "YOUR_PROC_NAME";
    int user_id = 1;
    text *name = (text *) malloc(512 * sizeof (text));
    sb4 name_len = 0;

    OCIInitialize((ub4) OCI_DEFAULT, (dvoid *)0,  (dvoid * (*)(dvoid *, size_t))0,
                      (dvoid * (*)(dvoid *, dvoid *, size_t))0,  (void (*)(dvoid *, dvoid *))0 );

    OCIEnvInit((OCIEnv **)&envhp, OCI_DEFAULT, (size_t) 0, (dvoid **) 0);

    OCIHandleAlloc((dvoid *) envhp, (dvoid **) &errhp, OCI_HTYPE_ERROR,       (size_t) 0, (dvoid **) 0);

    OCIHandleAlloc((dvoid *) envhp, (dvoid **) &srvhp, OCI_HTYPE_SERVER,      (size_t) 0, (dvoid **) 0);

    OCIHandleAlloc((dvoid *) envhp, (dvoid **)&authp, OCI_HTYPE_SESSION,     (size_t) 0, (dvoid **) 0);

    OCIHandleAlloc((dvoid *) envhp, (dvoid **) &stmthp, OCI_HTYPE_STMT,       (size_t) 0, (dvoid **) 0);

    OCIAttrSet((dvoid *) srvhp, OCI_HTYPE_SERVER, (dvoid *) db, (ub4) strlen((char *) db), OCI_ATTR_SERVER, errhp);

    OCIServerAttach(srvhp, errhp, (text *) 0, (sb4) 0, OCI_DEFAULT);

    OCIAttrSet((dvoid *) authp, OCI_HTYPE_SESSION, (dvoid *) username, (ub4) strlen((char *) username), OCI_ATTR_USERNAME, errhp);

    OCIAttrSet((dvoid *) authp, OCI_HTYPE_SESSION, (dvoid *) password, (ub4) strlen((char *) password), OCI_ATTR_PASSWORD, errhp);

    OCISessionBegin(srvhp, errhp, authp, OCI_CRED_RDBMS, OCI_DEFAULT);

    OCIAttrSet((dvoid *) stmthp, OCI_HTYPE_STMT, (dvoid *) proc_name, (ub4) strlen((char *) proc_name), OCI_ATTR_PROCEDURE_NAME, errhp);

    OCIStmtPrepare(stmthp, errhp, (text *) "begin YOUR_PACKAGE.YOUR_PROC(:1,:2,:3); end;", (ub4) strlen("begin YOUR_PACKAGE.YOUR_PROC(:1,:2,:3); end;"), OCI_NTV_SYNTAX, OCI_DEFAULT);

    OCIParamGet(stmthp, OCI_HTYPE_STMT, errhp, (dvoid **)&paramhp, (ub4)1);

    OCIDefineByPos(stmthp, &paramhp3, errhp, 3, (dvoid *)&name, (sb4) sizeof(name), SQLT_STR, (dvoid *)&name_len, NULL, OCI_DEFAULT);

    OCIParamGet(stmthp, OCI_HTYPE_STMT, errhp, (dvoid **)&paramhp2, (ub4)2);

    OCIBindByPos(stmthp, &paramhp2, errhp, 2, (dvoid*)&user_id, (sb4)sizeof(user_id), SQLT_INT, (dvoid *)0, (ub2 *)0, (ub2 *)0, 0, (ub4 *)0, OCI_DEFAULT);

    OCIStmtExecute(authp, stmthp, errhp, (ub4) 0, (ub4) 0, (OCISnapshot *)0, (OCISnapshot *)0, OCI_DEFAULT);

    printf("user name: %s\n", name);
    
    OCIHandleFree((dvoid *) stmthp, OCI_HTYPE_STMT);
    OCIHandleFree((dvoid *) authp, OCI_HTYPE_SESSION);
    OCIHandleFree((dvoid *) srvhp, OCI_HTYPE_SERVER);
    OCIHandleFree((dvoid *) errhp, OCI_HTYPE_ERROR);
    OCIHandleFree((dvoid *) envhp, OCI_HTYPE_ENV);

    return 0;
}
  1. 코드 실행

C 코드를 작성한 후 코드를 컴파일하고 실행하여 저장 프로시저를 성공적으로 호출할 수 있는지 테스트해야 합니다.

C 코드를 컴파일하는 명령은 다음과 같습니다.

gcc -o demo demo.c -I$ORACLE_HOME/include -L$ORACLE_HOME/lib -lclntsh

여기서 $ORACLE_HOME은 Oracle 클라이언트의 설치 경로입니다.

Windows 플랫폼에서 컴파일하려면 -lclntsh改为-locci이 필요합니다.

  1. 결론

이 기사에서는 C 언어를 사용하여 Oracle 데이터베이스의 저장 프로시저를 호출하는 방법을 소개합니다. Oracle 클라이언트의 설치 경로를 설정해야 하며 C 프로그램의 컴파일을 올바른 라이브러리 파일에 연결해야 한다는 점에 유의하세요. 실제 개발 작업에서는 저장 프로시저 작성과 보안 처리에도 주의를 기울여야 합니다.

위 내용은 C 언어를 사용하여 Oracle 데이터베이스의 저장 프로시저를 호출하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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