вставить не удалось в оракуле - PullRequest
0 голосов
/ 19 ноября 2018

привет, я пытаюсь сделать эту вставку массивной, но она не работает, даже не выдает мне ошибки или предупреждения

Переменные idproduct, precio и fkproovedor взяты из другой таблицы

DECLARE
RAN_PRODUCT   NUMBER;
RAN_CANT      NUMBER;
NVENTA        NUMBER;
MVENTA        NUMBER;
MT            NUMBER;
BEGIN
SELECT MIN (IDVENTA) INTO NVENTA FROM marcos.VENTA;

SELECT COUNT (IDVENTA) INTO MVENTA FROM MARCOS.VENTA;



FOR loop_one IN 1 .. 10
LOOP
  FOR loop_TWO IN 1 .. 2
  LOOP
     SELECT (1 + ABS (MOD (DBMS_RANDOM.random, 50)))
       INTO RAN_PRODUCT
       FROM DUAL;

     SELECT (1+ABS(MOD(dbms_random.random,10)))
       INTO RAN_CANT
       FROM DUAL;

     INSERT INTO marcos.DETALLEVENTA
        SELECT SEQ_DTEVENTA.NEXTVAL AS IDDETAVENTA,
               PRECIO AS PRECIO,
               RAN_CANT AS CANTIDAD,
               RAN_PRODUCT AS FKPRODUCTO,
               FKPROOVEDOR AS FKPROVEEDOR,
               NVENTA AS FKVENTA
          FROM MARCOS.PRODUCTO
         WHERE IDPRODUCTO = RAN_PRODUCT;
  END LOOP;


  NVENTA := NVENTA + 1;
END LOOP;

COMMIT;
EXCEPTION
WHEN OTHERS
THEN
  DBMS_OUTPUT.put_line ('Se ha producido un error');
  ROLLBACK;

END;

1 Ответ

0 голосов
/ 19 ноября 2018

Используйте простой оператор INSERT ... SELECT вместо кода PL / SQL, как это

INSERT INTO DETALLEVENTA( IDDETAVENTA,PRECIO,CANTIDAD,FKPRODUCTO,FKPROVEEDOR,FKVENTA )
SELECT SEQ_DTEVENTA.NEXTVAL AS IDDETAVENTA,
       PRECIO AS PRECIO,
       RAN_CANT AS CANTIDAD,
       RAN_PRODUCT AS FKPRODUCTO,
       FKPROOVEDOR AS FKPROVEEDOR,
       (SELECT MIN (IDVENTA) FROM marcos.VENTA) AS FKVENTA
FROM PRODUCTO p
JOIN (
    SELECT (1 + ABS (MOD (DBMS_RANDOM.random, 50))) as RAN_PRODUCT,
           (1+ABS(MOD(dbms_random.random,10)))  as RAN_CANT
    FROM (
        select 1 from dual connect by level <= 10 * 2
    )
) x 
ON p.IDPRODUCTO = x.RAN_PRODUCT
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...