博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
sqlplus_set用法
阅读量:6339 次
发布时间:2019-06-22

本文共 3636 字,大约阅读时间需要 12 分钟。

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,如需转载请自行联系原作者
你可能感兴趣的文章
Oracle执行SQL报错ORA-00922
查看>>
swagger学习2
查看>>
Bootstrap modal使用及点击外部不消失的解决方法
查看>>
13.Linux键盘按键驱动 (详解)
查看>>
机器学习的学习方式及学习算法的类别【转】
查看>>
YUM源、磁盘基础知识 CDN概念
查看>>
stylus入门使用方法
查看>>
使用VS2013自带的PreEmptive Dotfuscator and Analytis来混淆C#代码
查看>>
防盗链之URL参数签名 总结
查看>>
IDEA使用--字体、编码和基本设置
查看>>
[日常] nginx与location规则
查看>>
环境部署(四):Linux下查看JDK安装路径
查看>>
MeasureOverride 和 ArrangeOverride
查看>>
mysql开启慢查询日志
查看>>
判断runtime是否运行在docker中及从docker中获取宿主机的ip信息
查看>>
备份xx
查看>>
js 根据title从下级往上级查找
查看>>
域账号更改密码之后代理需要重新配置
查看>>
分布式锁与实现(二)——基于ZooKeeper实现
查看>>
nagios+logstash实时监控java日志(一)
查看>>