RT比如说我现在有3张表
  ——员工表create table emp (emp_id number(5), emp_name varchar2(20), emp_salary number(4));  ——部门表create table dept (dept_id number(3), dept_name varchar2(20), emp_id number(5));
   
——T_tempcreate table T_TEST( emp_id NUMBER not null,emp_name varchar2(20),emp_salary number(4),dept_id number(3),dept_name varchar2(20));编写存储过程,传入参数为员工编号,根据员工编号查询记录,把该员工的所在部门写入到T_temp表中.小弟是初学,还请各位高手给个答案,另外我想请大家介绍关于讲解oracle存储过程比较详细的书籍,在这里先谢谢大家了!!

解决方案 »

  1.   

    结合cursor实现
    因为他可以去整行的记录
    你也可以直接用insert into table()
    select * from table where .......... 
      

  2.   

    CREATE OR REPLACE PROCEDURE RPT_SELL_MONTH_REPORT (years IN VARCHAR2 ,months IN VARCHAR2,result OUT VARCHAR2)AS
    /******************************************************************************
    过程名:RPT_SELL_MONTH_REPORT
    参数:years: 年;
          months : 月;
    返回值:result 标志是否成功;1:--为成功;-1:--为失败;
    功能:生成预付费卡月报表。
    ******************************************************************************/ varResultSuccess VARCHAR2(2);
    varResultFailed VARCHAR2(2);  v_OrgId RPT_SELL_MONTH.Orgid%TYPE;
      v_CardtypeId RPT_SELL_MONTH.CARD_TYPE_ID%TYPE;
      v_FACE_VALUE RPT_SELL_MONTH.SELL_FACEVALUE%TYPE;
      v_Num RPT_SELL_MONTH.SELL_NUM%TYPE;
      v_Amount RPT_SELL_MONTH.Sell_Amount%TYPE;  --遍历本月销售,定义cursor
      CURSOR sellCursor IS
      SELECT bs.ORGID,
             bsi.CARD_TYPE_ID,
             SUM(bsi.NUM * bsi.FACE_VALUE),
             SUM(bsi.NUM),
             SUM(bsi.AMOUNT)
        FROM BUS_SELL bs,BUS_SELL_ITEMS bsi
       WHERE bs.processinstid = bsi.processinstid AND
             bs.WF_STOP_TYPE = 1 AND
             TO_CHAR(bs.SELL_DATE,'YYYYMM') = (years||months)
    GROUP BY bsi.CARD_TYPE_ID,bs.ORGID;
      BEGIN
           varResultSuccess := '1';
           varResultFailed := '-1';       SAVEPOINT sp1;
                --删除当前月已有记录
                DELETE FROM RPT_SELL_MONTH
                WHERE REPORT_YEAR = years AND
                      REPORT_MONTH = months;
                --查询符合条件的销售记录,生成报表记录
                OPEN sellCursor;
                LOOP
                     FETCH sellCursor INTO  v_OrgId,
                                            v_CardtypeId,
                                            v_FACE_VALUE,
                                            v_Num,
                                            v_Amount;
                     EXIT WHEN sellCursor%NOTFOUND OR sellCursor%NOTFOUND IS NULL;                    INSERT INTO RPT_SELL_MONTH ( RPT_ID,
                                                     CARD_TYPE_ID,
                                                     CARD_TYPE_NAME,
                                                     SELL_NUM,
                                                     SELL_FACEVALUE,
                                                     SELL_AMOUNT,
                                                     ORG_NAME,
                                                     ORGID,
                                                     ORGSEQ,
                                                     REPORT_YEAR,
                                                     REPORT_MONTH )
                         SELECT SEQ_SELLMONTH_ID.NEXTVAL,
                                dct.CARD_TYPE_ID,
                                dct.DESCR,
                                v_Num,
                                v_FACE_VALUE,
                                v_Amount,
                                eto.orgname,
                                v_OrgId,
                                eto.orgseq,
                                years,
                                months
                           FROM BD_CARD_TYPES dct,
                                EOSORG_T_ORGANIZATION eto
                          WHERE dct.CARD_TYPE_ID = v_CardtypeId AND
                                eto.ORGID = v_OrgId;            END LOOP;
                CLOSE sellCursor;
            COMMIT;
           result := varResultSuccess;
           RETURN;       EXCEPTION
              WHEN OTHERS THEN
                    ROLLBACK TO SAVEPOINT sp1;
               result := varResultFailed;
           RETURN;
      END RPT_SELL_MONTH_REPORT;
      

  3.   

    如果保存的表還沒創建,用create table t1 as select a.id,b.name from table1,table2
    如果已經創建,用for rc in (select a.id,b.name from table1,table2) 
                   loop
                     insert into t1(id,name) values(rc.id,rc.name);
                   end loop;