使用remove_constants工具查看Oracle是否使用绑定变量
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这个也是Tom大神写的工具。https://asktom.oracle.com/pls/asktom/f?p=100:11:::::P11_QUESTION_ID:1163635055580下面模拟没
千家信息网最后更新 2026年11月02日使用remove_constants工具查看Oracle是否使用绑定变量这个也是Tom大神写的工具。
https://asktom.oracle.com/pls/asktom/f?p=100:11:::::P11_QUESTION_ID:1163635055580
下面模拟没有绑定变量的环境,然后使用该工具查看
创建实验帐号
conn / as sysdba
create user edmond identified by edmond;
grant connect,resource,dba to edmond;
create table t(x int);
insert into t select rownum from dual connect by level<=10000;
create or replace procedure p1
as
l_cnt number;
begin
for i in 1 .. 10000
loop
execute immediate 'select count(*) from t where x=' || i into l_cnt;
end loop;
end;
/
在一个终端执行p1过程,开启另一个终端执行如下脚本:
set linesize 200;
col sql_text_wo_constants format a100;
可以看到结果如下,已经找到了没有绑定变量的语句。

https://asktom.oracle.com/pls/asktom/f?p=100:11:::::P11_QUESTION_ID:1163635055580
下面模拟没有绑定变量的环境,然后使用该工具查看
创建实验帐号
conn / as sysdba
create user edmond identified by edmond;
grant connect,resource,dba to edmond;
create table t(x int);
insert into t select rownum from dual connect by level<=10000;
create or replace procedure p1
as
l_cnt number;
begin
for i in 1 .. 10000
loop
execute immediate 'select count(*) from t where x=' || i into l_cnt;
end loop;
end;
/
在一个终端执行p1过程,开启另一个终端执行如下脚本:
- create table t1 as select sql_text from v$sqlarea;
- alter table t1 add sql_text_wo_constants varchar2(1000);
- create or replace function
- remove_constants( p_query in varchar2 ) return varchar2
- as
- l_query long;
- l_char varchar2(1);
- l_in_quotes boolean default FALSE;
- begin
- for i in 1 .. length( p_query )
- loop
- l_char := substr(p_query,i,1);
- if ( l_char = '''' and l_in_quotes )
- then
- l_in_quotes := FALSE;
- elsif ( l_char = '''' and NOT l_in_quotes )
- then
- l_in_quotes := TRUE;
- l_query := l_query || '''#';
- end if;
- if ( NOT l_in_quotes ) then
- l_query := l_query || l_char;
- end if;
- end loop;
- l_query := translate( l_query, '0123456789', '@@@@@@@@@@' );
- for i in 0 .. 8 loop
- l_query := replace( l_query, lpad('@',10-i,'@'), '@' );
- l_query := replace( l_query, lpad(' ',10-i,' '), ' ' );
- end loop;
- return upper(l_query);
- end;
- /
- update t1 set sql_text_wo_constants = remove_constants(sql_text);
set linesize 200;
col sql_text_wo_constants format a100;
- select sql_text_wo_constants, count(*)
- from t1
- group by sql_text_wo_constants
- having count(*) > 100
- order by 2
- /
可以看到结果如下,已经找到了没有绑定变量的语句。

变量
工具
终端
大神
环境
结果
脚本
语句
过程
帐号
实验
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
哈尔滨大商圈互联网科技有限公司
盈实互联网科技
朗新科技与工业互联网
互联网公司 科技公司
易互联网科技有限公司
互联网科技金融公司
无线互联网科技
互联网科技logo设计
苏州大垚互联网科技
互联网金融 科技创新
互联网科技博客
无锡溥仪互联网科技有限公司
华脉科技工业互联网产品
互联网科技教育视频
洛阳共同富裕互联网科技有限公司
威龙国际互联网科技公司
广西科技产业互联网是什么
上海万顺科技互联网有限公司招聘
杭州科技互联网公司有哪些
互联网科技企业文化
互联网新科技
科技类互联网
腾讯科技 互联网女皇
深圳卡尔迅互联网科技有限公司怎么样
承德科技产业互联网发展
栖莱科技互联网股份有限公司
互联网科技如何创业
黑科技 体验场景 互联网大会
易企秀互联网科技是做什么的
长沙易易互联网科技有限公司