请问怎么用plsql的语句,执行查出来的语句的储存过程

这是我的查询语句
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版本有关