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
答案 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错误代码会有所帮助)。