【问题标题】:insert select failed in oracle在 oracle 中插入选择失败
【发布时间】:2018-11-19 18:51:58
【问题描述】:

你好,我正在尝试使这个插入量很大,但它不起作用,甚至没有给我一些错误或警告

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;

结束;

【问题讨论】:

  • 如果不给你一个错误为什么不工作?
  • 你做了什么调试?您是否有 ID 范围为 1-50 的匹配产品?如果您删除(几乎总是错误的)EXCEPTION WHEN OTHERS 部分,或者至少在回滚后添加 RAISE,您是否看到错误? (我猜测 DETALLEVENTA 中的列可能与您选择它们​​的顺序不匹配,并且您会遇到隐式转换错误,但没有实际的错误和表定义,谁知道。也许只是没有数据。)

标签: oracle oracle11g oracle10g toad


【解决方案1】:

使用简单的 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

【讨论】:

  • 已经解决了,虽然没有修改过,可能是简单的人类愚蠢,谢谢大家的帮助
猜你喜欢
  • 2022-06-16
  • 2012-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-24
  • 2021-10-22
  • 1970-01-01
相关资源
最近更新 更多