declare
  l_line   varchar2(255);
  l_done   number;
  l_buffer long;
begin
  loop
    exit when length(l_buffer) + 255 > :1 OR l_done = 1;
    dbms_output.get_line(l_line, l_done);
    l_buffer := l_buffer || l_line || chr(10);
  end loop;
  :2      := l_done;
  :buffer := l_buffer;
end;--上面是过程
下面是jdbc 调用过程show_stmt.registerOutParameter(2, java.sql.Types.INTEGER);
show_stmt.registerOutParameter(3, java.sql.Types.VARCHAR);
for (;;) {
show_stmt.setInt(1, 32000);
show_stmt.executeUpdate();
System.out.print(show_stmt.getString(3));
if ((done = show_stmt.getInt(2)) == 1)
break;
}问题:java代码 里 1 2 3 是不是对应过程里的:1 :2 如果是,那3对应什么,过程里没有:3
还有过程疑问:
l_buffer 是long类型    length(l_buffer)是什么意思
 :2      := l_done;
  :buffer := l_buffer;  是什么意思

解决方案 »

  1.   

    上面是PL/SQL匿名块,不是过程。。你可以在java里面用拼字符串的方式这么做。
    1,2,3是对应里面的:1,:2,:3,匿名块里面加冒号表示是一个参数。length(l_buffer) 返回数值 l_buffer的长度,比如l_buffer为 1000,则返回4。
    :2 := l_done;
    将参数2的值设为 l_done.
    :buffer := l_buffer; 将参数buffer的值设为 l_buffer.
      

  2.   

    多问句,过程和PL/SQL匿名块有什么区别 
    还有上面的:3没有明显指出来,你怎么看出理绑定:buffer
      

  3.   

    :1和:2是两个绑定变量
    java代码中1对应:1   2对应:2   3对应你的: buffer (它也是个绑定变量)oracle中的long类型用于存储可变长字符串的 length就是求其长度 不要和java搞混了:2  := l_done和 :buffer := l_buffer就是给你的绑定变量赋值
      

  4.   

    因为buffer前面有冒号呀,凡是前面带冒号的就表示是个参数。
    匿名块和过程到底有啥区别,不是很清楚觉得可能匿名块每次都要检查整个块的语法错误,因为系统不会把匿名块留在数据库内部。而过程只在创建的时候检查一次语法错误,它被保存在数据库内部,可以通过执行的时候不检查语法只检查语义。
    你可以通过
    select * from user_objects where object_type='PROCEDURE';
    来看当前用户的过程,而匿名块则没有。