前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Oracle生成某一用户下所有表数据的insert语句

Oracle生成某一用户下所有表数据的insert语句

作者头像
用户1148526
发布2019-05-25 19:41:48
1.1K0
发布2019-05-25 19:41:48
举报
文章被收录于专栏:Hadoop数据仓库Hadoop数据仓库

功能:生成某一用户下所有数据表数据的insert语句,放入d:\insert.sql文件。

限制:只支持number、char、varchar2、date、long、clob数据类型。

提示:数据量小还可以,大了就别用这种方式了,会很慢。

[sql] view plain copy

  1. /* Formatted on 2012-12-27 20:56:24 (QP5 v5.185.11230.41888) */
  2. CREATE OR REPLACE DIRECTORY mydir AS 'D:\';
  3. DECLARE
  4. ROW_NUMBER NUMBER := 0;
  5. col_str VARCHAR2 (32767) := '';
  6. select_str VARCHAR2 (32767) := '';
  7. ins_tab DBMS_SQL.varchar2_table;
  8. l_count INT := 0;
  9. log_file UTL_FILE.file_type;
  10. BEGIN
  11. log_file := UTL_FILE.fopen ('MYDIR', 'insert.sql', 'w');
  12. UTL_FILE.put_line (log_file, 'set define off;');
  13. FOR x IN (SELECT table_name FROM user_tables)
  14. LOOP
  15. EXECUTE IMMEDIATE 'select count(*) from ' || x.table_name
  16. INTO ROW_NUMBER;
  17. IF ROW_NUMBER > 0
  18. THEN
  19. col_str := '';
  20. select_str := '';
  21. FOR y IN ( SELECT column_name, data_type
  22. FROM user_tab_columns
  23. WHERE table_name = x.table_name AND data_type != 'BLOB'
  24. ORDER BY column_id)
  25. LOOP
  26. col_str := col_str || y.column_name || ',';
  27. IF y.data_type = 'NUMBER'
  28. THEN
  29. select_str :=
  30. select_str
  31. || 'decode('
  32. || y.column_name
  33. || ',null,''null'','
  34. || y.column_name
  35. || ')||'',''||';
  36. ELSE
  37. IF y.data_type IN ('CHAR', 'VARCHAR2', 'LONG', 'CLOB')
  38. THEN
  39. select_str :=
  40. select_str
  41. || 'decode('
  42. || y.column_name
  43. || ',null,''null'',''''''''||replace('
  44. || y.column_name
  45. || ','''''''','''''''''''')||'''''''')||'',''||';
  46. ELSE
  47. IF y.data_type = 'DATE'
  48. THEN
  49. select_str :=
  50. select_str
  51. || 'decode('
  52. || y.column_name
  53. || ',null,''null'',''to_date(''''''||'
  54. || 'to_char('
  55. || y.column_name
  56. || ',''yyyy-mm-dd hh24:mi:ss'')||'''
  57. || '''||'''''',''''yyyy-mm-dd hh24:mi:ss'''')'')||'',''||';
  58. END IF;
  59. END IF;
  60. END IF;
  61. END LOOP;
  62. col_str := 'insert into ' || x.table_name || ' (' || col_str;
  63. col_str := SUBSTR (col_str, 1, LENGTH (col_str) - 1) || ') values (';
  64. select_str :=
  65. 'select '''
  66. || col_str
  67. || ''' ||'
  68. || SUBSTR (select_str, 1, LENGTH (select_str) - 7)
  69. || '|| ''); from '
  70. || x.table_name;
  71. -- dbms_output.put_line(select_str);
  72. EXECUTE IMMEDIATE select_str BULK COLLECT INTO ins_tab;
  73. l_count := ins_tab.COUNT;
  74. UTL_FILE.put_line (log_file, '');
  75. UTL_FILE.put_line (log_file, '-- table name: ' || x.table_name);
  76. FOR i IN 1 .. l_count
  77. LOOP
  78. UTL_FILE.put_line (log_file, ins_tab (i));
  79. END LOOP;
  80. END IF;
  81. END LOOP;
  82. UTL_FILE.put_line (log_file, '');
  83. UTL_FILE.put_line (log_file, 'commit;');
  84. UTL_FILE.fclose (log_file);
  85. END;
  86. /
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016年12月28日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档