📄 treq.c
字号:
/* Copyright (c) Oracle Corporation 2001. All Rights Reserved. *//* NAME treq.c - an OCI example of doing transformation during an enqueue DESCRIPTION This examples does an enqueue into BZ_ADM.BZCARDORDERS_Q with a transformation BZ_ADM.BZCARDVERIFY*/#ifndef OCI_ORACLE#include <oci.h>#endifstatic void checkerr(errhp, status)OCIError *errhp;sword status;{ text errbuf[512]; ub4 buflen; sb4 errcode; if (status == OCI_SUCCESS) return; switch (status) { case OCI_SUCCESS_WITH_INFO: printf("Error - OCI_SUCCESS_WITH_INFO\n"); break; case OCI_NEED_DATA: printf("Error - OCI_NEED_DATA\n"); break; case OCI_NO_DATA: printf("Error - OCI_NO_DATA\n"); break; case OCI_ERROR: OCIErrorGet ((dvoid *) errhp, (ub4) 1, (text *) NULL, &errcode, errbuf, (ub4) sizeof(errbuf), (ub4) OCI_HTYPE_ERROR); printf("Error - %s\n", errbuf); break; case OCI_INVALID_HANDLE: printf("Error - OCI_INVALID_HANDLE\n"); break; case OCI_STILL_EXECUTING: printf("Error - OCI_STILL_EXECUTE\n"); break; case OCI_CONTINUE: printf("Error - OCI_CONTINUE\n"); break; default: printf("Error - %d\n", status); break; }}struct message{ OCINumber employee_id; OCIString *first_name; OCIString *last_name; OCIString *ord_typ;};typedef struct message message;struct null_message{ OCIInd null_adt; OCIInd null_id; OCIInd null_frname; OCIInd null_lsname; OCIInd null_ortyp;};typedef struct null_message null_message;void main(argc, argv)int argc;char **argv;{ OCIEnv *envhp; OCIServer *srvhp; OCIError *errhp; OCISvcCtx *svchp; OCISession *usrhp; dvoid *tmp; OCIType *mesg_tdo = (OCIType *) 0; null_message nmesg; null_message *nmsg = &nmesg; message *msg; OCIAQEnqOptions *enqopt = (OCIAQEnqOptions *)0; OCIAQMsgProperties *msgprop = (OCIAQMsgProperties *)0; int emp_id = 123; OCIInitialize((ub4) OCI_OBJECT, (dvoid *)0, (dvoid * (*)()) 0, (dvoid * (*)()) 0, (void (*)()) 0 ); OCIHandleAlloc( (dvoid *) NULL, (dvoid **) &envhp, (ub4) OCI_HTYPE_ENV, 52, (dvoid **) &tmp); OCIEnvInit( &envhp, (ub4) OCI_DEFAULT, 21, (dvoid **) &tmp ); OCIHandleAlloc( (dvoid *) envhp, (dvoid **) &errhp, (ub4) OCI_HTYPE_ERROR, 52, (dvoid **) &tmp); OCIHandleAlloc( (dvoid *) envhp, (dvoid **) &srvhp, (ub4) OCI_HTYPE_SERVER, 52, (dvoid **) &tmp); OCIServerAttach( srvhp, errhp, (text *) 0, (sb4) 0, (ub4) OCI_DEFAULT); OCIHandleAlloc( (dvoid *) envhp, (dvoid **) &svchp, (ub4) OCI_HTYPE_SVCCTX, 52, (dvoid **) &tmp); /* set attribute server context in the service context */ OCIAttrSet( (dvoid *) svchp, (ub4) OCI_HTYPE_SVCCTX, (dvoid *)srvhp, (ub4) 0, (ub4) OCI_ATTR_SERVER, (OCIError *) errhp); /* allocate a user context handle */ OCIHandleAlloc((dvoid *)envhp, (dvoid **)&usrhp, (ub4) OCI_HTYPE_SESSION, (size_t) 0, (dvoid **) 0); OCIAttrSet((dvoid *)usrhp, (ub4)OCI_HTYPE_SESSION, (dvoid *)"bz", (ub4)strlen("bz"), OCI_ATTR_USERNAME, errhp); OCIAttrSet((dvoid *)usrhp, (ub4)OCI_HTYPE_SESSION, (dvoid *)"bz", (ub4)strlen("bz"), OCI_ATTR_PASSWORD, errhp); checkerr(errhp, OCISessionBegin (svchp, errhp, usrhp, OCI_CRED_RDBMS, OCI_DEFAULT)); OCIAttrSet((dvoid *)svchp, (ub4)OCI_HTYPE_SVCCTX, (dvoid *)usrhp, (ub4)0, OCI_ATTR_SESSION, errhp); checkerr(errhp, OCITypeByName(envhp, errhp, svchp, (CONST text *)"BZ_ADM", strlen("BZ_ADM"), (CONST text *)"BZCARDORDER_TYP", strlen("BZCARDORDER_TYP"), (text *)0, 0, OCI_DURATION_SESSION, OCI_TYPEGET_ALL, &mesg_tdo)); /**************************** allocate AQ descriptors **********************/ checkerr(errhp, OCIDescriptorAlloc(envhp, (dvoid **)&enqopt, OCI_DTYPE_AQENQ_OPTIONS, 0, (dvoid **)0)); checkerr(errhp, OCIDescriptorAlloc(envhp, (dvoid **)&msgprop, OCI_DTYPE_AQMSG_PROPERTIES, 0, (dvoid **)0)); checkerr( errhp, OCIObjectNew (envhp, errhp, svchp,OCI_TYPECODE_OBJECT, mesg_tdo, (dvoid *)0, OCI_DURATION_SESSION, TRUE, (dvoid **)&msg)); checkerr(errhp, OCINumberFromInt(errhp, &emp_id, sizeof(emp_id), 0,&msg->employee_id)); checkerr(errhp, OCIAttrSet(enqopt, OCI_DTYPE_AQENQ_OPTIONS, (dvoid *)"BZ_ADM.BZCARDVERIFY", sizeof("BZ_ADM.BZCARDVERIFY"), OCI_ATTR_TRANSFORMATION, errhp)); nmsg->null_adt = nmsg->null_id = 0; nmsg->null_frname = nmsg->null_lsname = nmsg->null_ortyp = -1; checkerr(errhp, OCIAQEnq(svchp, errhp, (text *)"BZ_ADM.BZCARDORDERS_Q", enqopt, msgprop, mesg_tdo, (dvoid **)&msg, (dvoid **)&nmsg, 0, 0)); printf("AQ descriptors allocated\n"); checkerr(errhp, OCITransCommit(svchp, errhp, (ub4) 0)); checkerr(errhp, OCIDescriptorFree((dvoid *)enqopt, OCI_DTYPE_AQENQ_OPTIONS)); checkerr(errhp, OCIDescriptorFree((dvoid *)msgprop, OCI_DTYPE_AQMSG_PROPERTIES)); checkerr(errhp, OCIServerDetach( srvhp, errhp, (ub4) OCI_DEFAULT));}/* end of file treq.c */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -