oracle 存储过程,导出sql到文本,动态sql,dbms_sql使用

来源:互联网 发布:ff14人男捏脸数据 编辑:程序博客网 时间:2024/05/01 14:28
  1. create or replace package Sqlexp_pack is
  2.   -- Author  : YANLEI
  3.   -- Created : 2008-12-25 11:25:09
  4.   -- Purpose : oracle 导出
  5.   --sql导出文本字符串
  6.   function SqlToText(sqlstr in varchar2) return long;
  7.   --sql导出文件
  8.   function SqlTofile(sqlstr in varchar2, filename in varchar2)
  9.     return varchar2;
  10. end Sqlexp_pack;
  11. /
  12. create or replace package body Sqlexp_pack is
  13.   --sql导出文本字符串
  14.   function SqlToText(sqlstr in varchar2) return long is
  15.   
  16.     colname varchar2(4000);
  17.     rownum  integer;
  18.     colnum  number default 0; --字段个数
  19.   
  20.     linestr  varchar2(20000);
  21.     ylTbl    dbms_sql.desc_tab; --表信息
  22.     ylCursor integer default dbms_sql.open_cursor; --sql输出的游标
  23.     rstr     long;
  24.   begin
  25.   
  26.     dbms_sql.parse(ylCursor, sqlstr, dbms_sql.native); --解析动态SQL语句;
  27.     dbms_sql.describe_columns(ylCursor, colnum, yltbl); --获得动态sql的元数据
  28.     for i in 1 .. colnum loop
  29.       dbms_sql.define_column(ylCursor, i, colname, 4000); --定义动态sql的列  
  30.     
  31.     end loop;
  32.   
  33.     rownum := dbms_sql.execute(ylCursor); --执行动态SQL语句。返回值,对于非查询的语句,execute将执行该语句并返回处理了的行的个数。 对于查询,execute将确定活动集返回,返回值为0
  34.     if rownum <> 0 then
  35.       return '';
  36.     end if;
  37.     rstr := '';
  38.     while (dbms_sql.fetch_rows(ylCursor) > 0) loop
  39.     
  40.       linestr := '';
  41.       for i in 1 .. colnum loop
  42.         dbms_sql.column_value(ylCursor, i, colname); --获得字段值    
  43.         linestr := linestr || colname;
  44.         if i < colnum then
  45.           linestr := linestr || ',';
  46.         end if;
  47.       
  48.       end loop;
  49.     
  50.       rstr := rstr || linestr || chr(10);
  51.     
  52.     end loop;
  53.   
  54.     dbms_sql.close_cursor(ylCursor);
  55.     return rstr;
  56.   exception
  57.     when others then
  58.       dbms_sql.close_cursor(ylCursor);
  59.       raise;
  60.   end SqlToText;
  61.   --sql导出文件
  62.   function SqlTofile(sqlstr in varchar2, filename in varchar2)
  63.     return varchar2 is
  64.     str long;
  65.   begin
  66.     str := SqlToText(sqlstr);
  67.     YLFileop_pack.writefile(filename, str);
  68.     return '成功';
  69.   end;
  70. end Sqlexp_pack;
  71. /
  72. ---转载保留版权 by yanleigis email:landgis@126.com
 
原创粉丝点击