customer ID
ve order ID
ve diğer bazı verileri içeren bir tablom var.Kayıt bulunamadığı zaman İstisnayı Yükselt
oluşturmak ve customer ID
girişini oluşturmak ve tablo içine bakmak istiyorum.
müşteri bir exception
yükseltmek ardından yoksa o müşteri daha sonra order
bu müşteri için ayrıntıları ve yazdırmak Varlığından eğer "Müşteri bulunamadı."
Bu koda sahibim, ancak düzgün çalışmıyor ya da belki de bu soruna yanlış yaklaşıyor. Bu hat
ile yordamı çalıştırırsanız sırası bu müşteri için varolduğu için
CREATE OR REPLACE PROCEDURE order_details(customer NUMBER)
IS
CURSOR order_cursor IS
SELECT ORDER_ID, ORDER_DATE, TOTAL, CUSTOMER_ID
FROM PRODUCT_ORDER
WHERE CUSTOMER_ID = customer ;
order_row order_cursor%ROWTYPE ;
customer_error EXCEPTION ;
BEGIN
FOR order_row IN order_cursor
LOOP
IF order_cursor%FOUND THEN
dbms_output.put_line ('order id = ' || order_row.ORDER_ID) ;
ELSE
RAISE customer_error ;
END IF;
END LOOP;
EXCEPTION
WHEN customer_error THEN
dbms_output.put_line ('no customer') ;
END;
Yani iki sonuç almak. Bu hat
BEGIN
order_details(101);
END;
ile yordamı çalıştırırsanız o müşteri için düzen yoktur çünkü
ve hiçbir şey (hatta hatası) alamadım.
Zaten çok bu denedim ve müşteri olmadığı zamanlarda bu konuda sorun, iyi çalışıyor, ama bu müşteri birden düzeni varsa müşteri var ve ne zaman, bunu Bu müşteri için yalnızca 1 sipariş çıktı olacak ve başka bir şey göstermeyecek. –
Tablodaki veriler için bir resim yüklüyorum, görebildiğiniz gibi 2 set verim var, örneğin müşteri kimliği = 104, ancak önerdiğin kodu kullanırsam, sadece bir tane veri alırdım, diğerini değil. –
Bu durumda LOOP - END LOOP kullanmak için kodu değiştirdim ve% rowcount ve% notfound öznitelikleri, bu nedenle tüm ORDER_ID değerini veya yoksa "müşteri yok" u gösterecek şekilde değiştirdim. –