为了提高访问的效率, 减少代码应分析, 我们需要把所有的SQL都用存储过程来写。其中有一条存储过程是这样的:create or replace procedure PROC_FETCH_PART_BOMCHECK(Model_Par in varchar2,
Xcvr_Par in varchar2,
Part_result in out varchar2)
as
--part_temp varchar(50) := '';
attribute2_temp varchar2(25) := 'Y';
Cursor cursor_part IS select distinct part
from bom_check
where model = Model_Par
and xcvr = Xcvr_Par
and attribute2 = attribute2_temp;
begin
open cursor_part;
loop
begin
fetch cursor_part into Part_result;
exit when cursor_part%NOTFOUND;
end;
end loop;
close cursor_part;
end ;
编译和test都pass了但在SQL面板中测试却报:输出参数不是绑定变量的错误。调用代码如下:
call PROC_FETCH_PART_BOMCHECK('SK3650A','SK3650A','KAHN4059A')
请高人指点一下这是什么原因啊?thanks in advance.
Xcvr_Par in varchar2,
Part_result in out varchar2)
as
--part_temp varchar(50) := '';
attribute2_temp varchar2(25) := 'Y';
Cursor cursor_part IS select distinct part
from bom_check
where model = Model_Par
and xcvr = Xcvr_Par
and attribute2 = attribute2_temp;
begin
open cursor_part;
loop
begin
fetch cursor_part into Part_result;
exit when cursor_part%NOTFOUND;
end;
end loop;
close cursor_part;
end ;
编译和test都pass了但在SQL面板中测试却报:输出参数不是绑定变量的错误。调用代码如下:
call PROC_FETCH_PART_BOMCHECK('SK3650A','SK3650A','KAHN4059A')
请高人指点一下这是什么原因啊?thanks in advance.
解决方案 »
- oracle 10g中 Alter session set NVL_DATE_FORMATE='DD-MON-YYYY hh24:mi:ss' 改不了?
- oracle数据库可以登录的上。在myeclipse中连接数据库时就一直报the network adapter could not establish con
- 高分求助:只安装了oracle9的客户端如何使用sqlldr命令??
- 插入已经存在的数据时会报主键冲突,如何在插入语句中做判断,有冲突则不插入?
- 求update语句!请各位XDJM不吝赐教!
- 高分求救,oracle客户端如何远程(即不在同一局域网)访问oracle数据库服务器啊
- 如何把一个表的所有数据导入另外一个表?
- oracle存储过程的问题
- 数据库时间字段为什么不能插入?
- 请教个windows8下安装PL SQL Developer 工具栏显示问题
- 数据库里建表.有一项是Nullable这一项是什么意思?
- 大表操作如何尽量避免锁表
PROC_FETCH_PART_BOMCHECK('SK3650A','SK3650A','KAHN4059A')
可以这样var v_str varchar2(100);
exec :v_str:='KAHN4059A';
exec PROC_FETCH_PART_BOMCHECK('SK3650A','SK3650A',:v_str) ;
exec PROC_FETCH_PART_BOMCHECK('SK3650A','SK3650A',:v_str) ;是可行的为什么不更改Part_result in out varchar2 为Part_result in varchar2
是不是程序要调用这个过程取PART_RESULT的值?
String str1 = "{call PROC_FETCH_PART_BOMCHECK(?,?,?)}";
CallableStatement cstmt = con.prepareCall(str1);
cstmt.setString(1, "SK3650A");
cstmt.setString(2, "SK3650A");
cstmt.setString(3, "");
ResultSet rs =cstmt.executeQuery();
if(rs != null){ rs.next(); System.out.println(rs.toString());
System.out.println(rs.getString("Part_result")); System.out.println("result after");
}
结果是:222
111
oracle.jdbc.driver.OracleResultSetImpl@7259da
java.sql.SQLException: ORA-00900: 无效 SQL 语句 at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:180)
at oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java:208)
at oracle.jdbc.ttc7.v8Odscrarr.receive(v8Odscrarr.java:192)
at oracle.jdbc.ttc7.TTC7Protocol.describe(TTC7Protocol.java:592)
at oracle.jdbc.driver.OracleStatement.describe(OracleStatement.java:5496)
at oracle.jdbc.driver.OracleStatement.get_column_index(OracleStatement.java:5266)
at oracle.jdbc.driver.OracleResultSetImpl.findColumn(OracleResultSetImpl.java:698)
at oracle.jdbc.driver.OracleResultSet.getString(OracleResultSet.java:1505)
at resource.Puyo.main(Puyo.java:39)
说明它是在 System.out.println(rs.getString("Part_result")); 中出错的,
这个是没有影响的。
谁能告诉我上面Java代码报错的原因啊?
这个是没有影响的。
谁能告诉我上面Java代码报错的原因啊?
这个是没有影响的。
谁能告诉我上面Java代码报错的原因啊?
2、cursor给Part_result赋值只是取最后一条,这样取数太复杂了,效率有问题;
3、调用方法
cstmt.setString(1, "SK3650A");
cstmt.setString(2, "SK3650A");
cstmt.registerOutParameter(3, Types.VARCHAR);
cstmt.execute();
String testPrint = cstmt.getString(3);
谢谢,按你的建议改了下。 但是输出的结果是null, 返回去用sql直接查询了一下是有值的。