بتاريخ: 7 يونيو 20169 سنة comment_275529 السلام عليكم ورحمة الله وبركاته المطلوب من جملة select اجيب قيمة المتغير COUNTER هذه الخظا يظهر لى eeeeeeeeeeejava.sql.SQLException: ORA-06550: سطر 2 ، عمود 22 : PLS-00201: identifier 'COUNTER' must be declared ORA-06550: سطر 2 ، عمود 30 : PL/SQL: ORA-00904: : معرف غير صالح ORA-06550: سطر 2 ، عمود 1 : PL/SQL: SQL Statement ignored من هذا الكود public boolean validateCHEKB_NO(String b_no) { int result=0; int COUNTER=2; String PlSQLCode= "BEGIN\n" + "SELECT COUNT(*) INTO COUNTER "+ "FROM ITEMS\n" + "WHERE trim(b_no)=? ;\n" + "END;"; CallableStatement stat=null; try { stat=getDBTransaction().createCallableStatement(PlSQLCode,getDBTransaction().DEFAULT); stat.setString(1, b_no); result=stat.executeUpdate(); } catch (Exception e) { // TODO: Add catch code System.out.println("eeeeeeeeeee"+e); System.out.println("dddddddddddddd"+PlSQLCode); e.printStackTrace(); } finally { try { stat.close(); } catch (Exception e) { // TODO: Add catch code e.printStackTrace(); } } setbal (BigDecimal.ZERO); System.out.println(COUNTER); System.out.println("xxxxxxx"+result); System.out.println("gggggggggggg"); return true; } مع خالص الشكر تقديم بلاغ
بتاريخ: 7 يونيو 20169 سنة comment_275534 متغيرات جافا لا يتم الوصول لها من كود PL لكن ما تقوم به هو جملة استعلام عادية جداً فلماذا تقوم بها باستخدام CallableStatement تقديم بلاغ
بتاريخ: 7 يونيو 20169 سنة كاتب الموضوع comment_275536 شكرا يا باشمهندس هو المطلوب من جملة SELECT اجيب قيمة المتغير COUNTER بناء على شرط معين بحيث منها اعرف ال ITEM موجود او اعتبره ITEM جديد وبالتالى عند الحفظ اعمل UPDATE ام INSERT وجملة SELECT على هذا النحو String PlSQLCode= "BEGIN\n" + "SELECT COUNT(*) INTO COUNTER "+ "FROM ITEMS\n" + "WHERE trim(b_no)=? ;\n" + "END;"; تقديم بلاغ
بتاريخ: 7 يونيو 20169 سنة comment_275541 يمكن أن تقوم بتنفيذها باستخدام PreparedStatement عادية أو لو تريد عملها بهذه الطريقة فيمكنك عمل out parameter لكن ما كتبته لا يصلح لأنك لم تقم بإرجاع قيمة المتغير counter بأي طريقة تقديم بلاغ
بتاريخ: 7 يونيو 20169 سنة كاتب الموضوع comment_275554 شكرا يا باشمهندس طيب ازاى اعمل ال OUT PARAMETER تقديم بلاغ
بتاريخ: 7 يونيو 20169 سنة comment_275579 في كود SQL تستطيع تعريف out parameter aa number out تقديم بلاغ
بتاريخ: 7 يونيو 20169 سنة كاتب الموضوع comment_275581 شكرا يا باشمهندس الكود بهذا الشكل COUUNTER Number out; BEGIN SELECT COUNT(*) INTO COUNTER FROM ITEMS WHERE trim(b_no)=? ; END; تقديم بلاغ
بتاريخ: 7 يونيو 20169 سنة comment_275583 لا ليس هكذا أنت تقوم بإنشاء procedure به out parameter وبالتالي تستطيع إرجاعه تقديم بلاغ
بتاريخ: 7 يونيو 20169 سنة كاتب الموضوع comment_275589 procedure create or replace PROCEDURE PROC_INS_UP_N_P_NO ( PARAM1 IN VARCHAR2 , PARAM2 OUT NUMBER ) AS BEGIN SELECT nvl(COUNT(*),0) INTO PARAM2 FROM ITEMS WHERE trim(b_no)= PARAM1; END PROC_INS_UP_N_P_NO; الكود اللى بينادى عليها بيعطى خطأ Error(444,56): incompatible types public boolean validateCHEKB_NO(String b_no) { int result=0; int COUNTER=0; String PlSQLCode="{CALL PROC_INS_UP_N_P_NO (?)"; CallableStatement stat=null; stat=getDBTransaction().createCallableStatement(PlSQLCode,getDBTransaction().DEFAULT); stat.setString(1, b_no); result=stat.execute(); try { } catch (Exception e) { // TODO: Add catch code System.out.println("eeeeeeeeeee"+e); e.printStackTrace(); } finally { try { stat.close(); } catch (Exception e) { // TODO: Add catch code e.printStackTrace(); } } setbal (BigDecimal.ZERO); System.out.println(COUNTER); System.out.println("xxxxxxx"+result); System.out.println("gggggggggggg"); return true; } تقديم بلاغ
بتاريخ: 7 يونيو 20169 سنة كاتب الموضوع comment_275594 شكرا يا باشمهندس قمت بتصحيح الخطأ وحاليا بعمل run للبرنامج للتأكد من صحة الكود بعد اضافة سطر COUNTER = stat.getInt(2); علشان اجيب قيمة المطلوبة من جملة sql تقديم بلاغ
بتاريخ: 7 يونيو 20169 سنة كاتب الموضوع comment_275600 الخطأ فى ال PROCEDURE java.sql.SQLException: ORA-06550: سطر 1 ، عمود 7 : PLS-00306: wrong number or types of arguments in call to 'PROC_INS_UP_N_P_NO' ORA-06550: سطر 1 ، عمود 7 : PL/SQL: Statement ignored create or replace PROCEDURE PROC_INS_UP_N_P_NO ( PARAM1 IN VARCHAR2 , PARAM2 OUT NUMBER ) AS BEGIN SELECT COUNT(*) INTO PARAM2 FROM ITEMS WHERE trim(b_no)=trim(PARAM1); END PROC_INS_UP_N_P_NO; public boolean validateCHEKB_NO(String b_no) { int result=0; int COUNTER=0; String PlSQLCode="{CALL PROC_INS_UP_N_P_NO (?)"; CallableStatement stat; stat=null; try { stat=getDBTransaction().createCallableStatement(PlSQLCode,getDBTransaction().DEFAULT); stat.setString(1,b_no); result=stat.executeUpdate(); COUNTER = stat.getInt(2); } catch (Exception e) { // TODO: Add catch code System.out.println("eeeeeeeeeee"+e); e.printStackTrace(); } finally { try { stat.close(); } catch (Exception e) { // TODO: Add catch code e.printStackTrace(); } } setbal (BigDecimal.ZERO); System.out.println(COUNTER); System.out.println("xxxxxxx"+result); System.out.println("gggggggggggg"); return true; } تقديم بلاغ
بتاريخ: 7 يونيو 20169 سنة comment_275602 أنت قمت بتغيير parameters ، أصبح هناك واحد in وواحد out بالتالي يجب تغيير كود الاستدعاء حيث أنك قمت باستخدام نفس الكود القديم تقديم بلاغ
بتاريخ: 7 يونيو 20169 سنة كاتب الموضوع comment_275609 قمت بتعديل كود الاستدعاء على هذا النحو String PlSQLCode="{CALL PROC_INS_UP_N_P_NO (?,?)"; وال procedure create or replace PROCEDURE PROC_INS_UP_N_P_NO ( PARAM1 IN VARCHAR2 , PARAM2 OUT NUMBER ) AS BEGIN SELECT COUNT(*) INTO PARAM2 FROM ITEMS WHERE trim(b_no)=trim(PARAM1); END PROC_INS_UP_N_P_NO; اعطانى خطأ جديد java.sql.SQLException: معامل IN أو OUT مفقود في الفهرس:: 2 تقديم بلاغ
بتاريخ: 7 يونيو 20169 سنة كاتب الموضوع comment_275612 الف شكر يا باشمهندس الكود اشتغل على هذا الوضع public boolean validateCHEKB_NO(String b_no) { boolean result=true; int COUNTER=0; String PlSQLCode="{CALL PROC_INS_UP_N_P_NO (?,?)"; CallableStatement stat; stat=null; try { stat=getDBTransaction().createCallableStatement(PlSQLCode,getDBTransaction().DEFAULT); stat.setString(1,b_no); stat.registerOutParameter(2, Types.INTEGER); result=stat.execute(); COUNTER = stat.getInt(2); stat.clearParameters(); } catch (Exception e) { // TODO: Add catch code System.out.println("eeeeeeeeeee"+e); System.out.println("hhhhhhhhhhh"+PlSQLCode); e.printStackTrace(); } finally { try { stat.close(); } catch (Exception e) { // TODO: Add catch code e.printStackTrace(); } } if (COUNTER==0){ setbal (BigDecimal.ZERO); setINS_UP_YN(0); System.out.println("zzzzzzzzz"+getbal()); } else { setINS_UP_YN(1); } System.out.println(COUNTER); System.out.println("YYYYYYY"+b_no); System.out.println("xxxxxxx"+result); System.out.println("zzzzzzz"+getINS_UP_YN()); System.out.println("gggggggggggg"); return true; } تقديم بلاغ
بتاريخ: 7 يونيو 20169 سنة comment_275614 جميل ولكن لا زلت أقول لك أنه لا داعي لاستخدام Procedure وتكفي جملة عادية تقديم بلاغ
بتاريخ: 8 يونيو 20169 سنة كاتب الموضوع comment_275628 حضرتك تقصد جملة داخل ال class ارجو التوضيح بمثال تقديم بلاغ
بتاريخ: 8 يونيو 20169 سنة comment_275655 يمكنك استخدام هذه الجملة داخل PreparedStatement SELECT COUNT(*) FROM ITEMS WHERE trim(b_no)=trim(PARAM1) راجع فيديو JDBC SELECT COUNT(*) INTO PARAM2 FROM ITEMS WHERE trim(b_no)=trim(PARAM1); END PROC_INS_UP_N_P_NO; تقديم بلاغ
بتاريخ: 9 يونيو 20169 سنة كاتب الموضوع comment_275729 شكرا يا باشمهندس وضحت الفكرة ولكن لو تكررت هذه الجمل فى اكثر من شاشة هل الافضل ان اكتبها داخل PreparedStatement كل مرة ام اعمل Procedure وهل كثرت ال procedure خطأ على ال database تقديم بلاغ
بتاريخ: 9 يونيو 20169 سنة comment_275731 ولكن لو تكررت هذه الجمل فى اكثر من شاشة هل الافضل ان اكتبها داخل PreparedStatement كل مرة ام اعمل Procedure يمكن عمل دالة بها الكود ويتم استدعاء الدالة بدلاً من كتابة الجملة في كل شاشة وهل كثرت ال procedure خطأ على ال database لا تقديم بلاغ
بتاريخ: 9 يونيو 20169 سنة كاتب الموضوع comment_275735 استخدمت ال preparedstatment بس اعطالى خطأ على جملة ResultSet rs = statee.executeQuery(); وهل يمكن ان استغنى عى ال parameter وادخل المتغيرات مسبوقة بحرف ال+ public boolean validateCHEKB_NO(String b_no) { int COUNTER =0; DCBindingContainer dcbc = (DCBindingContainer)BindingContext.getCurrent().getCurrentBindingsEntry(); Row row =dcbc.findIteratorBinding("ProdAddView2Iterator").getCurrentRow(); System.out.println("wwwwwwweeeeeeeeeeeee"); if (row!=null){ System.out.println("eeeeerrrrrrrrrrrrrrrr"); String bb_no =(String) row.getAttribute("BNo"); BigDecimal bbal1=(BigDecimal) row.getAttribute("BStock"); BigDecimal bbal2=(BigDecimal) row.getAttribute("QunIn"); BigDecimal bbal3=(BigDecimal) row.getAttribute("QunOut"); BigDecimal bbal= bbal1+bbal2-bbal3; String sql= "SELECT nvl(COUNT(*),0) INTO +COUNTER FROM ITEMS\n" + "WHERE trim(b_no)=trim(+bb_no)"; PreparedStatement statee = getDBTransaction().createPreparedStatement(sql, 1); ResultSet rs = statee.executeQuery(); if (rs.next()) { } else { } } catch (SQLException sqle) { // TODO: Add catch code sqle.printStackTrace(); } if (COUNTER==0){ setbal (BigDecimal.ZERO); setINS_UP_YN(0); System.out.println("zzzzzzzzz"+getbal()); } else { setINS_UP_YN(1); } System.out.println(COUNTER); System.out.println("YYYYYYY"+b_no); System.out.println("xxxxxxx"+result); System.out.println("zzzzzzz"+getINS_UP_YN()); System.out.println("gggggggggggg"); return true; } تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.