select在存储过程中这样使用行不行?
CODE:create or replace procedure test
(
  dd number
)
as
begin
   select * from res where a=dd;
end;表res已按要求建好,但此代码编译的时候总是过不了,请高手指教!

解决方案 »

  1.   


    --oracle的语法通不过
    --如果是简单的这个需求用一个sql语句就好了啊 没必要用过程
    --oracle中select出来的值要放到变量里
      

  2.   

    select * from res where a=dd;这里一定要用INTO 类似如下
    select 字段名 
    into 变量
     from res where a=dd;
      

  3.   

    如果表中要select的字段很多的话,就需要into很多变量,这样比较麻烦。有没有什么方法能一次select出所有的字段?
      

  4.   

    你就别select 了不,直接在过程中使用游标...declare
    --定义存储游标变量
    rowresult emp%rowtype;
    --定义游标
    cursor cur is select * from emp where sal >2000;
    begin
       open cur;--打开
         loop--循环
         fetch cur into rowresult;--提取
         exit when cur%notfound;--退出
         dbms_output.put_line('员工姓名:'||rowresult.ename);--从游标变量中取某个字段值
         end loop;
       close cur;--关闭
    end;
      

  5.   

    使用哪些字段select哪些字段吧,而且效率还高点
      

  6.   

    select在存储过程中这样使用行不行?
    CODE:create or replace procedure test
    (
      @dd int
    )
    as
    begin
      select * from res where a=@dd;
    end;
      

  7.   


    这个好像是SQLserver中的写法,在oracle中不能这样吧!
      

  8.   

    这种用法可以用,但是,在解析时是将@dd当作一个名字,所以,使用@dd跟前面的使用dd没什么区别。
    貌似这个存储过程有点问题吧,因为,你这并没有返回的值。返回的值没有用到变量里,当然就报错了。如果是返回的所有字段,可以使用游标,按4楼的来做。
      

  9.   

    -- Oracle 不像 SQL Server,能够直接在存储过程里使用select 语句,
    -- 当你必须返回结果集时,必须借助游标!
    -- 例如:
    -- 实例:Oracle存储过程返回数据集CREATE table userinfo(id number(18,0), name varchar2(30), sex varchar2(10), age number(3,0), address varchar2(100));insert into userinfo(id,name,sex,age,address) values(1,'luoyoumou','男',33,'湖南省衡阳市');
    insert into userinfo(id,name,sex,age,address) values(2,'miaoxiaoming','男',32,'江西省吉安市');
    insert into userinfo(id,name,sex,age,address) values(3,'hanqiguang','男',28,'江西省赣州市');commit;-- create table userinfo2 as select * from userinfo where 1=2;-- i_address 是存储过程的输入参数,o_cur是存储过程的输出游标参数,用以获取返回的结果集!
    CREATE OR REPLACE PROCEDURE userinfo_proc(i_address VARCHAR2, o_cur OUT SYS_REFCURSOR)
    IS
      sqlstr VARCHAR2(200); -- 定义变量,用以存放SQL语句
    BEGIN
      sqlstr := 'SELECT Id, Name, Sex, Age, Address FROM userinfo WHERE Address = :i_address'; -- 给SQL变量赋值,其中 :i_address 是绑定变量,以提高执行效率!
      OPEN o_cur FOR sqlstr USING i_address; -- 给游标变量赋值
    END;
    /
      

  10.   

    -- 测试:
    set serveroutput on;
    var c_cur refcursor;
    exec userinfo_proc('湖南省衡阳市',:c_cur);