代码为:
create or replace procedure ts as
begin
select * from bbb;
end;
/运行是提示如下错误:
PROCEDURE TS 出现错误:LINE/COL ERROR
-------- -----------------------------------------------
3/1      PLS-00428: 在此 SELECT 语句中缺少 INTO 子句
3/1      PL/SQL: SQL Statement ignored这是什么原因。应如何决解决。

解决方案 »

  1.   

    我想用存储过程输出表数据。但是plsql确提示错误。难道plsql不能想sql2000一样输出表数据????
      

  2.   

    select * from bbb; 要用execute immeidate 'select * from bbb';来执行
      

  3.   

    好像不是你那样写的吧,
    为什么要用存储过程输出表数据那么麻烦呢,
    直接用select语句不就可以输出了吗,干嘛那么麻烦
      

  4.   

    谢谢
    错误:PLS-00103: 出现符号 "IMMEIDATE"在需要下列之一时:
            := . ( @ % ;
              immediate
           符号 ":=在 "IMMEIDATE" 继续之前已插入。我按照您写法。报以上错误怎么了?
      

  5.   

    给你个例子create or replace procedure f_t_03_player
    (
    v_player_id in varchar2,'这是你要传进来的值
    v_player_name out varchar2,'这是你要输出的值
    v_player_sex out varchar2,'这是你要输出的值
    v_player_age out varchar2,'这是你要输出的值
    v_team_id out varchar2'这是你要输出的值
    )
    as
    begin
    select player_name,player_sex,player_age,team_id into v_player_name,v_player_sex,v_player_age,v_team_id from t_03_player where player_id = v_player_id;
    end;在java中的是这样写的public Team find2(String playerId) {
    Connection conn = null;
    //PreparedStatement pstmt = null;
    CallableStatement cstmt = null;
    //ResultSet rs = null;
    String sql = "{call f_t_03_player(?,?,?,?,?)}";
    Team team = new Team();
    DBUtil util = new DBUtil();
    conn = util.openConn();
    try {
    cstmt = conn.prepareCall(sql);
    cstmt.setString(1, playerId);
    cstmt.registerOutParameter(2, Types.VARCHAR);'在这里虽然你没有值,但是你也要注册一个数,这样才保证你用存储过程找出的值还能拿回来
    cstmt.registerOutParameter(3, Types.VARCHAR);
    cstmt.registerOutParameter(4, Types.VARCHAR);
    cstmt.registerOutParameter(5, Types.VARCHAR);
    cstmt.execute();
    team.setPlayerId(playerId);
    team.setPlayerName(cstmt.getString(2));
    team.setPlayerSex(cstmt.getString(3));
    team.setPlayerAge(cstmt.getString(4));
    team.setTeamId(cstmt.getString(5));
    System.out.println("========="+cstmt.getString(2));
    System.out.println("========="+cstmt.getString(3));
    System.out.println("========="+cstmt.getString(4));
    System.out.println("========="+cstmt.getString(5));

    } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }

    return team;
    }
    希望能对你有所帮助
      

  6.   

    sys@ORCL(192.168.21.110)> create or replace procedure p_tt
      2  as
      3   begin
      4      execute immediate 'select * from ttt';
      5  end;
      6  /过程已创建。已用时间:  00: 00: 00.32
    sys@ORCL(192.168.21.110)> exec p_tt;PL/SQL 过程已成功完成。
      

  7.   

    我现在是想直接输出一个表的数据。Michael您好。您是输入了一个值。提取了一条记录。
      

  8.   

    试试声明两个变量,将SELECT的数据赋予变量,再用DBMS_OUTPUT输出值
      

  9.   

    这样写是把一些东西给省了,我想你只是举例来说明存储过程的结构吧,我举个简单的例子(创造一个显示雇员总数的存储过程)
    create or replace procedure EMP_COUNT 
      as
       v_total number;
      begin 
       select count(*) into v_tatal from emp;
       dbms_output.put_line('雇员总人数为:'||v_total); 
    end;调用存储过程的时候用execute EMP_COUNT 就可以了!
      

  10.   


    SQL> select * from ttt;        ID DATE1
    ---------- --------------
          2222
           232SQL> create or replace procedure test_p
      2  as
      3  begin
      4    for test_cursor in (select * from ttt) loop
      5      dbms_output.put_line(test_cursor.id);
      6    end loop;
      7  end;
      8  /过程已创建。SQL> exec test_pPL/SQL 过程已成功完成。SQL> set serveroutput on
    SQL> exec test_p
    2222
    232PL/SQL 过程已成功完成。
    用游标可以显示,但是多列的情况下比较麻烦