2014-02-06 28 views
0

打印過時我一直在做一些研究,試圖解決這個問題,它看似簡單,但事實並非如此。 我目前連接到Oracle數據庫從C程序並執行以下查詢:動態SQL - 從C程序

char buf[20]; 
EXEC SQL SELECT TO_CHAR(modified_time, 'YYYY-MM-DD HH24:MI:SS') 
        INTO :buf :i_modified_time 
        FROM RECORD_ENTRY_TABLE 
       WHERE record_id_num = rec_id_num; 
printf("THe modified time is: %s", buf); 

當我使用SQL在表中的時間是2008-10-14 13點53分02秒檢查表,但是編譯和運行程序時根本不打印任何東西。 我有其他查詢工作得很好,但由於某種原因,這不是一個。 你能幫忙或提出建議嗎? 謝謝!

回答

0

字符數組but不是初始化,(memset),這可能是一個問題!同時檢查指標變量狀態是一種好的做法。

在我加入不需要,如果record_id_num的PrimaryKey查詢的ROWNUM。但仍然有人閱讀代碼,可能會有疑問,如果查詢返回多行,該怎麼辦?在這種情況下,應該處理SQLCODE-2112

char buf[19+1]; 

short i_modified_time = -1; 

memset(buf,'\0',sizeof(buf); 

EXEC SQL SELECT TO_CHAR(modified_time, 'YYYY-MM-DD HH24:MI:SS') 
        INTO :buf :i_modified_time 
        FROM RECORD_ENTRY_TABLE 
       WHERE record_id_num = rec_id_num 
       AND ROWNUM < 2; 

if(i_modified_time == 0) { 
    printf("THe modified time is: <%s>", buf); 
}else if(sqlca.sqlcode != 0){ 
    printf("Error while Query <%s>",sqlca.sqlerrm); 
}else { 
    printf("THe modified time is not available); 
} 
+0

謝謝你們!!!!我也會嘗試一下,讓你知道......解決 –

+0

問題...使用的sqlstatus檢查,發現它並沒有真正讀record_id_num ...快速修復是改變record_id_num =:rec_id_num ...添加冒號在變量正確傳遞之前,我現在可以檢索並打印modified_time的值...再次非常感謝您的快速響應! –

+0

@ user3280651很好,這就是爲什麼我添加了sql錯誤塊。很高興它幫助你。 –

0

我假設你正在使用PRO * C。您的查詢假定表中始終只有一條記錄。確保滿足此前提條件並始終正確處理。