begin
for a in 1..1000000 loop
select * from p_tab where a=1 and b=1;
end loop;
end;
/
为什么会报
ERROR at line 3:
ORA-06550: line 3, column 5:
PLS-00428: an INTO clause is expected in this SELECT statement
呢
单独执行返回的结果有33行
使用pl/sql让一条sql执行100000次
答案:3 悬赏:0 手机版
解决时间 2021-01-28 11:15
- 提问者网友:佞臣
- 2021-01-27 21:50
最佳答案
- 五星知识达人网友:撞了怀
- 2021-01-27 22:26
因为您这个是PL/SQL, 所以对于 select 查询必须有赋值, 如果要改进 有好几种办法
所以 您的代码可以改为:
1. 第一种是笨办法 有缺陷,写在这里的目的是您可以做个比较,或者是作为学习的参考方法
declare
vcol1 type ;
vcol2 type ;
begin
for a in 1..1000000 loop
select col1, col2 into vcol1, vcol2 from p_tab where a=1 and b=1;
end loop;
end;
这个办法也就是给他赋值了, 这样修改其实仅仅是让您的代码能运行下去, 不至于出现语法错误。
这个方法的错误之处在于:
a. 如果 select返回的数值不唯一, 那么就会报错
b. 如果 select返回的数值为空,也不能赋值,也会报错
c. 如果您是为了测试数据库中select运行的速度, 所以运行1百万次, 然后通过其他方法得出运行总体的运行速度, 那么这里的操作在数据库内部增加了赋值功能, 则也不准确。
----------------------------------------------------------------------------------------------------------------------
方法2:
begin
for a in 1..1000000 loop
execute immediate 'select * from p_tab where a=1 and b=1' ;
end loop;
end;
所以 您的代码可以改为:
1. 第一种是笨办法 有缺陷,写在这里的目的是您可以做个比较,或者是作为学习的参考方法
declare
vcol1 type ;
vcol2 type ;
begin
for a in 1..1000000 loop
select col1, col2 into vcol1, vcol2 from p_tab where a=1 and b=1;
end loop;
end;
这个办法也就是给他赋值了, 这样修改其实仅仅是让您的代码能运行下去, 不至于出现语法错误。
这个方法的错误之处在于:
a. 如果 select返回的数值不唯一, 那么就会报错
b. 如果 select返回的数值为空,也不能赋值,也会报错
c. 如果您是为了测试数据库中select运行的速度, 所以运行1百万次, 然后通过其他方法得出运行总体的运行速度, 那么这里的操作在数据库内部增加了赋值功能, 则也不准确。
----------------------------------------------------------------------------------------------------------------------
方法2:
begin
for a in 1..1000000 loop
execute immediate 'select * from p_tab where a=1 and b=1' ;
end loop;
end;
全部回答
- 1楼网友:痴妹与他
- 2021-01-27 23:51
你好!
ORA-06550: line 3, column 5:
select column_name1,column_name2,column_name3,column_name4,column_name5 into v1,v2,v3,v4,v5form p_tab where a=1 and b=1;
希望对你有所帮助,望采纳。
- 2楼网友:末日狂欢
- 2021-01-27 23:24
select 在pl/sql 里面用 必须加 into
另外 单次查询 只能有一条结果
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯