create or replace procedure my_proc(i int) is
begin
while i<20 loop
insert into test values(i,'avb');
i := i+1;
end loop;
end;
begin
while i<20 loop
insert into test values(i,'avb');
i := i+1;
end loop;
end;
解决方案 »
- ORACLE的表导为MDB格式
- Oracle 主键设置自增的问题
- 关于ORA-39082。请问谁有metalink账号,能否帮我查下这个错误:Doc ID:460267.1
- 请问在 plus 里如果修改package的存储过程
- 自增字段用"序列"一定要用"触发器"吗?用"触发器"和不用"触发器"有什么不同啊?
- round函数是oracle特有的吗
- PL的问题请高手帮忙
- 用SQL语句如何向ORACLE数据库中写入时间或日期
- 请教各位大虾:怎样获得Access数据库里表中字段的属性(size,type等)!在线等待!急!必有重谢!
- 怎样将foxbase数据库和sqlserver数据库导成文本,最好是csv格式.
- 想创建一个带输出结果集的过程出现问题
- ORACLE保存问题
Warning: 执行完毕, 但带有警告
Warning: 执行完毕, 但带有警告在行 25 上开始执行命令时出错:
exec my_proc1(12)
错误报告:
ORA-06550: 第 1 行, 第 7 列:
PLS-00905: 对象 SYSTEM.MY_PROC1 无效
ORA-06550: 第 1 行, 第 7 列:
PL/SQL: Statement ignored
06550. 00000 - "line %s, column %s:\n%s"
*Cause: Usually a PL/SQL compilation error.
*Action:
-------- -----------------------------------------------------------------
5/3 PL/SQL: Statement ignored
5/3 PLS-00363: expression 'I' cannot be used as an assignment target-- 传入的参数 i 在 while 循环中不应该被引用,这个时候应该用for 循环
-- 修改为:create or replace procedure my_proc(i int) is
begin
for t in 1..i loop
insert into test values(t,'avb');
end loop;
commit; -- 别忘记提交
end;
/
lym@TDWORA> exec my_proc(30);PL/SQL procedure successfully completed.lym@TDWORA> select * from test; ID CNAME
---------- --------------------
1 avb
2 avb
3 avb
4 avb
5 avb
6 avb
7 avb
8 avb
9 avb
10 avb
11 avb
12 avb
13 avb
14 avb
15 avb
16 avb
17 avb
18 avb
19 avb
20 avb
21 avb
22 avb
23 avb
24 avb
25 avb
26 avb
27 avb
28 avb
29 avb
30 avb30 rows selected.
-- 因为你要在 while 中不断递减这个参数,而传入的参数是不能修改的;
-- 你还可以这样:在存储过程中定义一个局部变量,先接收传入的参数,然后用局部变量递减:
-- 详细代码如下:
create or replace procedure my_proc(i int) is
v_i int;
begin
v_i := i; -- 接收传入的参数值
while v_i > 0 loop
insert into test values(v_i,'avb');
v_i := v_i - 1;
end loop;
commit; -- 别忘记提交
end;
/
-- 还有:
create or replace procedure my_proc(i int) is
begin
while i<20 loop
insert into test values(i,'avb');
i := i+1;
end loop;
end;-- 如果你传入的参数少于20,程序会进入死循环!
这应该是
insert into test values(i,'avb');语句的问题检查test表的字段数量,例如test有3个字段 a,b,c
insert into test (a,b) values(i,'avb')这样写