आपका फ़ेच विफल हो रहा है क्योंकि उस बिंदु से पहले खुले, घोषित और तैयार सभी विफल हो गए, लेकिन आपने उनमें से किसी भी त्रुटि की जांच नहीं की। यदि आपने किया तो आपको एक ORA-00911: invalid character
मिलेगा त्रुटि, इस वजह से:
strcpy((char *)sql_statement.arr,"select supplierNumber, supplierName ");
strcat((char *)sql_statement.arr,"from supplier ");
strcat((char *)sql_statement.arr,"where supplierNumber < > 1;");
बयान जो बनाता है वह है
select supplierNumber, supplierName from supplier where supplierNumber < > 1;
लेकिन फिर आप करते हैं:
exec sql PREPARE S1 FROM :sql_statement;
डायनेमिक SQL और JDBC कॉल की तरह, यह तैयारी केवल एक ही स्टेटमेंट ले सकती है। आपकी निर्मित स्ट्रिंग के अंत में अर्धविराम एक कथन विभाजक है जिसका इस संदर्भ में कोई अर्थ नहीं है, और जहां तक पार्सर का संबंध है, यह अमान्य है।
तो बस उस अर्धविराम को हटा दें:
strcpy((char *)sql_statement.arr,"select supplierNumber, supplierName ");
strcat((char *)sql_statement.arr,"from supplier ");
strcat((char *)sql_statement.arr,"where supplierNumber < > 1");
और प्रत्येक exec sql
. के बाद एक त्रुटि जांच जोड़ें ।