소프트웨어를 개발하다 보면 데이터베이스를 운영해야 하는 경우가 종종 있습니다. Oracle 데이터베이스의 저장 프로시저는 매우 중요한 기능 중 하나입니다. 저장 프로시저를 통해 일부 공통 비즈니스 로직을 재사용 가능한 코드 라이브러리로 캡슐화하여 코드 개발 및 유지 관리를 단순화할 수 있습니다. 본 문서에서는 C 언어를 사용하여 Oracle 데이터베이스의 저장 프로시저를 호출하는 방법을 소개합니다.
C 프로그램 작성을 시작하기 전에 Oracle 데이터베이스와 Oracle 클라이언트를 설치해야 합니다. Oracle 클라이언트를 이미 설치한 경우 이 단계를 건너뛸 수 있습니다.
Oracle 클라이언트를 설치하기 전에 Oracle 데이터베이스를 설치하고 테스트용 데이터베이스 사용자를 생성해야 합니다. Oracle 공식 웹사이트에서 Oracle 클라이언트를 다운로드하고 운영 체제 버전에 맞는 버전을 선택하여 설치할 수 있습니다.
다음은 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 **)¶mhp, (ub4)1); OCIDefineByPos(stmthp, ¶mhp3, errhp, 3, (dvoid *)&name, (sb4) sizeof(name), SQLT_STR, (dvoid *)&name_len, NULL, OCI_DEFAULT); OCIParamGet(stmthp, OCI_HTYPE_STMT, errhp, (dvoid **)¶mhp2, (ub4)2); OCIBindByPos(stmthp, ¶mhp2, 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; }
C 코드를 작성한 후 코드를 컴파일하고 실행하여 저장 프로시저를 성공적으로 호출할 수 있는지 테스트해야 합니다.
C 코드를 컴파일하는 명령은 다음과 같습니다.
gcc -o demo demo.c -I$ORACLE_HOME/include -L$ORACLE_HOME/lib -lclntsh
여기서 $ORACLE_HOME은 Oracle 클라이언트의 설치 경로입니다.
Windows 플랫폼에서 컴파일하려면 -lclntsh
改为-locci
이 필요합니다.
이 기사에서는 C 언어를 사용하여 Oracle 데이터베이스의 저장 프로시저를 호출하는 방법을 소개합니다. Oracle 클라이언트의 설치 경로를 설정해야 하며 C 프로그램의 컴파일을 올바른 라이브러리 파일에 연결해야 한다는 점에 유의하세요. 실제 개발 작업에서는 저장 프로시저 작성과 보안 처리에도 주의를 기울여야 합니다.
위 내용은 C 언어를 사용하여 Oracle 데이터베이스의 저장 프로시저를 호출하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!