我有一个项目,在该项目中,我必须检查某些客户是否可以从公司出售多少产品。客户可以有很多公司,当客户或产品不存在时,我也必须拒绝。
我在一张桌子上有客户和公司,然后在另一张桌子上有公司和产品。我正在尝试创建游标来管理“公司产品”表,只是客户可以从中购买的公司,但是当我声明游标时说“它不是游标”时,我尝试了%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;
戴维,谢谢。
答案 0 :(得分:1)
如果您准确地指定了Oracle错误 以及ORA-XXXXX
错误代码,将会很有帮助。用您的话说可能会含糊不清。
无论如何:您所说的确实是错误的。应该是
-- wrong: for empP in empC loop
for empP in empresaProducto loop
...
end loop;
因为empP
被声明为empresaProducto
游标变量。
尽管,您放入循环的SELECT
是没有意义的-您已经有了empP
,所以-为什么要再次插入循环中?考虑一下。