1,
select * from dual;2,
begin
  select * from dual;
end;第1句正确; 第2个语句块错了,提示“在select语句中缺少into子句”,请问为什么?

解决方案 »

  1.   

    第二句是PL/SQL 输出的方式不一样!
      

  2.   

    oracle 块里不能直接 select
    declare
        text         dual.dummy%type;
    begin
        select * into text from dual;
    end;
      

  3.   

    第一个叫sql语句。
    第二个叫匿名块,就是没有起名的plsql程序代码。
    在plsql程序中,没有into字句的select 语句是没有意义的(这是oracle的规定)。你可以这么理解:
    1、直接写sql结果是可以显示出来供你只见看得,因此不用into
    2、写在程序里面,查询的结果就是要利用的,因此需要放到into字句的变量里面。
      

  4.   

    第二句是PL/SQL 语句块,必须要有变量就收返回值,如2楼所示
      

  5.   

    declare l_char varchar2(20);
      2  begin
      3  select * into l_char from dual;
      4  dbms_output.put_line(l_char);
      5  end;
      6  /
      

  6.   


    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;
      

  7.   


    begin
      execute immediate 'select * from dual';
    end;
    这样是可以运行的,但是没有意义,在procedure里,你要把结果传出才有意义
      

  8.   

    第二个是pl/sql块,必须有返回值