【发布时间】:2022-06-29 17:55:25
【问题描述】:
这个问题似乎很简单。我已经建立了一个包,其中有一个相当大的光标,假设在我公司全年的所有发票上。
CURSOR c_invoices(p_year IN INTEGER) IS
SELECT all_invoices.invoicenumber,
all_invoices.invoicedate,
all_invoices.customernumber
FROM all_invoices
WHERE all_invoices.year = p_year
;
打开它并使用 LOOP 语句后,我想从另一个表 (forbidden_customers) 中获取一些数据,但前提是客户在最后一个表中。
我想做的是在我的包的最开始打开另一个游标(或 SELECT ?),浏览整个表(forbidden_customers),然后在我的发票循环中获取相应的记录.
所以,类似:
CURSOR c_forbidden_customers IS
SELECT forbidden_customers.customernumber,
forbidden_customers.customeradress
FROM forbidden_customers
;
然后:
OPEN c_invoices(v_year);
LOOP FETCH c_invoices INTO invoices_cursor;
BEGIN
EXIT WHEN c_invoices%NOTFOUND;
*IF invoices_cursor.customernumber IS FOUND IN c_forbidden_customers ...
THEN ...*
这就是我同时做的(我知道这很糟糕):
SELECT COUNT(*)
INTO v_exist /*INTEGER*/
FROM forbidden_customers
WHERE forbidden_customers.customernumber= p_customernumber
IF v_exist <> 0
THEN...
我尽量说清楚。感谢您的宝贵时间
【问题讨论】:
-
请edit 包含minimal reproducible example 的问题:
CREATE TABLE表的语句;一些样本数据的INSERT语句;您的代码的 MINIMAL 示例(或与您的代码类似的问题);您的代码的问题/错误;和预期的输出。
标签: oracle plsql database-cursor