oracle存储过程生成含有clob字段表的可执行导出脚本

oracle表如果含有clob字段,则无法导出用sql脚本,尤其需要进行数据备份或者数据导入导出时候不方便。

这个存储过程你只需传入表名和需要返回的结果,就可以获取可执行的sql,直接在PL/SQL执行返回的结果,即可将数据导出成sql,

存储过程如下

create or replace procedure generate_insert_sql(t_name in varchar2,execute_sql out varchar2) as
  CURSOR col_cur is
    select column_name, data_type
      from user_tab_cols
     where table_name like t_name;
  col_name  varchar2(500);
BEGIN
  FOR col in col_cur loop
    if col.data_type=‘CLOB‘  then
      col_name := ‘ to_char(‘ || col.column_name || ‘) as ‘||col.column_name||‘ ,‘;
    else
      col_name := col.column_name || ‘,‘;
    end if;
  execute_sql := execute_sql || col_name;
end loop;
execute_sql := ‘select ‘ ||RTRIM(execute_sql,‘,‘)|| ‘ from ‘||t_name;
end;  

测试例子如下,测试工具为PL/SQL

1.创建测试表

create table test_table(
    name varchar2(30),
    test_clob1 clob,
    test_clob2 clob
);

2.插入初始化数据

3.执行存储过程

4.执行获取的sql

5.导出查询数据为sql

6.查看导出的sql

最后你就可以把你得到的sql导入到你需要导的地方了。

时间: 2024-08-04 01:43:50

oracle存储过程生成含有clob字段表的可执行导出脚本的相关文章

MYSQL利用Navicat对含有Bold字段表进行导入导出

MYSQL中含有Blob字段是一件挺麻烦的事情,导出导入不方便.我介绍我是怎么做的. 1.在MYSQL的my.ini最后中添加一行配置max_allowed_packet = 100M,重启MYSQL服务 根据实际情况来定这个数值的大小,我这次表里面有82个mediumblob字段,所以设置为100M 2.用XML格式导出数据 3.选择用XML导入数据 选择表示一行的标签,我这里是RECORD. 4.耐心等待,如果有报错多少条处理失败是因为max_allowed_packet = 100M的值设

Oracle存储过程包含三部分:过程声明,执行过程部分,存储过程异常。

Oracle存储过程可以有无参数存储过程和带参数存储过程. 一.无参程序过程语法 create or replace procedure NoParPro as ; begin ; exception //存储过程异常 ; end;         二.带参存储过程实例 create or replace procedure queryempname(sfindno emp.empno%type) as         sName emp.ename%type;         sjob emp

使用DBLink方式同步远程数据库中含Blob、Clob字段表的问题解决

在数据库同步中我们经常会用到DBLink方式.DBLink可以将物理上存放于网络的多个数据库在逻辑上当成一个单一的大数据库.开发人员无需关心数据库的网络分布,就能很方便的实现从不同数据库之间读取数据.如何在Oracle数据库间建立DBLink我在之前的文章已有涉及,这里就不花篇幅讲解了.具体请查看Oracle建立DBLink. 本篇文章主要阐述如何解决DBLink方式无法实现Blob.Clob字段数据同步的问题.在网上已经有很多牛人给出了解决方案,在参照他们的方案解决问题的过程中,发现有些小问题

关于 OGG "Loading data from file to Replicat"同步含有lob字段表的部分记录的关键参数

首先说明一点: Loading data with an Oracle GoldenGate direct load 这个方法,对含有如下数据类型的table,是无法使用的: LOBs, LONGs, user-defined types (UDT), or any other large data type that is greater than 4 KB in size. 因此,遇到如下需求时,就不得不用OGG "Loading data from file to Replicat&quo

《Java虚拟机原理图解》1.4 class文件中的字段表集合--field字段在class文件中是怎样组织的

0.前言 了解JVM虚拟机原理是每一个Java程序员修炼的必经之路.但是由于JVM虚拟机中有很多的东西讲述的比较宽泛,在当前接触到的关于JVM虚拟机原理的教程或者博客中,绝大部分都是充斥的文字性的描述,很难给人以形象化的认知,看完之后感觉还是稀里糊涂的. 感于以上的种种,我打算把我在学习JVM虚拟机的过程中学到的东西,结合自己的理解,总结成<Java虚拟机原理图解> 这个系列,以图解的形式,将抽象的JVM虚拟机的知识具体化,希望能够对想了解Java虚拟机原理的的Java程序员 提供点帮助. 读

Jvm(38),class文件结构----字段表集合

0.前言 读完本文,你将会学到: 1.类中定义的field字段是如何在class文件中组织的 2.不同的数据类型在class文件中是如何表示的 3.static final类型的field字段的初始化赋值问题 1.概述 字段表集合是指由若干个字段表(field_info)组成的集合.对于在类中定义的若干个字段,经过JVM编译成class文件后,会将相应的字段信息组织到一个叫做字段表集合的结构中,字段表集合是一个类数组结构,如下图所示: 注意:这里所讲的字段是指在类中定义的静态或者非静态的变量,而

Oracle 存储过程

存储过程:就是一组用于完成特定数据库功能的SQL 语句集,该SQL语句集经过编译后存储在数据库系统中.在使用时候,用户通过指定已经定义的存储过程名字并给出相应的存储过程参数来调用并执行它,从而完成一个或一系列的数据库操作. Oracle存储过程包含三部分:过程声明,执行过程部分,存储过程异常. 1 create or replace procedure 过程名 2 as ...; --声明语句段 3 begin 4 ...; --执行语句段 5 exception --异常处理语句段 6 ...

ORACLE存储过程详解

ORACLE存储过程详解 1.定义 所谓存储过程(Stored Procedure),就是一组用于完成特定数据库功能的SQL语句集,该SQL语句集经过编译后存储在数据库系统中.在使用时候,用户通过指定已经定义的存储过程名字并给出相应的存储过程参数来调用并执行它,从而完成一个或一系列的数据库操作. 2.存储过程的创建 Oracle存储过程包含三部分:过程声明,执行过程部分,存储过程异常. (1)无参存储过程语法 1 2 3 4 5 6 7 8 create or replace procedure

使用EXECUTE IMMEDIATE来生成含有绑定变量的SQL

一个SQL,通过SPM固定它的执行计划,可以通过DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE实现.也可以通地此功能在不修改原SQL的情况下对其加HINT来固定执行计划.DB VERSION:Oracle 11.2.0.4OS:CentOS 6.6例如:原SQL走索引:SELECT * FROM SCOTT.TB_SPM WHERE OBJECT_ID=10;想通过加HINT让其走全表扫描:SELECT /*+FULL(TB_SPM)*/* FROM SCOTT.TB