oracle - 声明一个游标在开始后使用它
问题描述
我有一个项目,我必须检查是否有多少产品可以从公司出售给某些客户。一个客户可以有很多公司,当客户或产品不存在时,我也必须拒绝。
我有一张桌子有客户和公司,然后我有另一张桌子有公司和产品。我正在尝试创建游标以在“公司产品”表上进行管理,只是客户可以从中购买的公司,但是当我声明游标时它说“它不是游标”,我尝试了 %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;
在此先感谢大卫。
解决方案
如果您准确地指定了 oracle error以及ORA-XXXXX
错误代码,将会有所帮助。用你的话来说可能是模棱两可的。
无论如何:你指出的是错误的,真的。应该
-- wrong: for empP in empC loop
for empP in empresaProducto loop
...
end loop;
因为empP
被声明为empresaProducto
游标变量。
虽然,SELECT
你放入循环是没有意义的 - 你已经有了empP
,所以 - 你为什么要再次插入它?想一想。
推荐阅读
- tensorflow - 将 NumPy 数组加载到张量中
- sql - 将 varchar 转换为 Decimal 时出错
- html - 如何使用beautifulsoup获取另一个标签内的span标签内的文本?
- powershell - 遍历多个值的行
- android - dispatchTouchEvent 中的 ACTION_UP 事件被延迟触发
- entity-framework - 尝试从 SAP HANA DB 创建实体模型时出现连接错误
- javascript - 如何使用引导程序 4 按钮组向复选框表单添加最大值
- linux - 如何在不使用 inotifywait 的情况下监视目录的文件更改?
- azure - 创建 Visual Studio Team System 帐户时,我可以使用我们公司的 Azure AD 作为用户存储吗?
- rest - 在 REST API 中处理用户偏好/状态