首页 > 解决方案 > 声明一个游标在开始后使用它

问题描述

我有一个项目,我必须检查是否有多少产品可以从公司出售给某些客户。一个客户可以有很多公司,当客户或产品不存在时,我也必须拒绝。

我有一张桌子有客户和公司,然后我有另一张桌子有公司和产品。我正在尝试创建游标以在“公司产品”表上进行管理,只是客户可以从中购买的公司,但是当我声明游标时它说“它不是游标”,我尝试了 %rowtype,也是 %type,但都不起作用。有谁知道我该如何解决?

CREATE OR REPLACE PROCEDURE Transaccion
IS
   my_cantidaRechazada   NUMBER;

   CURSOR peti
   IS
        SELECT idCliente, idProducto, cantidadPedido
          FROM TABLAS_COMP.peticiones
      ORDER BY idCliente ASC;

   CURSOR empresaCliente
   IS
        SELECT *
          FROM TABLAS_CL.empresacliente
      ORDER BY tablas_cl.empresacliente.empresa;

   empC                  empresaCliente%ROWTYPE;

   CURSOR empresaProducto (vempresa NUMBER)
   IS
        SELECT *
          FROM TABLAS_PRO.empresaproducto
         WHERE empresa = vempresa
      ORDER BY tablas_pro.empresaproducto.empresa ASC;

   empP                  empresaProducto%ROWTYPE;
BEGIN
   FOR cont IN peti
   LOOP
      IF existecliente (cont.idCliente) = 0
      THEN
         my_cantidaRechazada := cont.cantidadPedido;

         INSERT INTO TABLAS_COMP.rechazados
              VALUES (cont.idCliente,
                      cont.idProducto,
                      cont.cantidadPedido,
                      my_cantidaRechazada);
      ELSIF existeproducto (cont.idProducto) = 0
      THEN
         my_cantidaRechazada := cont.cantidadPedido;

         INSERT INTO TABLAS_COMP.RECHAZADOS
              VALUES (cont.idCliente,
                      cont.idProducto,
                      cont.cantidadPedido,
                      my_cantidaRechazada);
      END IF;

        SELECT *
          INTO empC
          FROM TABLAS_CL.empresacliente
         WHERE Cliente = cont.idCliente
      ORDER BY empresa ASC;


      FOR empP IN empC
      LOOP -- (here's where the error is showed, it says "empC it's not a cursor")
         SELECT *
           INTO empP
           FROM TABLAS_PRO.empresaproducto
          WHERE Empresa = empC.Empresa;
      END LOOP;
   END LOOP;
END Transaccion;

在此先感谢大卫。

标签: oracleplsql

解决方案


如果您准确地指定了 oracle error以及ORA-XXXXX错误代码,将会有所帮助。用你的话来说可能是模棱两可的。

无论如何:你指出的是错误的,真的。应该

-- wrong: for empP in empC loop
for empP in empresaProducto loop
   ...
end loop;

因为empP被声明为empresaProducto游标变量。

虽然,SELECT你放入循环是没有意义的 - 你已经有了empP,所以 - 你为什么要再次插入它?想一想。


推荐阅读