從this解釋在askTom,硬解析和軟解析之間的差別,甲骨文 - 軟解析和硬質的區別解析
加載到共享池 - 的SQL代碼加載到RAM中 解析。 (「硬」解析步驟)
這一步不是在軟解析中完成的。
現在,假設我們執行以下塊:
DECLARE
v_emp_no number;
BEGIN
v_emp_no := 6675;
SELECT EMP_NAME FROM EMPLOYEES WHERE EMPLOYEE_NO = v_emp_no; --STEP 1
v_emp_no := 1234;
SELECT EMP_NAME FROM EMPLOYEES WHERE EMPLOYEE_NO = v_emp_no; --STEP 2
END;
兩者的發言(步驟1和步驟2)是完全相同的,並且使用綁定變量(宿主變量和變量綁定在PLSQL實際上相同) 所以這裏應該有一個軟解析。
但
的查詢SQL源代碼不能同樣在這裏,本質上是
STEP 1 = SELECT EMP_NAME FROM EMPLOYEES WHERE EMPLOYEE_NO = 6675;
STEP 2 = SELECT EMP_NAME FROM EMPLOYEES WHERE EMPLOYEE_NO = 1234;
那麼Oracle如何做一個軟解析在步驟2,本質上是查詢和源代碼應該與第1步不同?
'PS:從PL/SQL執行SQL時應使用SELECT INTO:是的,我的查詢只是爲了舉例。 所以你的意思是說在這種情況下甚至不會有軟解析? – Arnab 2014-10-09 10:58:32
@Arnab - 是的。在跟蹤文件中,您將看到:PARSE CURSOR#1,EXECUTE CURSOR#1(綁定變量值6675),EXECUTE CURSOR#1(綁定變量值12345)。當您從另一個會話執行同一個塊時,將發生軟解析。 – ibre5041 2014-10-09 11:12:03