有两个表:
ta{id, name,classid}
tb{id,classname}
想要得到 {id,name,classname}
其sql语句为:
select ta.id,ta.name,tb,classname
  from ta, tb
   where ta.classid=tb.id;
如果我想用存储过程实现,应该怎么写?

解决方案 »

  1.   

    存储过程里面不能直接select,只能
    select ... into
    其他一样。
      

  2.   

    在存储过程中,你必须可以把你选出来的记录用insert 插入到一个表中。
      

  3.   

    是想要实现什么?查询结果?
    insert into tmp_table
    (id,name,classname)
    select ta.id,ta.name,tb,classname
      from ta, tb
       where ta.classid=tb.id;
    commit;
      

  4.   

    create or replace procedure proc_get_records( v_cur out sys_refcursor)
    is
    begin
    open v_cur for
    select ta.id,ta.name,tb,classname
      from ta, tb
       where ta.classid=tb.id;
    end;
    /
      

  5.   

    --接上位大虾
    DECLARE
      V_CUR SYS_REFCURSOR;
      TYPE T IS RECORD(ID TA.ID%TYPE,NAME TA.NAME%TYPE,CLASSNAME TB.CLASSNAME%TYPE);
      V_C T;
    BEGIN
      PROC_GET_RECORDS(V_CUR);
      LOOP
        FETCH V_CUR INTO V_C;
        EXIT WHEN V_CUR%NOTFOUND;
        DBMS_OUTPUT.put_line(V_C.ID||V_C.NAME||V_C.CLASSNAME);
      END LOOP;
      CLOSE V_CUR;
    END;
    /
      

  6.   

    视图能搞定的坚决用视图:
    create or replace view tmp_table_view
    select ta.id,ta.name,tb,classname   
    from ta, tb    
    where ta.classid=tb.id视图不行的话,也可以用存储过程:
    create or replace procedure proc_get_records( v_cur out sys_refcursor)
    is
    begin
    open v_cur for
    select ta.id,ta.name,tb,classname
      from ta, tb
       where ta.classid=tb.id;
    end;
    /
      

  7.   

    太感谢了,今天终于知道我刚学习pl/sql的时候那个错误的原因了,原来是在存储过程中只能是
    insert into temp_table_name(
         column1,
         ...
    )
    select 
         column1,
         ...
    from table_name,...
    where ...
    这种形式啊,太开心了!谢谢大家