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; 是什么意思
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,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.
还有上面的:3没有明显指出来,你怎么看出理绑定:buffer
java代码中1对应:1 2对应:2 3对应你的: buffer (它也是个绑定变量)oracle中的long类型用于存储可变长字符串的 length就是求其长度 不要和java搞混了:2 := l_done和 :buffer := l_buffer就是给你的绑定变量赋值
匿名块和过程到底有啥区别,不是很清楚觉得可能匿名块每次都要检查整个块的语法错误,因为系统不会把匿名块留在数据库内部。而过程只在创建的时候检查一次语法错误,它被保存在数据库内部,可以通过执行的时候不检查语法只检查语义。
你可以通过
select * from user_objects where object_type='PROCEDURE';
来看当前用户的过程,而匿名块则没有。