2012-02-27 98 views
0

我做從C到OCI到Oracle數據庫的幾個電話。OCI_INVALID_HANDLE - 無效的服務環境,連接或語句句柄

我得到這個錯誤:

OCI_INVALID_HANDLE - Invalid service context, connection or statement handle

我繼承了這個代碼:

initOracle(..) { .. //return successful or 0 } 

int executeGetQuery(char * query, char * queryResultData) { 
    char stmt[255]; 

    OCIError *errhp; 
    OCIDefine *defnp = (OCIDefine *) 0; 
    OCIStmt *stmthp; 
    OCISvcCtx *svchp; //server context handle (almost like DBPROCESS) 
    sb2 is_null; 

    memset((char *)stmt, 0, 255); 
    //TODO replace with query 
    sprintf((char *)stmt, "SELECT min(ID) as MINID FROM BNS_SAA_CONFIRMATIONS where SentToWssStatus<>'T'"); 

    /* prepare statement */ 
    if(checkerr(errhp, OCIStmtPrepare(stmthp, errhp, (text *) stmt, 
      (ub4) strlen((char *) stmt), 
      (ub4) OCI_NTV_SYNTAX, (ub4) OCI_DEFAULT)) == OCI_ERROR) 
     return -1; 

    /* define output params */ 
    if(checkerr(errhp, OCIDefineByPos(stmthp, &defnp, errhp, 1, (dvoid *) queryResultData, 
      (sword) strlen(queryResultData), SQLT_STR, (dvoid *) &is_null, (ub2 *)0, 
      (ub2 *)0, OCI_DEFAULT)) == OCI_ERROR)//maybe replace SQLT_STR w SQLT_CHR OMFWTD 
     return -1; 

    /* execute the statement */ 
    status = OCIStmtExecute(svchp, stmthp, errhp, (ub4) 1, (ub4) 0, (CONST OCISnapshot *) NULL, (OCISnapshot *) NULL, OCI_DEFAULT); 
    .... 
} 

我覺得這些功能的錯誤面:OCIStmtExecute(..)OCIDefineByPos(..)OCIStmtPrepare(..)

問題: 我該如何擺脫這個錯誤並開始執行查詢?

錯誤文檔:http://docs.oracle.com/cd/B28359_01/appdev.111/b28395/oci02bas.htm

+1

你還有很長的路要走......你似乎有一堆是本地的函數處理的,但他們似乎沒有在任何地方進行分配。首先我沒有看到代碼連接到服務器的一切都在這裏,這就是你需要做的,有一個有意義的'OCISvcCtx.'我會建議你閱讀到介紹到OCI編程文件,並採取一切演示的優勢是什麼oracle提供的代碼,位於您鏈接到的文檔的附錄B中。 – Hoons 2012-02-27 21:23:39

+0

我想接受你的評論作爲答案:)這是那些沒有意義的名稱(對我來說)的局部變量。請張貼它作爲答案。謝謝! – Adrian 2012-02-27 21:50:12

回答

1

嗯......我看到,OCI處理其在本地定義沒有被任何分配和/或正確初始化。如果這些步驟是在您繼承的其他代碼中完成的,則需要確保您有辦法獲取指向這些句柄的指針。如果沒有,您連接到錯誤處理部分的Oracle文檔對OCI編程有很好的介紹,並且深入的演示程序(您可能必須創建一個Oracle開發人員帳戶並下載OCI客戶端才能獲取它們你不能到達某個地方)。祝你好運,在OCI是一個巨大的API,但Oracle自己的文檔是偉大的,一旦你學會了如何通過它導航,比其他介紹我找到了OCI Relational functions section(至少是在10g中等價物)是無價的。

+0

我將它們實例化到別的地方,我不知道如何使用這些變量。解決的辦法是外接變量,所以我可以使用實例化的變量。謝謝! – Adrian 2012-02-28 14:09:22