120140708
1.1Oracle用户下数据移植到另外一个库的方法:
1.第一步,tool下的compare user object 同步用户对象
第二步,tool下的compare table data 同步表数据
2.在终端cmd里,直接用exp指令(不必登陆oracle)用‘用户导出’法导出相应用户下的.dmp文件
Exp userid = zhangwensi/zhangwensi@orcl owner =zhangwensi file = D:/zhangwensi_back ,
再在plsql里面,tool下的 import table 直接导入或者就是还在终端里面用imp指令
Imp Userid = laozhang/laozhang@orcl fromuser = zhangwensi touser = laozhang file = D:/zhangwensi_back 。
3.单张表的导出和导入
Exp userid = zhangwensi/zhangwensi@orcl tables=books file = D:/xxx_back
Imp userid =laozhang/laozhang@orcl tables=books file=D:/xxx_back
1.2Linux 下exp/imp的操作
1.2.1全库导出:
exp userid=cams/cams@cams full=y file=(/tmp/1.dmp, /tmp/2.dmp, /tmp/3.dmp) filesize=2GB log=/tmp/cat_log.log
1.2.2用户导出:
exp userid=cams/cams@cams owner=cams file=(/tmp/1.dmp, /tmp/2.dmp, /tmp/3.dmp) filesize=2GB log=/tmp/cat_log.log
1.2.3表导出
exp userid=cams/cams@cams tables=(tbl, tb2) file=(/tmp/1.dmp, /tmp/2.dmp) filesize=2GB log=/tmp/cat_log.log
用dmp导法超快。
1.3将db2中的数据导出 xx.ixf 类型:
1.通过SSH连接到db2相应的库和用户,然后在linux窗口输入以下指令:
Step1: db2 connect to iacm user iacm_w1 using iacm_w1
Step2: db2 set current schema iacm_w1
Step3: db2 "export to /home/db2inst1/zws/TD_SEARCH_ENGINE.ixf of ixf select * from TD_SEARCH_ENGINE";
最后的数据文件 xx .ixf 就会在130服务器上的相应文件夹里生成。
1.4将数据文件XX.ixf文件的数据写入表里
Step1.打开db2命令窗口输入Db2 connect to iacm user iacm_w1 using iacm_w1
Step2. db2 set current schema iacm_w1
Step3. db2 –tf 文件路径D:/工作/数据/db2初始化数据/Td_search_engine.ixf
220140709
2.1Plsql的数据和表的导出
1.Tool 下选择export tables
导出的是你选择的项的表的数据.
2.tool下选择export user objects
导出的东西是表的建表语句
3oracle 表空间创建
create temporary tablespace user_temp
tempfile 'D:appShinelonoradatauser_temp.dbf'
size 1024m
autoextend on
next 50m maxsize 20480m
extent management local;
/*第2步:创建数据表空间 */
create tablespace user_data
logging
datafile 'D:appShinelonoradatauser_data.dbf'
size 2040m
autoextend on
next 50m maxsize 20480m
extent management local;
/*第3步:创建用户并指定表空间 */
create user zhangwensi identified by zhangwensi
default tablespace user_data
temporary tablespace user_temp;
drop user zhangwensi cascade;
2.2Db2表空间的创建
-- 创建32K缓存池 ;
CREATE BUFFERPOOL BUF_POOL_32K
IMMEDIATE
SIZE 5000
NUMBLOCKPAGES 0
PAGESIZE 32 K;
-- 创建SCHEMA
CREATE SCHEMA isop_dim
AUTHORIZATION DB2INST1;
COMMIT;
-- 创建表空间
CREATE LARGE TABLESPACE TBS_ISOP_DIM
PAGESIZE 32K
MANAGED BY DATABASE
USING
(File '/home/ngbass/db2/db2_hwia/ISOP_DIM.dbf' 256000
)
EXTENTSIZE 32
PREFETCHSIZE AUTOMATIC
BUFFERPOOL BUF_POOL_32K
DROPPED TABLE RECOVERY ON;
-- 创建临时表空间
CREATE USER TEMPORARY TABLESPACE TBS_ISOP_DIM_TMP
PAGESIZE 32K
MANAGED BY DATABASE
USING(FILE '/home/ngbass/db2/db2_hwia/ISOP_DIM_TMP.dbf' 128000)
EXTENTSIZE 80 bufferpool BUF_POOL_32K
DROPPED TABLE RECOVERY OFF;
2.3把plsql导出的数据,要经过转为unix的ISCII码,才能进行导入。否则会出现乱码
320140710
3.1实例的切换
3.2oracle增加表空间 ,添加数据文件 。
alter tablespace user_data add datafile 'D:appzWX214991oradataorcluser_data_add1.dbf' size 2G;
3.3查看当前用户使用的表空间
select t.tablespace_name from user_tablespaces t ;
3.4ORA-01536: 超出表空间 'USER_DATA' 的空间限额
当你在建表的时候,oracle报这样的错的时候,解决!
1.在当前用户下窗口查看空间限额的字段:max_bytes
select * from user_ts_quotas;
2.在sys/sys dba权限下,给用户增加空间限额
alter user zhangwensi quota unlimited on user_data; 不限制
或alter user zhangwensi quota 50 on user_data; 给50
3.收回空间限额的空间
revoke unlimited tablespace from user;
或alter user zhangwensi quota 0 on user_data;
3.5Oracle数据库的存储结构
3.5.1物理结构
物理结构分为:Datafiles 数据文件,control Files 控制文件 和 online redo Logs 联机日志文件。
3.5.2逻辑结构
Oracle 存储结构有数据块(Data Block)》区(Extent)》段(segment)》表空间(tablespace)4部分组成。
420140723
4.1约束类型和写法
book表为例:
写法一:
create table books(
bookno number(10) not null,
category varchar2(20),
bookname varchar2(20),
author varchar2(20),
saleplace varchar2(100),
price number(15,3)
/* constraint books_1 primary key(bookno) */
)
约束条件constraint ,可以直接写在字段后面,语法为 constraint + 约束名(自己取)
+primary, unique,check and foreign key + (要约束的字段);(见上)
除此之外还有 非空约束 not null 。
1.constraint books_1 check(bookno in ('female','male'))
2.constraint books_2 primary key(bookno)
3.constraint books_3 foreign key(bookno) references READER (BORROWNO)
4.not null 不能用这种写法,直接写在 字段后。
写法二:
create table books(
bookno number(10) not null,
category varchar2(20),
bookname varchar2(20),
author varchar2(20),
saleplace varchar2(100),
price number(15,3)
)
alter table books
add constraint haha primary key (bookno);--(constraint +约束名)可加可不加
alter table books
add constraint sb foreign key (bookno) --(constraint +约束名)可加可不加
references READER (BORROWNO);
4.2关联子查询(exists)
emp表的: JAMES 的领导是谁?
(关联子查询) 通过exists来实现
select ename
from emp E1
where exists ( select 1
from emp E2
where E2.MGR = E1.empno
and E2.ename = 'JAMES') - - 优先查询外层表
注意: select 1
from emp E2
where E2.MGR = E1.empno
and E2.ename = 'JAMES' 这个查询语句中的 1 ,代表查询结果中出现一个’1‘ 就是一条数据,如下,下面就是查询出10条数据。
11
21
31
41
51
61
71
81
91
101
总结:
1.若用in,则oracle 会优先查询子查询,然后匹配外层查询,
2.若使用exists,则oracle 会优先查询外层表,然后再与内层表匹配。
4.3With t1 as 用法
with t1 as (select * from a),
t2 as ( select * from b)
select *
from t1, t2
where t1.no = t2.no;
查询出来的东西放在临时表t1和t2 中
4.4Update批量更新
将td_cont_app_mng_temp中的中文注释和英文注释添加到td_cont_app_mng表中的
相同id的列
update td_cont_app_mng t
set t.app_desc_cn = (select m.app_desc_cn
from td_cont_app_mng_temp m
where m.app_id = t.app_id),
t.app_desc_en =(select m.app_desc_en
from td_cont_app_mng_temp m
where m.app_id = t.app_id)
where t.app_id in (select x.app_id
from td_cont_app_mng_temp x )
4.5游标的使用
-- 声明游标;CURSOR cursor_name IS select_statement
--For 循环游标
--(1)定义游标
--(2)定义游标变量
--(3)使用for循环来使用这个游标
declare
--类型定义
cursor c_job
is
select empno,ename,job,sal
from emp
where job='MANAGER';
--定义一个游标变量v_cinfo c_emp%ROWTYPE ,该类型为游标c_emp中的一行数据类型
c_row c_job%rowtype;
begin
for c_row in c_job loop
dbms_output.put_line(c_row.empno||'-'||c_row.ename||'-'||c_row.job||'-'||c_row.sal);
end loop;
end;
--Fetch游标
--使用的时候必须要明确的打开和关闭
declare
--类型定义
cursor c_job
is
select empno,ename,job,sal
from emp
where job='MANAGER';
--定义一个游标变量
c_row c_job%rowtype;
begin
open c_job;
loop
--提取一行数据到c_row
fetch c_job into c_row;
--判读是否提取到值,没取到值就退出
--取到值c_job%notfound 是false
--取不到值c_job%notfound 是true
exit when c_job%notfound;
dbms_output.put_line(c_row.empno||'-'||c_row.ename||'-'||c_row.job||'-'||c_row.sal);
end loop;
--关闭游标
close c_job;
end;
4.6Delete from table_name 和 truncate table table_name 的区别
1.Delete 可以产生回滚段,而truncate是DDL语言,删掉就没了,不能回滚
2.truncate会进行空间回收,而且删除数据速度比较快哦
520140725(shell)
5.1linux下安装oracle为什么要创建oracle用户:
要有专门属于oracle的环境变量等,oracle的环境变量都是配置在oracle用户下的.
安全。权限
5.2查看当前登陆到系统的的用户
who -m
5.3Shell中常用的通配符
5.4Shell的元字符
‘+’ +前面的字符出现一次或者多次(至少一次),
‘*’ *前面的字符出现零次或者多次(任意次),
‘?’?前面的字符出现零次或者一次
‘ . ’ 点号 匹配单个任意字符
‘ ^和$ ’以..开头和以…结尾
‘[ ]’ 匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep。
‘[^]’ 匹配一个不在指定范围内的字符,如:'[^A-FH-Z]rep'匹配不包含A-R和T-Z的一个字母开头,紧跟rep的行。
620140728
6.1正则截取函数regexp_substr
REEXP_SUBSTR(string ,pattern,position,occurrence,modifier);
? -- Pattern : 进行匹配的正则表达式
? -- Position :起始位置,从第几个字符开始正则表达式匹配(默认为1)
? -- Occurrence :标识第几个匹配组,默认为1
? -- Modifier :模式(’i’ 不区分大小写进行检索,’区分大小写进行检索,默认为’c’)
?Select regexp_substr (‘17,22,33,44,55’,’[^,]+’,1,3,’i’) as str from dual;
6.2Regexp_like()和Regexp_replace() 用户条件语句中
Regexp_replace(string,’[a-zA-Z]’)
Regexp_like(string,‘^[0-9]*’)
w 匹配字母或数字或下划线或汉字
s 匹配任意的空白符
d 匹配数字
匹配单词的开始或结束
regexp_replace
以(.*)来匹配规律或者分割的字符,第三个参数的‘1’表示第一个位置。。。类推
--截取类似于字符串123_1563中的123
SELECT regexp_replace('123_1563','(.*)_(.*)','2') FROM dual;
SELECT regexp_replace('123_1563','_[[:digit:]]+','') FROM dual;
--把字符串'123456fewfwefe34165'替换为0的字符串
SELECT regexp_replace('123456fewfwefe34165','[^[:digit:]]','0') FROM dual;
--把姓与名互相替换位置(因为英语名跟中文名是不一样的。)
SELECT regexp_replace('mei han','(.*) (.*)','2 1' ) FROM dual;
select regexp_replace('ddddddddgeeeeeeeee','(.*)g(.*)','2g1') from dual;
以逗号分割字符串
SELECT 【distinct】REGEXP_SUBSTR ('c1','[^,]+',1,LEVEL) as "token"
FROM DUAL
CONNECT BY REGEXP_SUBSTR ('c1','[^,]+',1,LEVEL) IS NOT NULL
order by 1
新建索引
-- Create/Recreate indexes
create index POLAPDATA.IDX_AIS_OFFER_POLICY_DETAIL on POLAPDATA.AIS_OFFER_POLICY_COST_DETAIL (POLICY_NO) initrans 16;
字符串以逗号分隔,转成多条记录:
SELECT 【distinct】REGEXP_SUBSTR ('12,12,23,3434,545,656','[^,]+',1,LEVEL) as "token"
FROM DUAL
CONNECT BY REGEXP_SUBSTR ('12,12,23,3434,545,656','[^,]+',1,LEVEL) IS NOT NULL
order by 1
oracle 给参数赋值的两个方法:
- CREATE OR REPLACE Procedure grantValue Is
- v_tabName Varchar2(50);
- v_recordNum Number;
- v_var Varchar2(50) := '直接赋值法'; -- 方法1 直接赋值
- v_minvar Varchar2(50);
- v_sql Varchar2(200);
- v_tab Varchar2(50);
- Begin
- -- 方法二, select into 方法
- Select Min(t.sal) Into v_minvar From emp t;
- dbms_output.put_line('最少工资为'||v_minvar);
- -- 方法三, 动态sql 发
- v_tab := 'emp';
- v_sql := 'select count(*) from '|| v_tab;
- Execute Immediate v_sql Into v_minvar;
- dbms_output.put_line('公司总人数为'||v_minvar);
- End grantValue;
- /
行转列的方法:
数据如下,要将其改为行,使用wm_concat()函数可将其用逗号隔开
lag函数的用法和lead函数的用法:(lead方法略)
--1、不使用分组partition by ,直接order by ,表示向下移动一行,第一行没有的值用null代替,默认就是null
select deptno, sal a, lag(sal,1, null) over( order by deptno) from emp;
--1、使用分组partition by ,从下面可以看见分为3组,每组不干扰,每一行想下移
select deptno, sal a, lag(sal,1, null) over(partition by deptno order by deptno) from emp;
随机数的取法:
第一步:
select dbms_random.value from dual;--随机生成小数
第二步:转换成varchar2类型
select cast(dbms_random.value as varchar2(10)) from dual;--cast 转换成varchar2类型
第三步:截取小数点之后的数,四位随机数
select substr(cast(dbms_random.value as number),3,4) from dual;
2)使用trunc处理数字
取0-100的整数怎么取呢
select trunc(dbms_random.value(0,100)) from dual;
取0-100的数字保留一位小数
select trunc(dbms_random.value(0,100),1) from dual;
系统随机在10个数字键中给用户指定3个按键
select lpad(trunc(dbms_random.value(0,999)),3,'0') from dual;
oracle精确到毫秒的时间设置:
select to_char(current_timestamp,'yyyy-mm-dd hh24:mi:ss.ff6') from dual;
select to_char(current_timestamp,'yyyy-mm-dd hh24:mi:ss.ff6') from dual;
select substr('2017-02-28 17:10:03.057818',18,2) + substr('2017-02-28 17:10:03.057818',21,6)/1000000 from dual ;
oracle 的merge into 语法:
/*Merge into 详细介绍
MERGE语句是Oracle9i新增的语法,用来合并UPDATE和INSERT语句。
通过MERGE语句,根据一张表或子查询的连接条件对另外一张表进行查询,
连接条件匹配上的进行UPDATE,无法匹配的执行INSERT。
这个语法仅需要一次全表扫描就完成了全部工作,执行效率要高于INSERT+UPDATE。
*/
/*语法:
MERGE [INTO [schema .] table [t_alias]
USING [schema .] { table | view | subquery } [t_alias]
ON ( condition )
WHEN MATCHED THEN merge_update_clause
WHEN NOT MATCHED THEN merge_insert_clause;
*/
例子:
merge into users using doctor on (users.user_id = doctor.doctorid) when matched then update set users.user_name = doctor.doctorname when not matched then insert values (doctor.doctorid, doctor.doctorid, '8736F1C243E3B14941A59FF736E1B5A8', doctor.doctorname, sysdate, 'T', ' ', doctor.deptid, 'b319dac7-2c5c-496a-bc36-7f3e1cc066b8');
调用含有返回值的存储过程:
BEGIN v_rule_id := 'C09'; --查找规则ID PKG_LOOK_UP_RULE_TABLE.p_find_item_id_status ( i_userid => i_userid , --操作者 i_item_id => TO_NUMBER(i_item_id) , --档期ID i_item_oper_desc => v_rule_id , --当前档期操作状态规则码 i_oper_status => '' , --规则步骤(状态值) o_result => o_result , --执行结果 0:成功 其它:失败 o_errmsg => o_errmsg , --异常信息 o_item_flag => v_item_status --档期状态 ); IF o_result <> 0 THEN ROLLBACK; RETURN; END IF; END;
关于SQL窗口函数中sum 累计求和
关键字:
rows BETWEEN unbounded preceding and current row
SELECT
t1.cal_date AS "日期",
t1.fg_code AS "机种",
t1.outbound_num AS "出库数",
sum(t1.outbound_num)over(partition by t1.cal_date order by 1 rows BETWEEN unbounded preceding and current row ) as "累计出库数"
FROM pmrz_ods_sap_in_out_bound t1