sqlplus_set用法

简介:
set heading off——不显示每行的列名
set echo off——不重复显示所要执行的sql语句
set line 200——设置每行显示200字符
set pages 0——不进行分页显示
set feed off——不显示sql语句的运行结果(selected N rows)


SQL code 
-- 这些代码的目的是将COMPONENT表的数据
-- 导出Insert语句
-- one_table.sql的代码是通过all_tab_columns,
-- 将表的列写成查询语句,并且加上set feedback off等设置命令
-- 并在./data/以导出表的名称命名的Sql文件,然后在执行这个文件,
-- 形成./data/以导出表的名称加_data命名的Sql文件。

--*******************************
--File main.sql
--*******************************
set echo off         -- 是否显示脚本中正在执行的SQL语句 on 显示 off 不显示
set serveroutput on  -- 使用dbms_output.put_line时,是否在屏幕上显示信息 on 显示 off 不显示
set feedback off     -- 是否显示当前sql语句查询或修改的行数 off 不显示查询或修改的行数     
set trimspool on     -- 是否去除重定向(spool)输出每行的拖尾空格,on 去除 off 不去除
set line 10000       -- 设置一行显示的字符总数
set verify off       -- 是否显示替代变量被替代前后的语句 on 显示 off 不显示
set head off         -- 是否显示列标题 on 显示 off 不显示

@@ one_table.sql 'COMPONENT';  -- 执行main.sql目录下的one_table.sql 'COMPONENT' 是输入的参数

set head on        
set line 100 
set feedback on 
set termout on   -- 是否显示脚本中的命令的执行结果 on 显示 off 不显示
set echo on      

--*******************************
--File one_table.sql
--*******************************
prompt *** Process &1 ...;       -- 在屏幕上显示  *** Process COMPONENT ...

set serveroutput on 
set echo off 
set feedback off 
set trimspool on 
set line 10000 
set verify off 
set feedback off 
set head off 
set termout off
define tab_name = '&1'           -- 定义变量 tab_name 并且将 'COMPONENT' 赋值给tab_name

spool ./data/&tab_name..sql      -- 将屏幕显示的结果输出到./data/COMPONENT.sql文件中
declare                          -- 声明变量 关键字
  -- 定义 游标 C1 有两个入口参数 v_owner v_tab_name
  cursor c1(v_owner varchar2, v_tab_name varchar2) is
  select column_name, data_type
    from all_tab_columns
   where table_name = v_tab_name
     and owner = v_owner;
  -- 变量的注释只能用猜的
  field_list      varchar2(4000);  -- 存储表列的列表
  field_list_sel  varchar2(4000);  -- 存储选择的表列的列表
  fmt_field       varchar2(200);       
  date_format     varchar2(30) := 'yyyymmddhh24miss'; -- 日期格式
  v_owner varchar2(30) := user;  
  v_tab_name varchar2(30) := upper(trim('&tab_name')); 
begin
  dbms_output.enable(1000000);   -- 设置dmbs_output输出的缓冲区大小
  dbms_output.put_line('set echo off feedback off'); -- 在屏幕上输出 "set echo off feedback off" 信息
  dbms_output.put_line('spool ./data/&tab_name' || '_data.sql');
  -- Print the insert field 
  dbms_output.put_line('variable field_list varchar2(4000);');
  dbms_output.put_line('begin');
  dbms_output.put_line(' :field_list := ''insert into &tab_name (''' );
  -- 打开游标并c1并循环提取游标数据
  for rec1 in c1(v_owner, v_tab_name) loop
    if c1%rowcount = 1 then  -- 检查游标是否只有一条数据
      field_list := ' || '' ' || rec1.column_name || '''';
    else
      field_list := ' || '',' || rec1.column_name || '''';
    end if;
    dbms_output.put_line(field_list);
  end loop;

  dbms_output.put_line('||'')''||chr(10)||''values ('';');
  dbms_output.put_line('end;');
  dbms_output.put_line('/'); 

  -- For select SQL to generate insert statement
  dbms_output.put_line('select :field_list || chr(10) ||');
  for rec1 in c1(v_owner, v_tab_name) loop
    -- For insert values clause
    if rec1.data_type = 'DATE' then
      fmt_field := '''to_date(''''''||to_char(' || rec1.column_name || ', ''' || 
      date_format || ''')||'''''',''''' || date_format || ''''')''';
    elsif rec1.data_type in ('CHAR', 'VARCHAR2') then
      fmt_field := ''''''''' || replace(' || rec1.column_name || ','''''''', '''''''''''')|| ''''''''';
    else
      fmt_field := 'to_char(' || rec1.column_name || ')';
    end if;
    if c1%rowcount = 1 then
      field_list_sel := fmt_field;
    else 
      field_list_sel := ' ||'','' || ' || fmt_field;
    end if;
    dbms_output.put_line(field_list_sel);
  end loop;
  dbms_output.put_line('|| '');''');
  dbms_output.put_line('from &tab_name ;');
  dbms_output.put_line('spoo off;');
end;
/
spool off;

@ ./data/&tab_name..sql

set head on 
set line 100
set termout on









本文转自 hsbxxl 51CTO博客,原文链接:http://blog.51cto.com/hsbxxl/776264,如需转载请自行联系原作者

目录
相关文章
|
存储 前端开发 对象存储
一文搞懂Map与Set的用法和区别!
前言 作为前端开发人员,我们最常用的一些数据结构就是 Object、Array 之类的,毕竟它们使用起来非常的方便。往往有些刚入门的同学都会忽视 Set 和 Map 这两种数据结构的存在,因为能用 set 和 map 实现的,基本上也可以使用对象或数组实现,而且还更简单。 但是,存在必然合理,当你真正了解 Map 和 Set 之后,你就会发现它们原来时如此美好!
2264 0
一文搞懂Map与Set的用法和区别!
|
2月前
|
存储 C++ 容器
【C++】map、set基本用法
本文介绍了C++ STL中的`map`和`set`两种关联容器。`map`用于存储键值对,每个键唯一;而`set`存储唯一元素,不包含值。两者均基于红黑树实现,支持高效的查找、插入和删除操作。文中详细列举了它们的构造方法、迭代器、容量检查、元素修改等常用接口,并简要对比了`map`与`set`的主要差异。此外,还介绍了允许重复元素的`multiset`和`multimap`。
46 3
【C++】map、set基本用法
|
4月前
|
SQL XML Java
mybatis复习03,动态SQL,if,choose,where,set,trim标签及foreach标签的用法
文章介绍了MyBatis中动态SQL的用法,包括if、choose、where、set和trim标签,以及foreach标签的详细使用。通过实际代码示例,展示了如何根据条件动态构建查询、更新和批量插入操作的SQL语句。
mybatis复习03,动态SQL,if,choose,where,set,trim标签及foreach标签的用法
|
4月前
|
索引 Python
Pandas中的时间序列利器:set_index用法
Pandas中的时间序列利器:set_index用法
140 0
|
6月前
|
存储 JSON 关系型数据库
mysql中find_in_set()函数用法详解及增强函数
总结而言,`FIND_IN_SET()`是MySQL中处理由逗号分隔的字符串列表的一种便捷方法,尤其适用于列表相对较短且不经常更改的场景。然而,对于更为复杂的需要高性能和可扩展性的数据库设计,它可能不是最优选择,应考虑使用更加正规化的数据库结构。
872 2
mysql中find_in_set()函数用法详解及增强函数
|
7月前
|
存储 索引 Python
Python教程:深入了解 Python 中 Dict、List、Tuple、Set 的高级用法
Python 中的 Dict(字典)、List(列表)、Tuple(元组)和 Set(集合)是常用的数据结构,它们各自有着不同的特性和用途。在本文中,我们将深入了解这些数据结构的高级用法,并提供详细的说明和代码示例。
392 2
|
8月前
|
Java 开发者
Java中三种Set的实现类的用法和区别
Java中三种Set的实现类的用法和区别
vb窗体实例化与set语句的用法
vb窗体实例化与set语句的用法
|
存储 C++ 容器
C++ 第九节——map/set(用法+底层原理+模拟实现)
们需要知道的是,Map和Set的底层都是红黑树。
848 1
C++ 第九节——map/set(用法+底层原理+模拟实现)
|
8月前
|
C++
stl中set、map的用法
stl中set、map的用法