简单SQL问题

noteasytoregister 2011-10-27 10:29:55
1,
select * from dual;

2,
begin
select * from dual;
end;

第1句正确; 第2个语句块错了,提示“在select语句中缺少into子句”,请问为什么?
...全文
91 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
会说话的哑巴 2011-10-27
  • 打赏
  • 举报
回复
第二个是pl/sql块,必须有返回值
funfenffun 2011-10-27
  • 打赏
  • 举报
回复

begin
execute immediate 'select * from dual';
end;


这样是可以运行的,但是没有意义,在procedure里,你要把结果传出才有意义
funfenffun 2011-10-27
  • 打赏
  • 举报
回复

set serveroutput on;
declare v_name varchar2(30);
begin
--当输出只是一条记录时用into,多条记录时用游标
select table_name into v_name from user_tables where table_name='EMP';
dbms_output.put_line(v_name);
end;
cosio 2011-10-27
  • 打赏
  • 举报
回复
declare l_char varchar2(20);
2 begin
3 select * into l_char from dual;
4 dbms_output.put_line(l_char);
5 end;
6 /
yinan9 2011-10-27
  • 打赏
  • 举报
回复
第二句是PL/SQL 语句块,必须要有变量就收返回值,如2楼所示
BenChiM888 2011-10-27
  • 打赏
  • 举报
回复
第一个叫sql语句。
第二个叫匿名块,就是没有起名的plsql程序代码。


在plsql程序中,没有into字句的select 语句是没有意义的(这是oracle的规定)。

你可以这么理解:
1、直接写sql结果是可以显示出来供你只见看得,因此不用into
2、写在程序里面,查询的结果就是要利用的,因此需要放到into字句的变量里面。

opps_zhou 2011-10-27
  • 打赏
  • 举报
回复
oracle 块里不能直接 select


declare
text dual.dummy%type;
begin
select * into text from dual;
end;


cosio 2011-10-27
  • 打赏
  • 举报
回复
第二句是PL/SQL 输出的方式不一样!

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧