insertar 1000 datos a una tabla con diferentes condiciones if o oracle

时间:2018-02-21 03:16:35

标签: oracle11g oracle-sqldeveloper

buenas noches queria consultar,cual seria la manera correcta de insertar los 1000 datos que devuelve el select into。

CREATE OR REPLACE PROCEDURE PA_INS_AUTO_TA (CUR OUT SYS_REFCURSOR)
IS
   c1   NUMBER (8) := 0;
BEGIN
   --la consulta devuelve 1000 datos
   SELECT campo1 INTO c1 FROM Tabla1;   --> you were missing a semi-colon here

   --
   IF c1 = 1
   THEN
      INSERT INTO tabla2 (ID,
                          T2CAMPO1,
                          T2CAMPO2,
                          T2CAMPO3,
                          T2CAMPO4)
         SELECT SEQ_ID.NEXTVAL,
                EXTRACT (MONTH FROM SYSDATE),
                1000,
                0,
                0
           FROM tabla3 t3 LEFT JOIN tabla2 t2 ON (t2.id = t3.idt2)
          WHERE EXTRACT (MONTH FROM SYSDATE) = EXTRACT (MONTH FROM SYSDATE);
   END IF;

   IF c1 = 2
   THEN
      INSERT INTO tabla2 (ID,
                          T2CAMPO1,
                          T2CAMPO2,
                          T2CAMPO3,
                          T2CAMPO4)
         SELECT SEQ_ID.NEXTVAL,
                EXTRACT (MONTH FROM SYSDATE),
                0,
                2000,
                100
           FROM tabla3 t3 LEFT JOIN tabla2 t2 ON (t2.id = t3.idt2)
          WHERE EXTRACT (MONTH FROM SYSDATE) = EXTRACT (MONTH FROM SYSDATE);
   END IF;
END PA_INS_AUTO_TA;

me muestra un error diciendo que devuelve muchos valores el select y no puede insertar

1 个答案:

答案 0 :(得分:0)

抱歉,我不会说西班牙语 - 如果你不会说英语,请使用谷歌翻译(就像我做的那样:)。

如果发布实际的Oracle错误代码(ORA-xxxxx),将会有所帮助。据我所知,你说甲骨文说SELECT返回了太多的值,无法执行INSERT。

嗯,这很可能错误。 INSERT INTO都需要5列,你提供了5列。但是,第一个SELECT(顺便说一下,它错过了一个分号):

SELECT campo1 INTO c1 FROM Tabla1
如果TABLA1包含多行,

可能会轻松返回TOO-MANY-ROWS(ORA-01422)。因此,您应该通过应用WHERE子句或使用聚合函数(例如MAX)来解决这个问题:例如:

SELECT campo1 INTO c1 FROM Tabla1
WHERE some_condition_goes_here_and_it_makes_sure_that_SELECT_returns_only_one_value

SELECT MAX(campo1) INTO c1 FROM Tabla1

如果我错了,请提供更多信息(正如我所说,ORA-xxxxx错误代码会有所帮助)。