เคอร์เซอร์สามารถชัดเจนหรือโดยนัยและทั้งสองประเภทสามารถใช้ในการวนรอบ FOR คำถามของคุณมีสองด้านจริงๆ
เหตุใดจึงต้องใช้เคอร์เซอร์ชัดเจนสำหรับการวนรอบเคอร์เซอร์โดยนัยสำหรับการวนลูป?
- ใช้เคอร์เซอร์ชัดเจนสำหรับวงเมื่อแบบสอบถามจะถูกนำมาใช้มิฉะนั้นเคอร์เซอร์โดยนัยเป็นที่ต้องการ
เหตุใดจึงใช้การวนซ้ำกับ FETCH แทนการวนซ้ำสำหรับ FOR ที่ไม่มี FETCH ชัดเจน
- ใช้ FETCH ภายในลูปเมื่อคุณต้องการรวบรวมเป็นกลุ่มหรือเมื่อคุณต้องการ SQL แบบไดนามิก
นี่คือข้อมูลที่มีประโยชน์จากเอกสาร
ตัวอย่างของเคอร์เซอร์โดยนัยสำหรับ LOOP
BEGIN
FOR vItems IN (
SELECT last_name
FROM employees
WHERE manager_id > 120
ORDER BY last_name
)
LOOP
DBMS_OUTPUT.PUT_LINE ('Name = ' || vItems.last_name);
END LOOP;
END;
/
ตัวอย่างของเคอร์เซอร์อย่างชัดเจนสำหรับ LOOP
DECLARE
CURSOR c1 IS
SELECT last_name
FROM employees
WHERE manager_id > 120
ORDER BY last_name;
BEGIN
FOR vItems IN c1 LOOP
DBMS_OUTPUT.PUT_LINE ('Name = ' || vItems.last_name);
END LOOP;
END;
/
เคอร์เซอร์โดยนัย
เคอร์เซอร์โดยนัยคือเคอร์เซอร์เซสชันที่สร้างและจัดการโดย PL / SQL PL / SQL เปิดเคอร์เซอร์โดยนัยทุกครั้งที่คุณเรียกใช้คำสั่ง SELECT หรือ DML คุณไม่สามารถควบคุมเคอร์เซอร์โดยนัย แต่คุณสามารถรับข้อมูลจากแอททริบิวของมันได้
เคอร์เซอร์โดยปริยายปิดหลังจากคำสั่งที่เกี่ยวข้องทำงาน อย่างไรก็ตามค่าแอททริบิวของมันจะยังคงอยู่จนกว่าจะมีคำสั่ง SELECT หรือ DML อื่นรัน
แอตทริบิวต์ของเคอร์เซอร์โดยนัยคือ: SQL% ISOPEN, SQL% FOUND, SQL% NOTFOUND, SQL% ROWCOUNT, SQL% BULK_ROWCOUNT, SQL% BULK_EXCEPTIONS
เคอร์เซอร์อย่างชัดเจน
เคอร์เซอร์ที่ชัดเจนคือเคอร์เซอร์เซสชันที่คุณสร้างและจัดการ คุณต้องประกาศและกำหนดเคอร์เซอร์ที่ชัดเจนโดยตั้งชื่อและเชื่อมโยงกับแบบสอบถาม (โดยทั่วไปแล้วแบบสอบถามจะส่งกลับหลายแถว) จากนั้นคุณสามารถประมวลผลผลลัพธ์แบบสอบถามที่ตั้งค่าด้วยวิธีใดวิธีหนึ่งต่อไปนี้:
เปิดเคอร์เซอร์ที่ชัดเจน (ด้วยคำสั่ง OPEN) ดึงแถวจากชุดผลลัพธ์ (ด้วยคำสั่ง FETCH) และปิดเคอร์เซอร์ที่ชัดเจน (ด้วยคำสั่ง CLOSE)
ใช้เคอร์เซอร์ที่ชัดเจนในเคอร์เซอร์สำหรับคำสั่ง LOOP (ดูที่ "การประมวลผลชุดผลลัพธ์แบบสอบถามด้วยเคอร์เซอร์สำหรับคำสั่ง LOOP")
คุณไม่สามารถกำหนดค่าให้กับเคอร์เซอร์ที่ชัดเจนใช้ในนิพจน์หรือใช้เป็นพารามิเตอร์โปรแกรมย่อยอย่างเป็นทางการหรือตัวแปรโฮสต์ คุณสามารถทำสิ่งเหล่านั้นด้วยตัวแปรเคอร์เซอร์ (ดูที่ "ตัวแปรเคอร์เซอร์")
ไม่เหมือนกับเคอร์เซอร์โดยปริยายคุณสามารถอ้างอิงเคอร์เซอร์หรือตัวแปรเคอร์เซอร์ที่ชัดเจนโดยใช้ชื่อ ดังนั้นเคอร์เซอร์หรือตัวแปรเคอร์เซอร์ที่ชัดเจนจึงเรียกว่าเคอร์เซอร์ที่มีชื่อ
เคอร์เซอร์สำหรับข้อความลูป
เคอร์เซอร์สำหรับคำสั่ง LOOP ช่วยให้คุณเรียกใช้คำสั่ง SELECT แล้ววนซ้ำแถวต่างๆของชุดผลลัพธ์ทันที คำสั่งนี้สามารถใช้เคอร์เซอร์โดยนัยหรือชัดเจน
FOR
เป็นอีกวิธีหนึ่งในการใช้เคอร์เซอร์ ดูเอกสาร: docs.oracle.com/cd/E11882_01/appdev.112/e10472/… อย่างไรก็ตาม htp.prn () ทำอะไร