ORACLE 用sys.dbms_sql执行SQL例

下面实例用sys.dbms_sql执行sql例,可以选择SELECT 返回值也可选择FUNCTION调用返回值,具体运用要视实际情况做修改

function GetsqlResult(

data_sql_ in varchar2) return varchar2
is
sDatasql varchar2(2000);
sReturn varchar2(200);
cid_ number;
rows_ number;
stmt_ varchar2(2000);
begin

sDatasql := data_sql_;

if instr(sDatasql,'[SELECT]') > 0 then --调用SELECT 返回

sDatasql := replace(sDatasql,'[SELECT]','');
cid_ := dbms_sql.open_cursor;
dbms_sql.parse(cid_,sDatasql,dbms_sql.native);
sys.dbms_sql.define_column(cid_,1,sReturn,200);
rows_ := sys.dbms_sql.execute(cid_);
if (dbms_sql.fetch_rows(cid_) > 0) then
sys.dbms_sql.column_value(cid_,sReturn);
end if;

sys.dbms_sql.close_cursor(cid_);

elsif instr(sDatasql,'[FUN]') > 0 then --调用function返回值 sDatasql := replace(sDatasql,'[FUN]',''); if instr(upper(sDatasql),'BEGIN ') <= 0 and instr(sDatasql,';') <= 0 then sDatasql := 'BEGIN '||sDatasql|| '; END;'; elsif instr(upper(sDatasql),'BEGIN ') <= 0 then sDatasql := 'BEGIN '||sDatasql|| ' END;'; end if; execute immediate sDatasql using out sReturn; else sReturn := substrb(data_sql_,100); end if; return sReturn; exception when others then if dbms_sql.is_open(cid_) then dbms_sql.close_cursor(cid_); end if; return 'ERROR'; end GetsqlResult;

相关文章

数据库版本:11.2.0.4 RAC(1)问题现象从EM里面可以看到,在23号早上8:45~8:55时,数据库等待会话暴增...
(一)问题背景最近在对一个大约200万行数据的表查看执行计划时,发现存在异常,理论上应该返回100多万...
(一)删除备份--DELETE命令用于删除RMAN备份记录及相应的物理文件。当使用RMAN执行备份操作时,会在RM...
(1)DRA介绍 数据恢复顾问(Data Recovery Advise)是一个诊断和修复数据库的工具,DRA能够修复数据文...
RMAN(Recovery Manager)是Oracle恢复管理器的简称,是集数据库备份(backup)、修复(restore)和恢复...
(1)备份对象 可以使用RMAN进行的备份对象如下: --整个数据库:备份所有的数据文件和控制文件; --数...