ورود

View Full Version : نحوه صدا زدن پروسیجر اوراکل در جاوا



sobaisobai
شنبه 15 آذر 1393, 07:09 صبح
سلام
دوستان من با این متد میخوام پروسیجری با نام ISC.IS_PRC_SMS_CHANGE_MAIN_V2 را صدا بزنم اما کار نمیکنه

public Object readFunction(String SCD_IN, long P_RANDOM_NO, long P_HCHR_CHR) {
Query query = em
.createNativeQuery("call ISC.IS_PRC_SMS_CHANGE_MAIN_V2 ( FLG_IN, SCD_IN, P_RANDOM_NO, P_HCHR_CHR, P_ERR_OUT, AST_OUT, P_JANBAZ, P_HAVE_NATIONALID )");
query.setParameter("FLG_IN2", 2);
query.setParameter("SCD_IN", SCD_IN);
query.setParameter("P_RANDOM_NO", P_RANDOM_NO);
query.setParameter("P_HCHR_CHR", P_HCHR_CHR);

return query.getSingleResult();
}

این ارور رو میده

node to traverse cannot be null!

این 4 تا پارامترهای ورودی هستن
FLG_IN, SCD_IN, P_RANDOM_NO, P_HCHR_CHR
و این 4 تا هم پارامتر خروجی که پروسیجر return میکنه
P_ERR_OUT, AST_OUT, P_JANBAZ, P_HAVE_NATIONALID
مشکل کجاست ؟
باتشکر از دوستان

ahmad.mo74
شنبه 15 آذر 1393, 09:39 صبح
سلام، فکر کنم نحوه صدا زدن پروسیجرتون اشتباهه، اینارو حتما ببینید :

http://stackoverflow.com/a/3180797/3767784
http://en.wikibooks.org/wiki/Java_Persistence/Advanced_Topics#Stored_Procedures

در ضمن از این راه هم برای صدا زدن پروسیجر میتونید استفاده کنید :


session.doWork(new Work() {
@Override
public void execute(Connection connection) throws SQLException {
CallableStatement statement = connection.prepareCall("{call ...}");
}
});


یعنی استفاده از CallableStatement.

این لینک ها رو هم ببینید :

http://www.mkyong.com/jdbc/jdbc-callablestatement-stored-procedure-in-parameter-example/
http://www.mkyong.com/jdbc/jdbc-callablestatement-stored-procedure-out-parameter-example/
http://www.mkyong.com/jdbc/jdbc-callablestatement-stored-procedure-cursor-example/
http://www.javacodegeeks.com/2013/09/java-stored-procedures-in-java-db.html

a_r711
شنبه 15 آذر 1393, 14:23 عصر
سلام قربان شما هیچ اشتباهی در کدتون نیس جز این که در JDBC باید برای پارامترها علامت : رو می گذاشتین
کدت رو به این صورت تغییر بده درست میشه

public Object readFunction(String SCD_IN, long P_RANDOM_NO, long P_HCHR_CHR) {
Query query = em
.createNativeQuery("call ISC.IS_PRC_SMS_CHANGE_MAIN_V2 ( :FLG_IN, :SCD_IN, :P_RANDOM_NO, :P_HCHR_CHR, :P_ERR_OUT, :AST_OUT, :P_JANBAZ, :P_HAVE_NATIONALID )");

query.setParameter("FLG_IN2", 2);
query.setParameter("SCD_IN", SCD_IN);
query.setParameter("P_RANDOM_NO", P_RANDOM_NO);
query.setParameter("P_HCHR_CHR", P_HCHR_CHR);

return query.getSingleResult();
}