2014-01-30 18 views
3

我想了解使用遊標(select ..)查詢的目的。例如,我從oracle doc獲得了這個。我可以加入員工與部門表。什麼是光標的處理?Oracle中的orcacle遊標(select ..)查詢的目的是什麼?

SELECT department_name, CURSOR(SELECT salary, commission_pct 
    FROM employees e 
    WHERE e.department_id = d.department_id) 
    FROM departments d 
    ORDER BY department_name; 
+2

該查詢將提取部門名稱以及對該部門中所有員工的工資和工資百分比的遊標引用。加入會在部門表中爲您提供多行,與相應的員工數匹配。並有一個有趣的討論[這裏](http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:7866466844558) –

+0

我們必須在有限的集合中提取查詢。如果大批量生產,我們可以將可能打開的遊標最大化。當以50個組打開時,50個遊標在取出後打開並關閉。與普通查詢的主要區別在於,我們可以在普通查詢(標量)中返回多個列/行,這可以通過CURSOR表達式來實現! –

回答

6

CURSOR表達式是一種很少使用的功能,它使您能夠將數據集傳遞給PL/SQL過程。

這允許高級功能,如鏈接並行流水線功能。這提供了快速處理程序代碼的多個階段的方式。例如,請參閱PL/SQL Language Reference

這是一個有趣的功能,但使用CURSOR表達式通常是一個巨大的錯誤。這意味着大多數處理將在PL/SQL而不是SQL中完成。 PL/SQL非常適合控制SQL,但它通常不是您想要執行繁重任務的地方。

我只看到用於兩個原因CURSOR表達式:

  1. 的開發者都沒有意識到的中級或高級SQL功能,如分析功能,型號等
  2. 建立企業規則引擎。
+0

@MaheswaranRavisankar謝謝,我會修改我的帖子,澄清我總是在討論CURSOR表達式,而不是所有類型的遊標。 –