-- Script Code为什么没共享
define sql_id = 'bs391f0yq5tpw';set serveroutput onDECLAREv_count number;v_sql varchar2(500);v_sql_id varchar2(30) := '&sql_id';
BEGINv_sql_id := lower(v_sql_id);dbms_output.put_line(chr(13)||chr(10));dbms_output.put_line('sql_id: '||v_sql_id);dbms_output.put_line('------------------------');FOR c1 in(select column_name from dba_tab_columnswhere table_name ='V_$SQL_SHARED_CURSOR'and column_name not in ('SQL_ID', 'ADDRESS', 'CHILD_ADDRESS', 'CHILD_NUMBER', 'REASON', 'CON_ID')order by column_id)LOOPv_sql := 'select count(*) from V_$SQL_SHARED_CURSORwhere sql_id='||''''||v_sql_id||''''||'and '||c1.column_name||'='||''''||'Y'||'''';execute immediate v_sql into v_count;IF v_count > 0THENdbms_output.put_line(' - '||rpad(c1.column_name,30)||' count: '||v_count);END IF;END LOOP;
END;
/
很清晰了,绑定变量不匹配
BIND_MISMATCH:绑定元数据与现有的子游标不匹配
ROLL_INVALID_MISMATCH:超过了滚动无效窗口。这是由DBMS_STATS的滚动无效功能引起的。因为它的无效窗口已经超过了,所以子游标不能被共享
BIND_LENGTH_UPGRADEABLE:绑定长度可升级,并且无法共享,因为一个绑定变量大小小于正在插入的新值(在早期版本中被标记为BIND_MISMATCH)。