How to extract the value of bind variable in sql statement?

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.

How to extract the value of bind variable in sql statement?

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.

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=324932207&siteId=291194637