When we are dealing with sql statement performance problems, many times, the extracted sql statement has bound variables and cannot be directly used to run. The following sql statement, if executed directly, will report errors such as no variable assignment.
SELECT A.RECIPE_ID
FROM CIS_OPD_CLINIC A, TABLE(xxx.STR2LIST(:B1 )) B
WHERE A.RECIPE_ID = B.COLUMN_VALUE
OR A.PARENTID = B.COLUMN_VALUE
ORA-01008: not all variables are bound.
So what is the specific value of this B1?
Immediately query the sql_id in v$sqlarea
SQL> SELECT sql_id, child_number , sql_text FROM v$sql WHERE upper(sql_text) Like '%SELECT A.RECIPE_ID FROM CIS_OPD_CLINIC A, TABLE(xxx.STR2LIST(:B1 )) B WHERE A.RECIPE_ID = B.COLUMN_VALUE OR A.PARENTID = B.COLUMN_VALUE%'
2 ;
SQL_ID CHILD_NUMBER SQL_TEXT
------------- ------------ --------------------------------------------------------------------------------
cn2c9mf5f9xda 0 SELECT sql_id, child_number , sql_text FROM v$sql WHERE upper(sql_text) Like '%
07zdmp13w1zw6 0 SELECT A.RECIPE_ID FROM CIS_OPD_CLINIC A, TABLE(ZLBASE.STR2LIST(:B1 )) B WHERE A
07zdmp13w1zw6 1 SELECT A.RECIPE_ID FROM CIS_OPD_CLINIC A, TABLE(ZLBASE.STR2LIST(:B1 )) B WHERE A
07zdmp13w1zw6 2 SELECT A.RECIPE_ID FROM CIS_OPD_CLINIC A, TABLE(ZLBASE.STR2LIST(:B1 )) B WHERE A
07zdmp13w1zw6 3 SELECT A.RECIPE_ID FROM CIS_OPD_CLINIC A, TABLE(ZLBASE.STR2LIST(:B1 )) B WHERE A
3akum7jd5b8j5 0 SELECT sql_id, child_number , sql_text FROM v$sql WHERE upper(sql_text) Like
bjvppgp4jrfh8 0 SELECT sql_id, child_number , sql_text FROM v$sql WHERE upper(sql_text) Like '
2na7kxsh0msa6 0 select sql_id, address, hash_value, executions, loads, parse_calls, invalidation
8 rows selected
View through the following sql statement
SELECT name ,position,datatype_string,was_captured,value_string
FROM v$sql_bind_capture
WHERE sql_id = '&SQLID';
SQL> SELECT name ,position,datatype_string,was_captured,value_string
2 FROM v$sql_bind_capture
3 WHERE sql_id = '&SQLID';
Input: 07zdmp13w1zw6
SQL>
NAME POSITION DATATYPE_STRING WAS_CAPTURED VALUE_STRING
------------------------------------------------------------ ---------- ------------------------------ ------------ --------------------------------------------------------------------------------
:B1 1 VARCHAR2(2000) NO
:B1 1 VARCHAR2(2000) NO
:B1 1 VARCHAR2(128) NO
:B1 1 VARCHAR2(128) NO
In this way, we have found the value of: B1, substitute it into the original sql, and it can be executed normally.
Chongqing Sizhuang's April 2018 OCP certification training weekend class is being taught, welcome to contact for an audition! The new OCP weekend class will start on June 2nd, registration is hot, and places are limited, please book in advance! For more details, visit the Sizhuang website to consult online customer service.