oracle 預存程序,匯出sql到文本,動態sql,dbms_sql使用

來源:互聯網
上載者:User
  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

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.