zoukankan      html  css  js  c++  java
  • 积跬步,至千里!!!

    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.3db2中的数据导出 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.3plsql导出的数据,要经过转为unixISCII码,才能进行导入。否则会出现乱码

     

     

     

     

     

    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)》表空间(tablespace4部分组成。 

    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, uniquecheck 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‘ 就是一条数据,如下,下面就是查询出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; 
    查询出来的东西放在临时表t1t2 中 
    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 可以产生回滚段,而truncateDDL语言,删掉就没了,不能回滚 
    2.truncate会进行空间回收,而且删除数据速度比较快哦 
    520140725shell) 
    5.1linux下安装oracle为什么要创建oracle用户
    要有专门属于oracle的环境变量等,oracle的环境变量都是配置在oracle用户下的
    安全。权限 

    5.2查看当前登陆到系统的的用户 
    who -m 
    5.3Shell中常用的通配符 

    5.4Shell的元字符 
    +’ +前面的字符出现一次或者多次(至少一次), 
    *’ *前面的字符出现零次或者多次(任意次), 
    ‘?’?前面的字符出现零次或者一次 
    ‘ ’ 点号 匹配单个任意字符 
    ‘ ^’以..开头和以…结尾 
    [ ]’ 匹配一个指定范围内的字符,如'[Gg]rep'匹配Grepgrep。 
    [^]’ 匹配一个不在指定范围内的字符,如:'[^A-FH-Z]rep'匹配不包含A-RT-Z的一个字母开头,紧跟rep的行。

     


    620140728 
    6.1正则截取函数regexp_substr 
    REEXP_SUBSTR(string ,pattern,position,occurrence,modifier); 
    ? -- Pattern : 进行匹配的正则表达式 
    ? -- Position :起始位置,从第几个字符开始正则表达式匹配(默认为1) 
    ? -- Occurrence :标识第几个匹配组,默认为
    ? -- 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]*
    匹配字母或数字或下划线或汉字 
    匹配任意的空白符 
    匹配数字 
    匹配单词的开始或结束

    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 给参数赋值的两个方法:

    1. CREATE OR REPLACE Procedure grantValue Is  
    2.    v_tabName     Varchar2(50);  
    3.    v_recordNum   Number;  
    4.    v_var         Varchar2(50) := '直接赋值法'-- 方法1 直接赋值  
    5.    v_minvar      Varchar2(50);  
    6.    v_sql         Varchar2(200);  
    7.    v_tab         Varchar2(50);  
    8.  Begin  
    9.      
    10.     -- 方法二, select into 方法  
    11.     Select Min(t.sal) Into v_minvar From emp t;  
    12.     dbms_output.put_line('最少工资为'||v_minvar);  
    13.   
    14.     -- 方法三, 动态sql 发  
    15.     v_tab := 'emp';  
    16.     v_sql := 'select count(*) from '|| v_tab;  
    17.     Execute Immediate v_sql Into v_minvar;  
    18.     dbms_output.put_line('公司总人数为'||v_minvar);  
    19.       
    20.  End grantValue;  
    21. /  

    行转列的方法:

    数据如下,要将其改为行,使用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  
    

    欢迎对it热情的同学,加qq进行技术讨论; QQ:850922253
  • 相关阅读:
    java设计模式单例模式
    C++了解free和delete
    ExtJs开发教程_001_Ext.data.Store使用方法详解
    ExtJs开发教程_002_如何使用ExtJs中的Ext.data.TreeStore
    C++操作符重载
    【hibernate】学习期间总结与记录
    ExtJs常识性知识解答
    学习指针一些基本操作
    简记mysql在tomcat下和hibernate一起使用,No suitable driver found for的问题
    很高兴今天学了点新东西,关于Cache
  • 原文地址:https://www.cnblogs.com/zhangwensi/p/3981777.html
Copyright © 2011-2022 走看看