insert into t_a(fie1,fie2,...)(select fie1,fie2... from ...)

解决方案 »

  1.   

    如果字段都能对应上:
    insert into t_a (select '||var_1||','||var_2||',sum(row1) from t_b 
    where row2='||condition;
      

  2.   

    sSQL;='Insert T_A select :var_1,:var_2,sum(row1) from T_B where row2=' || 
    condition;                            ……
                                          |
    少了一个逗号to jiezhi(西域浪子) :
    一样的,我试了,错误也一样
      

  3.   

    var_1,var_2在执行语句前需要有值,否则肯定出错。
      

  4.   

    这样写都错误呢?
    declare
      comid integer:=1040001;
      v_yearmonth integer:=200201;
      sSQL varchar2(2000);
    begin
    sSQL:='INSERT INTO t_components_input_month select :comid,:v_yearmonth,sum(QUANTITY) from T_SALES' ;
    exec immediate sSQL;
    end;试了还是不行啊?我是传入一个函数的,var1,var2作为参数传
      

  5.   

    你没有给它传值。
    使用参数需要使用using语句:
    execute immediate sSql using ...
      

  6.   

    给你一个例子:
    CREATE OR REPLACE PROCEDURE "CLGZJSX" (VL_YGID in char,VL_BH in char)
    as
      CURSOR c_gz IS SELECT SZDWBH,LBBH,XMBH,XMMC,XMLB FROM T_GZJSXDY;
      g c_gz%ROWTYPE;
      dml_str VARCHAR2(300);
      XM Number(10,2);
      CNT INTEGER;
      MAX_NY Integer;
    BEGIN
      SELECT MAX(NF*100+YF) into MAX_NY FROM T_GZFFMX WHERE YGID=VL_YGID;
      if MAX_NY is not null then
        for g in c_gz loop
          SELECT COUNT(*) INTO CNT FROM T_YGGZSX WHERE XMBH=G.XMBH AND YGID=VL_YGID;
          IF CNT>0 THEN
            dml_str:='SELECT JE FROM T_YGGZSX WHERE XMBH='''||G.XMBH||''' AND YGID='''||VL_YGID||'''';
            EXECUTE IMMEDIATE dml_str INTO XM;
            insert into T_GZJSXGZXM(LBBH,XMBH,BH,SZDWBH,XMMC,XMLB,JE)
            Values(g.LBBH,g.XMBH,VL_BH,g.SZDWBH,g.XMMC,g.XMLB,XM);
          ELSE
            dml_str:='SELECT '||g.XMBH||' FROM T_GZFFMX WHERE NF*100+YF='||TO_char(MAX_NY)||' AND YGID='''||VL_YGID||'''';
            EXECUTE IMMEDIATE dml_str INTO XM;
            insert into T_GZJSXGZXM(LBBH,XMBH,BH,SZDWBH,XMMC,XMLB,JE)
            Values(g.LBBH,g.XMBH,VL_BH,g.SZDWBH,g.XMMC,g.XMLB,XM);
          END IF;  
        end loop;
      end if;