2016-02-15 17 views
0

在我的應用程序中,我只是調用數據庫相關活動的存儲過程。爲什麼要從客戶端應用程序調用PL/SQL調用SQL引擎?

對於與性能相關的查詢,我已經發布了一個問題here

羅布·卡羅回答了我的疑問,並且有一個聲明,他的回答像

*Each PLSQL call within your C++ app call invokes the SQL engine which then invokes the PLSQL engine for the procedure call*

我的問題是,爲什麼SQL引擎需要能夠同時調用PL/SQL叫什麼名字? 爲什麼我的客戶端應用程序不能直接調用PL/SQL引擎來處理PL/SQL?

回答

2

SQL引擎並不總是需要調用 - 它取決於客戶端以及客戶端是否嵌入了PLSQL引擎。例如,Oracle Forms有一個嵌入式PLSQL引擎,因此在調用PLSQL過程時,可以將整個調用傳遞給引擎,並且不發生上下文切換。然而,隨着PRO * C你總是執行SQL語句,然後執行PLSQL調用的「塊」是這樣的:

begin 
    call_proc; 
end; 

這已經調用SQL語法分析器,然後儘快切換到PLSQL引擎爲「開始」匿名塊被執行。這只是客戶端架構的方式。 SQL * Plus是類似的,你運行SQL引擎來調用PLSQL塊。

+0

很好的解釋。謝謝你 –

+0

爲什麼PL/SQL引擎沒有嵌入到PRO * C應用程序中是否有任何重要的原因? –

+0

因爲它非常顯着地擴大了客戶端。大多數客戶端包裝器都接受SQL和PLSQL調用,因此讓SQL引擎解析潛在的PLSQL塊是有意義的。這就是Pro * C和ODP.Net客戶端的工作原理。嵌入式PLSQL引擎的最好的兩個例子是Oracle Forms和Oracle Reports--兩者都是非常沉重的客戶端。 –

相關問題