导出数据、生成SQL INSERT的方法。
在工作中常常碰到这种情况:我们需要将一个应用系统的基础数据导出来,以便基础数据下次导入到另外一个场景。
事实上,这种情况我们可以用pl/sql的功能Export Tables来实现。Export Table有三种导出方式:Oracle Export,SQL Insert,PL/SQL Developer。通常我们会使用Oracle Export,SQL Insert的功能。(第三种俺没用过,呵呵,所以这么说。)
Oracle Export是将数据导出成dmp格式的文件,这样有个麻烦,不能看到里面的内容。虽然它的速度很快,但是缺点太明显,所以至少我一般不用它。除非是导出含有clob,blob的表,才会用到这个功能。
SQL Insert是最实用的功能。当然它也有缺点,比如不能使用clob,blob。但是优点明显,就是能看到sql语句的详细内容。所以一般我用它,除非clob,blob才用export tables的功能。
实际中,一个系统可能有几百个表,但是基础数据表可能才100多个,这样使用PL/SQL的SQL Insert功能就会出现一种情况:每次我导出基础数据的时候,就要从用户的几百个表中选择那100多个表。这样很考验人的耐心的,反正我是被这个搞得头晕眼花。
正是因为我没耐心,所以就写了这片短文,希望在今后的工作中,能用更快的速度来完成导出导入功能,所以就自己做了一个方法,来完成导入导出功能,最终的效果应该是和PL/SQL里面的SQL Insert功能一样的,且个人觉得更适合本人使用(不知道适合不适合别人使用,呵呵)。
************************************************************************************************************
闲话少说,开始正题吧。
主要思路是这样的:
1,将基础数据的表名插入到临时表t_proc_init_tab中,不论顺序,表结构如下:
create table T_PROC_INIT_TAB
(
TABLE_NAME VARCHAR2(100)
)
。
2,分析临时表t_proc_init_tab中所有表的依赖关系,最后算出所有表的依赖等级,插入到临时表T_PROC_CONSTRAINT_GRADE中。等级越高,标识该表依赖程度越高。后面插入数据的时候就会在后面执行。T_PROC_CONSTRAINT_GRADE的表结构如下:
create table T_PROC_CONSTRAINT_GRADE
(
SRC_TABLE VARCHAR2(100) not null,
GRADE NUMBER not null
)
算出表依赖等级,使用后面存储过程PKG_CREATE_INS_SQL.SP_DoConstraint。
3,依据依赖等级高低,从低到高,一个一个的导出表的数据,生
相关文档:
select
描述:查询顾客的公司名、地址信息
查询句法:
var 构建匿名类型1 = from c in ctx.Customers
select new
  ......
LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式。
SQL LIKE 操作符语法
SELECT column_name(s) from table_name WHERE column_name LIKE pattern
SQL 通配符
在搜索数据库中的数据时,SQL 通配符可以替代一个或多个字符。
SQL 通配符必须与 LIKE 运算符一起使用。
在 SQL 中,可使用以下通配符:
通配符
描 ......
/*sql重复数据处理,有唯一ID,formid有重复*/
/*查出重复的fromid*/
select formid from GaiaSaver_BUG group by formid having count(*)>1
/*删除重复formid,只留一条*/
delete from GaiaSaver_BUG where ID not in
(select min(ID) as ID from GaiaSaver_BUG group by for ......
从功能上划分,SQL语言可以分为DDL,DML和DCL三大类。
1. DDL(Data Definition Language)
数据定义语言,用于定义和管理 SQL 数据库中的所有对象的语言 ;
CREATE---创建表
ALTER---修改表
  ......
-- 一: 处理未查到的空值
select
case when exists(select EndPrice from T_stock where BOMSN='0109')
then (select EndPrice from T_stock where BOMSN='0109')
else 0 end
--二:更新字段值
--strNum 数量
--strId 序号
update T_buy_Pro set Co ......