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

本文介绍了一个用于Oracle数据库的SQL导出实用包,包括两个主要功能:将SQL查询结果导出为文本字符串及将查询结果保存到文件中。通过动态SQL解析与执行,实现了灵活的数据导出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. createorreplacepackageSqlexp_packis
  2. --Author:YANLEI
  3. --Created:2008-12-2511:25:09
  4. --Purpose:oracle导出
  5. --sql导出文本字符串
  6. functionSqlToText(sqlstrinvarchar2)returnlong;
  7. --sql导出文件
  8. functionSqlTofile(sqlstrinvarchar2,filenameinvarchar2)
  9. returnvarchar2;
  10. endSqlexp_pack;
  11. /
  12. createorreplacepackagebodySqlexp_packis
  13. --sql导出文本字符串
  14. functionSqlToText(sqlstrinvarchar2)returnlongis
  15. colnamevarchar2(4000);
  16. rownuminteger;
  17. colnumnumberdefault0;--字段个数
  18. linestrvarchar2(20000);
  19. ylTbldbms_sql.desc_tab;--表信息
  20. ylCursorintegerdefaultdbms_sql.open_cursor;--sql输出的游标
  21. rstrlong;
  22. begin
  23. dbms_sql.parse(ylCursor,sqlstr,dbms_sql.native);--解析动态SQL语句;
  24. dbms_sql.describe_columns(ylCursor,colnum,yltbl);--获得动态sql的元数据
  25. foriin1..colnumloop
  26. dbms_sql.define_column(ylCursor,i,colname,4000);--定义动态sql的列
  27. endloop;
  28. rownum:=dbms_sql.execute(ylCursor);--执行动态SQL语句。返回值,对于非查询的语句,execute将执行该语句并返回处理了的行的个数。对于查询,execute将确定活动集返回,返回值为0
  29. ifrownum<>0then
  30. return'';
  31. endif;
  32. rstr:='';
  33. while(dbms_sql.fetch_rows(ylCursor)>0)loop
  34. linestr:='';
  35. foriin1..colnumloop
  36. dbms_sql.column_value(ylCursor,i,colname);--获得字段值
  37. linestr:=linestr||colname;
  38. ifi<colnumthen
  39. linestr:=linestr||',';
  40. endif;
  41. endloop;
  42. rstr:=rstr||linestr||chr(10);
  43. endloop;
  44. dbms_sql.close_cursor(ylCursor);
  45. returnrstr;
  46. exception
  47. whenothersthen
  48. dbms_sql.close_cursor(ylCursor);
  49. raise;
  50. endSqlToText;
  51. --sql导出文件
  52. functionSqlTofile(sqlstrinvarchar2,filenameinvarchar2)
  53. returnvarchar2is
  54. strlong;
  55. begin
  56. str:=SqlToText(sqlstr);
  57. YLFileop_pack.writefile(filename,str);
  58. return'成功';
  59. end;
  60. endSqlexp_pack;
  61. /
  62. ---转载保留版权 by yanleigis email:landgis@126.com
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值