首页 > 数据库 >Oracle使用存储过程批量导出建表语句和索引语句

Oracle使用存储过程批量导出建表语句和索引语句

时间:2023-08-08 18:14:29浏览次数:58  
标签:语句 建表 CLOB POS UTL FILE Oracle END LOOP

--1. 用system用户创建路径 datA_dump用于存放文件
-- /u01/dump必需是已经存在的目录
create or replace directory DATA_DUMP as '/u01/dump';
--用sys用户登录给要访问的用户指定访问目录的权限
grant write on directory DATA_DUMP to hr;
grant read on directory DATA_DUMP to hr;
--2. 在需要导出表结构的用户下创建存储过程(导出单个表结构)

CREATE OR REPLACE PROCEDURE P_EXPORTDLL(P_TABLE_NAME VARCHAR2,
                                        P_FILENAME   VARCHAR2) IS
BEGIN
 
  DECLARE
    L_FILE     UTL_FILE.FILE_TYPE;
    L_BUFFER   VARCHAR2(1000);
    L_AMOUNT   BINARY_INTEGER := 100;
    L_POS      INTEGER := 1;
    L_CLOB     CLOB;
    L_CLOB_LEN INTEGER;
  BEGIN
    SELECT DBMS_METADATA.GET_DDL('TABLE', P_TABLE_NAME) || ';'
      INTO L_CLOB
      FROM DUAL;
    L_CLOB_LEN := DBMS_LOB.GETLENGTH(L_CLOB);
    L_FILE     := UTL_FILE.FOPEN('DATA_DUMP', P_FILENAME || '.sql', 'a', 1000);
 
    WHILE L_POS < L_CLOB_LEN LOOP
      DBMS_LOB.READ(L_CLOB, L_AMOUNT, L_POS, L_BUFFER);
      UTL_FILE.PUT(L_FILE, L_BUFFER);
      L_POS := L_POS + L_AMOUNT;
    END LOOP;
    UTL_FILE.FCLOSE(L_FILE);
  END;
END P_EXPORTDLL;

--3. 创建导出所有结构的存储过程函数

CREATE OR REPLACE PROCEDURE P_WHOLE AS
BEGIN
  FOR X IN (SELECT TABLE_NAME FROM USER_TABLES) LOOP
    P_EXPORTDLL(X.TABLE_NAME, 'hr_tab');
  END LOOP;
END;

--4. 调用存储过程,批量导出表结构

--EXEC P_WHOLE;

##############################################

##在需要导出表结构的用户下创建存储过程(导出单个索引结构)

CREATE OR REPLACE PROCEDURE P_EXPORTDLL_IND(P_TABLE_INDEX VARCHAR2,
                                        P_FILENAME   VARCHAR2) IS
BEGIN
 
  DECLARE
    L_FILE     UTL_FILE.FILE_TYPE;
    L_BUFFER   VARCHAR2(1000);
    L_AMOUNT   BINARY_INTEGER := 100;
    L_POS      INTEGER := 1;
    L_CLOB     CLOB;
    L_CLOB_LEN INTEGER;
  BEGIN
    SELECT DBMS_METADATA.GET_DDL('INDEX', P_TABLE_INDEX) || ';'
      INTO L_CLOB
      FROM DUAL;
    L_CLOB_LEN := DBMS_LOB.GETLENGTH(L_CLOB);
    L_FILE     := UTL_FILE.FOPEN('DATA_DUMP', P_FILENAME || '.sql', 'a', 1000);
 
    WHILE L_POS < L_CLOB_LEN LOOP
      DBMS_LOB.READ(L_CLOB, L_AMOUNT, L_POS, L_BUFFER);
      UTL_FILE.PUT(L_FILE, L_BUFFER);
      L_POS := L_POS + L_AMOUNT;
    END LOOP;
    UTL_FILE.FCLOSE(L_FILE);
  END;
END P_EXPORTDLL_IND;

####创建导出所有索引结构的存储过程函数

CREATE OR REPLACE PROCEDURE P_WHOLE_IND AS
BEGIN
  FOR X IN (SELECT INDEX_NAME FROM USER_INDEXES) LOOP
    P_EXPORTDLL_IND(X.INDEX_NAME, 'hr_ind');
  END LOOP;
END;

 

----EXEC P_WHOLE_IND;

 

感谢&参考https://blog.csdn.net/qq_24452475/article/details/53159679

标签:语句,建表,CLOB,POS,UTL,FILE,Oracle,END,LOOP
From: https://www.cnblogs.com/wa-zz/p/17615053.html

相关文章

  • nebula nGQL中的WITH语句使用——和sql里with as的顺序是相反的
    SQL中的withas语句WITHAS短语,也叫做子查询部分(subqueryfactoring),是用来定义一个SQL片断,该SQL片断会被整个SQL语句所用到。这个语句算是公用表表达式(CTE)。比如withAas(select*fromclass)select*fromA这个语句的意思就是,先执行select*fromclass得到一个......
  • 数据库增删改查语句(入门)
    数据库增删改查语句一、增加insertinto...values1、insertinto表名(列名1,列名2,...列名n) values(值1,值2,...值n);(写列名插入数据)2、insertinto表名values(值1,值2,...值n);(不写列名插入数据)二、删除delete1、deletefrom表名;(删除表中所有数据)2、deletefrom表名where列=值;(根......
  • [学习笔记] Switch语句使用“===”进行比较
    JS中,switch语句会使用恒等计算符(===)进行比较。如上所述,下列代码中因为x定义为字符串10,而case为数字10,因此将不会弹出“HelloWorld”:var x="10";switch(x){    case 10:alert("Hello");}实际应用时应注意这点。......
  • 第5章 if语句
    5.1一个简单示例1.if代表判断的意思,成立和不成立执行的代码块不一致5.2条件测试1.if进行判断,如果为true就执行if块代码,为false就忽略代码5.2.1检查是否相等1.一个等号是赋值,两个等号是比较是否相等5.2.2检查是否相等时不考虑大小写1.字母的大小写也会视为不相等......
  • Oracle 清理sysaux表空间-清理AWR分区数据
    ----0、表空间使用率colTABLESPACE_NAMEfora20;colPCT_FREEfora10;colPCT_USEDfora10;setlines200;SelectTablespace_Name,Sum_m,Max_m,Count_BlocksFree_Blk_Cnt,Sum_Free_m,To_Char(100*Sum_Free_m/Sum_m,'99.9999')||'%'AsPct_Free,100......
  • MySQL基础语句
    select*from表where字段in(select临时表名.字段from(另一个字段)临时表名);deletefrom表名where字段inselect临时表名.字段from(另一个字段)临时表名);update表名set字段=新值where字段in(select临时表名.字段from(另一个字段)临时表名));insertint......
  • postgresql满语句查询及灭杀
    1.查询慢语句查询当前库超过指定运行时长的语句--获取正在执行的sql进程select c.relname对象名称, l.locktype可锁对象的类型, l.pid进程id, l.mode持有的锁模式, l.granted是否已经对锁进行授权, l.fastpath, psa.datname数据库名称, psa.wait_event等待事件,......
  • 【我和openGauss的故事】使用Ora2Pg迁移oracle数据到openGauss
    【我和openGauss的故事】使用Ora2Pg迁移oracle数据到openGaussDemonCharm[openGauss](javascript:void(0);)2023-08-0418:01发表于四川前言本博客介绍了使用Ora2Pg迁移oracle数据到openGauss1、下载及安装Ora2Pg1.1、下载说明:PerlDBD:http://search.CPAN.org#只需在搜索......
  • MTK 2.9.2 迁移Oracle 11g 至 openGauss 5.0.0操作指南
    MTK2.9.2迁移Oracle11g至openGauss5.0.0操作指南尚雷openGauss2023-08-0418:01发表于四川前言:最近在进行一些去O的验证测试,之前测试过MTK迁移Oracle到MogDB,正好测试下Oracle到openGauss的迁移,于是做了如下测试,并整理记录成文,还望对此熟悉的朋友多多指正。一、简介MTK全......
  • Oracle批量删除表
    数量小:生成删除表的语句,复制出删表语句,执行删除即可SELECT'DROPTABLE'||TABLE_NAME||';'FROMUSER_TABLESWHERETABLE_NAMELIKE'HR_TEMPTABLE__%';查询所有匹配上的表select*fromUSER_TABLESWHERETABLE_NAMELIKE'HR_TEMPTABLE__%';数量大:批量删除匹配......