表创建
create table student
(
stuId number primary key,
stuName varchar2(50),
stuAddress varchar2(100)
)
存储过程创建
create or replace procedure pro_demo
is
begin
       select * from student;
end存储过程执行
exec pro_demo2;存储过程创建成功
执行过程时报错:ora--009000 无效sql语句
想问各位到底哪个地方出现了问题?

解决方案 »

  1.   

    你不能用这样的语句:select * from student;
    要么写成
    select 字段 into 变量 from student;
    要么写成
    execute immediate 'select * from student;'
      

  2.   

    oracle的存储过程里不能写简单的select ... from ... ,这点不同于sql server
      

  3.   

    create or replace procedure pro_demo
    is
    begin
      dbms_output.line('');
      select * from student;
    end
      

  4.   

    嗯,这位哥肯定是从SQL SERVER转学ORACLE的。
    要返回结果集不能用SELECT * FROM STUDENT来实现。
    用要游标存储结果集的。
      

  5.   


    过程都是selet col into v_col from tb 的形式--改成这样 ,
    已写入 file afiedt.buf  1  create or replace procedure p1
      2  as
      3  v_sql varchar2(4000);
      4  begin
      5  v_sql:='select * from xs';
      6  execute immediate v_sql;
      7* end;
    SQL> /过程已创建。
      

  6.   

    楼上正解《
    楼主那样实现没有任何意义,可以试着看一下inset……根本没法确认结果
      

  7.   


    其实这样不是写的问题,就算这样写,也得不到他想要的结果集。应该告诉他怎么样才能得到他想要的结果~~
    其实我一直在想,那些问问题的人,是想要得到一条SQL还是要得到怎么想这条SQL的思想呢?
    很多人上CSDN问问题,存在着大部分是比上级压迫,让其写一条不在其当前能力范围内的SQL,于是就跑上来问了。
    ——然后遇到某大虾,给了他一SQL,他一执行,OK,于是便直接拷进他的系统里面,不加思索,也不会理会什么隐患。
    中国的软件太多这样的了,简直叫悲剧。
    ——我希望大家能真正地帮助这些人,CSDN应该是个学习的论坛,而不是注重分,或者等级的(貌似高分的帖子会多人,特别是灌水的帖子人气最旺,这根本与CSDN的目的背离,难道这是个灌水的平台吗?如果是的话,我道歉)。——在我的理解中,假如您能用文字的描述让对方自己写出这SQL,这比您用SQL语法来描述强多了。
    ——授人以鱼不如授人以渔,这道理我相信大家都会明白。说得太多了,在此道歉——我仅希望中国的软件文化能好起来。
      

  8.   

    最近也在学习PROCEDURE,学习中
      

  9.   

    使用存储过程时不能直接那样写select语句,要不先声明游标,要不就把字段放入变量中!!!
      

  10.   

    楼上正解游标存储 或者execute immediate执行