这是我的查询语句
select
'call sys.dbms_shared_pool.purge('''||t.ADDRESS||','||t.hash_value||''',''c'')'
SQL_TEXT,sql_id, address, hash_value, executions, loads, parse_calls, invalidations
from v$sql t where t.SQL_ID = '71bmxtwqmdq43'
你是要把你的查询语句写成存储过程吗?可以这么写
create or replace procedure test_count
is
SQL_TEXT varchar(20);
begin
select 'begin sys.dbms_shared_pool.purge(''' || t.ADDRESS || ',' ||
t.hash_value || ''',''c''); end;' SQL_TEXT
from v$sql t
where t.SQL_ID = '3avukhwacnad6'
DBMS_OUTPUT.put_line(SQL_TEXT);
end;
-- 然后再调用就可以了
begin
test_count;
end;
如果能拿到存储过程源码
可以按这样操作:https://jingyan.baidu.com/article/3a2f7c2e144d2826aed61167.html
把查出来的命令当动态sql执行即可
begin
for rec in (select 'begin sys.dbms_shared_pool.purge(''' || t.ADDRESS || ',' ||
t.hash_value || ''',''c''); end;' SQL_TEXT
from v$sql t
where t.SQL_ID = '3avukhwacnad6') loop
execute immediate rec.sql_text;
end loop;
end;
/
上面我写成了循环, 是方便修改成其他查询条件也能执行
call() 调用存储函数即可
插个眼
把查询语句写成存储语句
create or replace procedure test_count
is
SQL_TEXT varchar(20);
begin
select 'begin sys.dbms_shared_pool.purge(''' || t.ADDRESS || ',' ||
t.hash_value || ''',''c''); end;' SQL_TEXT
from v$sql t
where t.SQL_ID = '3avukhwacnad6'
DBMS_OUTPUT.put_line(SQL_TEXT);
end;
-- 然后再调用就可以了
begin
test_count;
end;
是出现问题了吗?可以把报错贴出来好排查问题,这个具体和plsql版本有关