oracle操作字符串:拼接、替换、截取、查找

admin 发表了文章 • 0 个评论 • 113 次浏览 • 2018-05-01 09:28 • 来自相关话题

1、拼接字符串

1)可以使用“||”来拼接字符串

1 select '拼接'||'字符串' as str from dual 
2)通过concat()函数实现

1 select concat('拼接', '字符串') as str from dual 
注:oracle的concat函数只支持两个参数的方法,即只能拼接两个参数,如要拼接多个参数则嵌套使用concat可实现,如:

1 select concat(concat('拼接', '多个'), '字符串') from dual 
2、截取字符串

SUBSTR(string,start_position,[length])    求子字符串,返回字符串
解释:string 源字符串
       start_position   开始位置(从0开始)
       length 可选项,子字符串的个数

1 select substr(to_char(sysdate, 'yyyy-mm-dd HH:mi:ss'), 12, 5) as time from dual 
1 substr("ABCDEFG", 0); //返回:ABCDEFG,截取所有字符 
2 substr("ABCDEFG", 2); //返回:CDEFG,截取从C开始之后所有字符 
3 substr("ABCDEFG", 0, 3); //返回:ABC,截取从A开始3个字符 
4 substr("ABCDEFG", 0, 100); //返回:ABCDEFG,100虽然超出预处理的字符串最长度,但不会影响返回结果,系统按预处理字符串最大数量返回。 
5 substr("ABCDEFG", -3); //返回:EFG,注意参数-3,为负值时表示从尾部开始算起,字符串排列位置不变。
3、查找字符串

INSTR(string,subString,position,ocurrence)查找字符串位置

解释:string:源字符串
        subString:要查找的子字符串
        position:查找的开始位置
        ocurrence:源字符串中第几次出现的子字符串

1 select INSTR('CORPORATE FLOOR','OR', 3, 2) as loc from dual 
4、替换字符串

replace(strSource, str1, str2) 将strSource中的str1替换成str2

解析:strSource:源字符串

   str1: 要替换的字符串

  str2: 替换后的字符串

1 select '替换字符串' as oldStr, replace('替换字符串', '替换', '修改') as newStr from dual 查看全部
1、拼接字符串

1)可以使用“||”来拼接字符串

1 select '拼接'||'字符串' as str from dual 
2)通过concat()函数实现

1 select concat('拼接', '字符串') as str from dual 
注:oracle的concat函数只支持两个参数的方法,即只能拼接两个参数,如要拼接多个参数则嵌套使用concat可实现,如:

1 select concat(concat('拼接', '多个'), '字符串') from dual 
2、截取字符串

SUBSTR(string,start_position,[length])    求子字符串,返回字符串
解释:string 源字符串
       start_position   开始位置(从0开始)
       length 可选项,子字符串的个数

1 select substr(to_char(sysdate, 'yyyy-mm-dd HH:mi:ss'), 12, 5) as time from dual 
1 substr("ABCDEFG", 0); //返回:ABCDEFG,截取所有字符 
2 substr("ABCDEFG", 2); //返回:CDEFG,截取从C开始之后所有字符 
3 substr("ABCDEFG", 0, 3); //返回:ABC,截取从A开始3个字符 
4 substr("ABCDEFG", 0, 100); //返回:ABCDEFG,100虽然超出预处理的字符串最长度,但不会影响返回结果,系统按预处理字符串最大数量返回。 
5 substr("ABCDEFG", -3); //返回:EFG,注意参数-3,为负值时表示从尾部开始算起,字符串排列位置不变。
3、查找字符串

INSTR(string,subString,position,ocurrence)查找字符串位置

解释:string:源字符串
        subString:要查找的子字符串
        position:查找的开始位置
        ocurrence:源字符串中第几次出现的子字符串

1 select INSTR('CORPORATE FLOOR','OR', 3, 2) as loc from dual 
4、替换字符串

replace(strSource, str1, str2) 将strSource中的str1替换成str2

解析:strSource:源字符串

   str1: 要替换的字符串

  str2: 替换后的字符串

1 select '替换字符串' as oldStr, replace('替换字符串', '替换', '修改') as newStr from dual

oracle里存储函数将金额数字转换成大写

admin 发表了文章 • 0 个评论 • 146 次浏览 • 2018-04-30 16:47 • 来自相关话题

CREATE OR REPLACE FUNCTION NUMBER_TO_CHINESE(P_NUM IN NUMBER DEFAULT NULL)  
  RETURN NVARCHAR2 IS  
  /*Ver:1.0 Created By xsb on 2003-8-18 For:  
  将金额数字(单位元)转换为大写(采用从低至高算法)  
  数字整数部分不得超过16位,可以是负数。  
  Ver:1.1 Modified By xsb on 2003-8-20 For:个位数处理也放在For循环中。  
  Ver:1.2 Modified By xsb on 2003-8-22 For:分后不带整字。  
  Ver:1.3 Modified By xsb on 2003-8-28 For:完善测试用例。  
  测试用例:  
  SET HEAD OFF  
  SET FEED OFF  
  select '无参数时='||NUMBER_TO_CHINESE() from dual;  
  select 'null='||NUMBER_TO_CHINESE(null) from dual;  
  select '0='||NUMBER_TO_CHINESE(0) from dual;  
  select '0.01='||NUMBER_TO_CHINESE(0.01) from dual;  
  select '0.126='||NUMBER_TO_CHINESE(0.126) from dual;  
  select '01.234='||NUMBER_TO_CHINESE(01.234) from dual;  
  select '10='||NUMBER_TO_CHINESE(10) from dual;  
  select '100.1='||NUMBER_TO_CHINESE(100.1) from dual;  
  select '100.01='||NUMBER_TO_CHINESE(100.01) from dual;  
  select '10000='||NUMBER_TO_CHINESE(10000) from dual;  
  select '10012.12='||NUMBER_TO_CHINESE(10012.12) from dual;  
  select '20000020.01='||NUMBER_TO_CHINESE(20000020.01) from dual;  
  select '3040506708.901='||NUMBER_TO_CHINESE(3040506708.901) from dual;  
  select '40005006078.001='||NUMBER_TO_CHINESE(40005006078.001) from dual;  
  select '-123456789.98='||NUMBER_TO_CHINESE(-123456789.98) from dual;  
  select '123456789123456789.89='||NUMBER_TO_CHINESE(123456789123456789.89) from dual;  
  test  
  */  
  RESULT      NVARCHAR2(100); --返回字符串  
  NUM_ROUND   NVARCHAR2(100) := TO_CHAR(ABS(ROUND(P_NUM, 2))); --转换数字为小数点后2位的字符(正数)  
  NUM_LEFT    NVARCHAR2(100); --小数点左边的数字  
  NUM_RIGHT   NVARCHAR2(2); --小数点右边的数字  
  STR1        NCHAR(10) := '零壹贰叁肆伍陆柒捌玖'; --数字大写  
  STR2        NCHAR(16) := '元拾佰仟万拾佰仟亿拾佰仟万拾佰仟'; --数字位数(从低至高)  
  NUM_PRE     NUMBER(1) := 1; --前一位上的数字  
  NUM_CURRENT NUMBER(1); --当前位上的数字  
  NUM_COUNT   NUMBER := 0; --当前数字位数  
  NUM1        NUMBER;  
  
BEGIN  
  IF P_NUM IS NULL THEN  
    RETURN NULL;  
  END IF; --转换数字为null时返回null  
  
  SELECT TO_CHAR(NVL(SUBSTR(TO_CHAR(NUM_ROUND),  
                            1,  
                            DECODE(INSTR(TO_CHAR(NUM_ROUND), '.'),  
                                   0,  
                                   LENGTH(NUM_ROUND),  
                                   INSTR(TO_CHAR(NUM_ROUND), '.') - 1)),  
                     0))  
    INTO NUM_LEFT  
    FROM DUAL; --取得小数点左边的数字  
  SELECT SUBSTR(TO_CHAR(NUM_ROUND),  
                DECODE(INSTR(TO_CHAR(NUM_ROUND), '.'),  
                       0,  
                       LENGTH(NUM_ROUND) + 1,  
                       INSTR(TO_CHAR(NUM_ROUND), '.') + 1),  
                2)  
    INTO NUM_RIGHT  
    FROM DUAL; --取得小数点右边的数字  
  SELECT CASE  
           WHEN LENGTH(NUM_LEFT) >= 8 THEN  
            TO_NUMBER(SUBSTR(TO_CHAR(NUM_LEFT), -8, 4))  
           ELSE  
            TO_NUMBER(SUBSTR(TO_CHAR(NUM_LEFT),  
                             -LENGTH(NUM_LEFT),  
                             LENGTH(NUM_LEFT) - 4))  
         END  
    INTO NUM1  
    FROM DUAL; ---取得千、百、十、万位上的数字  
  IF LENGTH(NUM_LEFT) > 16 THEN  
    RETURN '**********';  
  END IF; --数字整数部分超过16位时  
  
  --采用从低至高的算法,先处理小数点右边的数字  
  IF LENGTH(NUM_RIGHT) = 2 THEN  
    IF TO_NUMBER(SUBSTR(NUM_RIGHT, 1, 1)) = 0 THEN  
      RESULT := '零' ||  
                SUBSTR(STR1, TO_NUMBER(SUBSTR(NUM_RIGHT, 2, 1)) + 1, 1) || '分';  
    ELSE  
      RESULT := SUBSTR(STR1, TO_NUMBER(SUBSTR(NUM_RIGHT, 1, 1)) + 1, 1) || '角' ||  
                SUBSTR(STR1, TO_NUMBER(SUBSTR(NUM_RIGHT, 2, 1)) + 1, 1) || '分';  
    END IF;  
  ELSIF LENGTH(NUM_RIGHT) = 1 THEN  
    RESULT := SUBSTR(STR1, TO_NUMBER(SUBSTR(NUM_RIGHT, 1, 1)) + 1, 1) || '角整';  
  ELSE  
    RESULT := '整';  
  END IF;  
  --再处理小数点左边的数字  
  FOR I IN REVERSE 1 .. LENGTH(NUM_LEFT) LOOP  
    --(从低至高)  
    NUM_COUNT   := NUM_COUNT + 1; --当前数字位数  
    NUM_CURRENT := TO_NUMBER(SUBSTR(NUM_LEFT, I, 1)); --当前位上的数字  
    IF NUM_CURRENT > 0 THEN  
      --当前位上数字不为0按正常处理  
      RESULT := SUBSTR(STR1, NUM_CURRENT + 1, 1) ||  
                SUBSTR(STR2, NUM_COUNT, 1) || RESULT;  
    ELSE  
      --当前位上数字为0时  
      IF NUM_COUNT = 5 THEN  
        IF MOD(NUM_COUNT - 1, 4) = 0 AND NUM1 <> 0 THEN  
          RESULT  := SUBSTR(STR2, NUM_COUNT, 1) || RESULT;  
          NUM_PRE := 0; --元、万,亿前不准加零 --当前位是元、万或亿时  
        END IF;  
      ELSE  
        IF MOD(NUM_COUNT - 1, 4) = 0 THEN  
          RESULT  := SUBSTR(STR2, NUM_COUNT, 1) || RESULT;  
          NUM_PRE := 0; --元、万,亿前不准加零  
        END IF;  
      END IF;  
      IF NUM_PRE > 0 OR LENGTH(NUM_LEFT) = 1 THEN  
        --上一位数字不为0或只有个位时  
        RESULT := SUBSTR(STR1, NUM_CURRENT + 1, 1) || RESULT;  
      END IF;  
    END IF;  
    NUM_PRE := NUM_CURRENT;  
  END LOOP;  
  
  IF P_NUM < 0 THEN  
    --转换数字是负数时  
    RESULT := '负' || RESULT;  
  END IF;  
  
  RETURN RESULT;  
  
EXCEPTION  
  WHEN OTHERS THEN  
    RAISE_APPLICATION_ERROR(-20001, '数字转换大写出现错误!' || SQLERRM);  
END;   查看全部
CREATE OR REPLACE FUNCTION NUMBER_TO_CHINESE(P_NUM IN NUMBER DEFAULT NULL)  
  RETURN NVARCHAR2 IS  
  /*Ver:1.0 Created By xsb on 2003-8-18 For:  
  将金额数字(单位元)转换为大写(采用从低至高算法)  
  数字整数部分不得超过16位,可以是负数。  
  Ver:1.1 Modified By xsb on 2003-8-20 For:个位数处理也放在For循环中。  
  Ver:1.2 Modified By xsb on 2003-8-22 For:分后不带整字。  
  Ver:1.3 Modified By xsb on 2003-8-28 For:完善测试用例。  
  测试用例:  
  SET HEAD OFF  
  SET FEED OFF  
  select '无参数时='||NUMBER_TO_CHINESE() from dual;  
  select 'null='||NUMBER_TO_CHINESE(null) from dual;  
  select '0='||NUMBER_TO_CHINESE(0) from dual;  
  select '0.01='||NUMBER_TO_CHINESE(0.01) from dual;  
  select '0.126='||NUMBER_TO_CHINESE(0.126) from dual;  
  select '01.234='||NUMBER_TO_CHINESE(01.234) from dual;  
  select '10='||NUMBER_TO_CHINESE(10) from dual;  
  select '100.1='||NUMBER_TO_CHINESE(100.1) from dual;  
  select '100.01='||NUMBER_TO_CHINESE(100.01) from dual;  
  select '10000='||NUMBER_TO_CHINESE(10000) from dual;  
  select '10012.12='||NUMBER_TO_CHINESE(10012.12) from dual;  
  select '20000020.01='||NUMBER_TO_CHINESE(20000020.01) from dual;  
  select '3040506708.901='||NUMBER_TO_CHINESE(3040506708.901) from dual;  
  select '40005006078.001='||NUMBER_TO_CHINESE(40005006078.001) from dual;  
  select '-123456789.98='||NUMBER_TO_CHINESE(-123456789.98) from dual;  
  select '123456789123456789.89='||NUMBER_TO_CHINESE(123456789123456789.89) from dual;  
  test  
  */  
  RESULT      NVARCHAR2(100); --返回字符串  
  NUM_ROUND   NVARCHAR2(100) := TO_CHAR(ABS(ROUND(P_NUM, 2))); --转换数字为小数点后2位的字符(正数)  
  NUM_LEFT    NVARCHAR2(100); --小数点左边的数字  
  NUM_RIGHT   NVARCHAR2(2); --小数点右边的数字  
  STR1        NCHAR(10) := '零壹贰叁肆伍陆柒捌玖'; --数字大写  
  STR2        NCHAR(16) := '元拾佰仟万拾佰仟亿拾佰仟万拾佰仟'; --数字位数(从低至高)  
  NUM_PRE     NUMBER(1) := 1; --前一位上的数字  
  NUM_CURRENT NUMBER(1); --当前位上的数字  
  NUM_COUNT   NUMBER := 0; --当前数字位数  
  NUM1        NUMBER;  
  
BEGIN  
  IF P_NUM IS NULL THEN  
    RETURN NULL;  
  END IF; --转换数字为null时返回null  
  
  SELECT TO_CHAR(NVL(SUBSTR(TO_CHAR(NUM_ROUND),  
                            1,  
                            DECODE(INSTR(TO_CHAR(NUM_ROUND), '.'),  
                                   0,  
                                   LENGTH(NUM_ROUND),  
                                   INSTR(TO_CHAR(NUM_ROUND), '.') - 1)),  
                     0))  
    INTO NUM_LEFT  
    FROM DUAL; --取得小数点左边的数字  
  SELECT SUBSTR(TO_CHAR(NUM_ROUND),  
                DECODE(INSTR(TO_CHAR(NUM_ROUND), '.'),  
                       0,  
                       LENGTH(NUM_ROUND) + 1,  
                       INSTR(TO_CHAR(NUM_ROUND), '.') + 1),  
                2)  
    INTO NUM_RIGHT  
    FROM DUAL; --取得小数点右边的数字  
  SELECT CASE  
           WHEN LENGTH(NUM_LEFT) >= 8 THEN  
            TO_NUMBER(SUBSTR(TO_CHAR(NUM_LEFT), -8, 4))  
           ELSE  
            TO_NUMBER(SUBSTR(TO_CHAR(NUM_LEFT),  
                             -LENGTH(NUM_LEFT),  
                             LENGTH(NUM_LEFT) - 4))  
         END  
    INTO NUM1  
    FROM DUAL; ---取得千、百、十、万位上的数字  
  IF LENGTH(NUM_LEFT) > 16 THEN  
    RETURN '**********';  
  END IF; --数字整数部分超过16位时  
  
  --采用从低至高的算法,先处理小数点右边的数字  
  IF LENGTH(NUM_RIGHT) = 2 THEN  
    IF TO_NUMBER(SUBSTR(NUM_RIGHT, 1, 1)) = 0 THEN  
      RESULT := '零' ||  
                SUBSTR(STR1, TO_NUMBER(SUBSTR(NUM_RIGHT, 2, 1)) + 1, 1) || '分';  
    ELSE  
      RESULT := SUBSTR(STR1, TO_NUMBER(SUBSTR(NUM_RIGHT, 1, 1)) + 1, 1) || '角' ||  
                SUBSTR(STR1, TO_NUMBER(SUBSTR(NUM_RIGHT, 2, 1)) + 1, 1) || '分';  
    END IF;  
  ELSIF LENGTH(NUM_RIGHT) = 1 THEN  
    RESULT := SUBSTR(STR1, TO_NUMBER(SUBSTR(NUM_RIGHT, 1, 1)) + 1, 1) || '角整';  
  ELSE  
    RESULT := '整';  
  END IF;  
  --再处理小数点左边的数字  
  FOR I IN REVERSE 1 .. LENGTH(NUM_LEFT) LOOP  
    --(从低至高)  
    NUM_COUNT   := NUM_COUNT + 1; --当前数字位数  
    NUM_CURRENT := TO_NUMBER(SUBSTR(NUM_LEFT, I, 1)); --当前位上的数字  
    IF NUM_CURRENT > 0 THEN  
      --当前位上数字不为0按正常处理  
      RESULT := SUBSTR(STR1, NUM_CURRENT + 1, 1) ||  
                SUBSTR(STR2, NUM_COUNT, 1) || RESULT;  
    ELSE  
      --当前位上数字为0时  
      IF NUM_COUNT = 5 THEN  
        IF MOD(NUM_COUNT - 1, 4) = 0 AND NUM1 <> 0 THEN  
          RESULT  := SUBSTR(STR2, NUM_COUNT, 1) || RESULT;  
          NUM_PRE := 0; --元、万,亿前不准加零 --当前位是元、万或亿时  
        END IF;  
      ELSE  
        IF MOD(NUM_COUNT - 1, 4) = 0 THEN  
          RESULT  := SUBSTR(STR2, NUM_COUNT, 1) || RESULT;  
          NUM_PRE := 0; --元、万,亿前不准加零  
        END IF;  
      END IF;  
      IF NUM_PRE > 0 OR LENGTH(NUM_LEFT) = 1 THEN  
        --上一位数字不为0或只有个位时  
        RESULT := SUBSTR(STR1, NUM_CURRENT + 1, 1) || RESULT;  
      END IF;  
    END IF;  
    NUM_PRE := NUM_CURRENT;  
  END LOOP;  
  
  IF P_NUM < 0 THEN  
    --转换数字是负数时  
    RESULT := '负' || RESULT;  
  END IF;  
  
  RETURN RESULT;  
  
EXCEPTION  
  WHEN OTHERS THEN  
    RAISE_APPLICATION_ERROR(-20001, '数字转换大写出现错误!' || SQLERRM);  
END;  

oracle拆分逗号分隔字符串 实现split

admin 发表了文章 • 0 个评论 • 145 次浏览 • 2018-04-30 12:02 • 来自相关话题

一个字符串中有像逗号或其它符号分隔,你想把它折分成列,如’first field, second field , third field’,
拆成

first field
second field
third field

第一种 用10G开始支持的正则表达式

anbob@ANBOB>SELECT REGEXP_SUBSTR ('first field, second field , third field', '[^,]+', 1,rownum)
  2  FROM DUAL
  3  CONNECT BY ROWNUM <=
  4  LENGTH ('first field, second field , third field') - LENGTH (REPLACE ('first field, second field , third field', ',', ''))+1;

REGEXP_SUBSTR('FIRSTFIELD,SECONDFIELD,THIRDFIELD','[^,]+',1,ROWNUM)
------------------------------------------------------------------------------
first field
second field
third field
TIP:
REGEXP_SUBSTR 函数是把那个串以正则不是以,(逗号)开头的截取,第二个参数是取第几组,rownum伪列序号,connect 循环 ,循环次数为串总长度-去除分隔符后=几个分隔符 +1

第二种用type,function

第一,先创建一个Type

CREATE OR REPLACE TYPE type_split IS TABLE OF VARCHAR2 (4000)
第二,创建函数

create or replace function split(p_list varchar2,p_sep varchar2 := ’,’)
return type_split pipelined
IS
l_idx pls_integer;
v_list varchar2(50) := p_list;
begin
 loop
   l_idx := instr(v_list,p_sep);
   if l_idx = 0 then
     pipe row(substr(v_list,1,l_idx-1));
     v_list := substr(v_list,l_idx+length(p_sep));
   else
     pipe row(v_list);
    exit;
   end if;
  end loop;
end split;
第三,调试

select * from table(split(‘aaa,bbb,ccc’,',’));

拆分列字段

anbob@ANBOB>select * from test11;

                  ID NAME
-------------------- ----------
                   1 a,b,c
                   2 e,d

nbob@ANBOB>with temp0 as (select LEVEL lv from dual CONNECT BY LEVEL <= 100)  
  2       select id,substr(t.vals,instr(t.vals, ',', 1, tv.lv) + 1,  
  3                          instr(t.vals, ',', 1, tv.lv + 1) -(  
  4                          instr(t.vals, ',', 1, tv.lv) + 1)  
  5                   ) AS name  
  6       from (select id,',' || name || ',' AS vals,  
  7                  length(name || ',') - nvl(length(REPLACE(name, ',')), 0) AS cnt  
  8             from test11) t join temp0 tv  
  9                       on  tv.lv <= t.cnt  order by 1;

                  ID NAME
-------------------- ------------------------
                   1 a
                   1 b
                   1 c
                   2 d
                   2 e
扩展 regexp_replace

V字段中每个值中字符串以,分隔,如果不是以9开头那组串加‘00’

anbob@NCME>create table testreg(v varchar2(80));
Table created.
anbob@NCME>insert into testreg values(’911,000,12,31′);
1 row created.

anbob@NCME>insert into testreg values(’11911,554000,312,931′);
1 row created.

anbob@NCME>commit;
Commit complete.

anbob@NCME>select ltrim(regexp_replace(‘,’||v,’([,])’,'\100′),’,') newv,v from testreg;

NEWV V
—————————— ——————————
00911,00000,0012,0031 911,000,12,31
0011911,00554000,00312,00931 11911,554000,312,931 查看全部
一个字符串中有像逗号或其它符号分隔,你想把它折分成列,如’first field, second field , third field’,
拆成

first field
second field
third field

第一种 用10G开始支持的正则表达式

anbob@ANBOB>SELECT REGEXP_SUBSTR ('first field, second field , third field', '[^,]+', 1,rownum)
  2  FROM DUAL
  3  CONNECT BY ROWNUM <=
  4  LENGTH ('first field, second field , third field') - LENGTH (REPLACE ('first field, second field , third field', ',', ''))+1;

REGEXP_SUBSTR('FIRSTFIELD,SECONDFIELD,THIRDFIELD','[^,]+',1,ROWNUM)
------------------------------------------------------------------------------
first field
second field
third field
TIP:
REGEXP_SUBSTR 函数是把那个串以正则不是以,(逗号)开头的截取,第二个参数是取第几组,rownum伪列序号,connect 循环 ,循环次数为串总长度-去除分隔符后=几个分隔符 +1

第二种用type,function

第一,先创建一个Type

CREATE OR REPLACE TYPE type_split IS TABLE OF VARCHAR2 (4000)
第二,创建函数

create or replace function split(p_list varchar2,p_sep varchar2 := ’,’)
return type_split pipelined
IS
l_idx pls_integer;
v_list varchar2(50) := p_list;
begin
 loop
   l_idx := instr(v_list,p_sep);
   if l_idx = 0 then
     pipe row(substr(v_list,1,l_idx-1));
     v_list := substr(v_list,l_idx+length(p_sep));
   else
     pipe row(v_list);
    exit;
   end if;
  end loop;
end split;
第三,调试

select * from table(split(‘aaa,bbb,ccc’,',’));

拆分列字段

anbob@ANBOB>select * from test11;

                  ID NAME
-------------------- ----------
                   1 a,b,c
                   2 e,d

nbob@ANBOB>with temp0 as (select LEVEL lv from dual CONNECT BY LEVEL <= 100)  
  2       select id,substr(t.vals,instr(t.vals, ',', 1, tv.lv) + 1,  
  3                          instr(t.vals, ',', 1, tv.lv + 1) -(  
  4                          instr(t.vals, ',', 1, tv.lv) + 1)  
  5                   ) AS name  
  6       from (select id,',' || name || ',' AS vals,  
  7                  length(name || ',') - nvl(length(REPLACE(name, ',')), 0) AS cnt  
  8             from test11) t join temp0 tv  
  9                       on  tv.lv <= t.cnt  order by 1;

                  ID NAME
-------------------- ------------------------
                   1 a
                   1 b
                   1 c
                   2 d
                   2 e
扩展 regexp_replace

V字段中每个值中字符串以,分隔,如果不是以9开头那组串加‘00’

anbob@NCME>create table testreg(v varchar2(80));
Table created.
anbob@NCME>insert into testreg values(’911,000,12,31′);
1 row created.

anbob@NCME>insert into testreg values(’11911,554000,312,931′);
1 row created.

anbob@NCME>commit;
Commit complete.

anbob@NCME>select ltrim(regexp_replace(‘,’||v,’([,])’,'\100′),’,') newv,v from testreg;

NEWV V
—————————— ——————————
00911,00000,0012,0031 911,000,12,31
0011911,00554000,00312,00931 11911,554000,312,931

windows账号禁止本地登录

回复

admin 发起了问题 • 1 人关注 • 0 个回复 • 165 次浏览 • 2018-04-30 10:55 • 来自相关话题

局域网共享的实现

admin 发表了文章 • 0 个评论 • 121 次浏览 • 2018-04-30 09:48 • 来自相关话题

在局域网内其他运行Windows操作系统的计算机上,可以通过网上邻居实现文件和磁盘的远程共享。
 通常情况下,只要计算机连接至局域网络,并配置了正确的IP地址信息,那么,Windows只需运行片刻,即可发现网络中所有的工作组和计算机。
对于Windows Me、Windows 2000和Windows XP而言,更是可以直接发现网络中可供共享的文件夹,并将之显示在Windows资源管理器的网络邻居中。
用户可做的,只是双击并打开自己感兴趣的文件夹而已。 注意:如果在网上邻居中无法找到欲共享资源的计算机,可利用查找计算机的方式,利用该计算机的名称查找该计算机。另外,实现共享的计算机之间应当使用同一网段的IP地址,否则,彼此之间将无法找到。
 SMB(Server Message Block)协议在NT/2000中用来作文件共享,在NT中,SMB运行于NBT(NetBIOS over TCP/IP)上,使用137,139(UDP),139(TCP)端口。在2000中,SMB可以直接运行在tcp/ip上,而没有额外的NBT层,使用TCP 445端口。 当2000使用网络共享的时候,就面临着选择139或者445端口了。
 下面的情况确定会话使用的端口:
 1、如果客户端启用了NBT,那么连接的时候将同时访问139和445端口,如果从445端口得到回应,那么客户端将发送RST到139端口,终止这个端口的连接,接着就从445端口进行SMB的会话了;如果没有从445端口而是从139得到回应,那么就从139端口进行会话;如果没有得到任何回应,那么SMB会话失败。 
2、如果客户端禁用了NBT,他就将只从445端口进行连接。当然如果服务器(开共享端)没有445端口进行SMB会话的话,那么就会访问失败了,所以禁用445端口后,对访问NT机器的共享会失败。 
3、如果服务器端启用NBT,那么就同时监听UDP 137、138端口和TCP139,445。如果禁用NBT,那么就只监听445端口了。
  查看全部
在局域网内其他运行Windows操作系统的计算机上,可以通过网上邻居实现文件和磁盘的远程共享。
 通常情况下,只要计算机连接至局域网络,并配置了正确的IP地址信息,那么,Windows只需运行片刻,即可发现网络中所有的工作组和计算机。
对于Windows Me、Windows 2000和Windows XP而言,更是可以直接发现网络中可供共享的文件夹,并将之显示在Windows资源管理器的网络邻居中。
用户可做的,只是双击并打开自己感兴趣的文件夹而已。 注意:如果在网上邻居中无法找到欲共享资源的计算机,可利用查找计算机的方式,利用该计算机的名称查找该计算机。另外,实现共享的计算机之间应当使用同一网段的IP地址,否则,彼此之间将无法找到。
 SMB(Server Message Block)协议在NT/2000中用来作文件共享,在NT中,SMB运行于NBT(NetBIOS over TCP/IP)上,使用137,139(UDP),139(TCP)端口。在2000中,SMB可以直接运行在tcp/ip上,而没有额外的NBT层,使用TCP 445端口。 当2000使用网络共享的时候,就面临着选择139或者445端口了。
 下面的情况确定会话使用的端口:
 1、如果客户端启用了NBT,那么连接的时候将同时访问139和445端口,如果从445端口得到回应,那么客户端将发送RST到139端口,终止这个端口的连接,接着就从445端口进行SMB的会话了;如果没有从445端口而是从139得到回应,那么就从139端口进行会话;如果没有得到任何回应,那么SMB会话失败。 
2、如果客户端禁用了NBT,他就将只从445端口进行连接。当然如果服务器(开共享端)没有445端口进行SMB会话的话,那么就会访问失败了,所以禁用445端口后,对访问NT机器的共享会失败。 
3、如果服务器端启用NBT,那么就同时监听UDP 137、138端口和TCP139,445。如果禁用NBT,那么就只监听445端口了。
 

修改远程桌面端口

admin 发表了文章 • 0 个评论 • 141 次浏览 • 2018-04-30 08:28 • 来自相关话题

如果打开了防火墙,先在入站规则里加上你要修改成的端口,如56789
1、打开注册表 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\rdpwd\Tds\tcp],修改右边PortNamber的值,其默认值是3389,修改成所希望的端口即可,例如56789
2、再打开注册表 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentContro1Set\Control\Tenninal Server\WinStations\RDP-Tcp],修改右边PortNamber的值,其默认值是3389,修改成所希望的端口即可,例如56789
也可以搜索注册表 CTRL+F ,PortNamber,把3389改成56789
修改完后需要重启生效,注意防火墙的问题! 查看全部
如果打开了防火墙,先在入站规则里加上你要修改成的端口,如56789
1、打开注册表 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\rdpwd\Tds\tcp],修改右边PortNamber的值,其默认值是3389,修改成所希望的端口即可,例如56789
2、再打开注册表 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentContro1Set\Control\Tenninal Server\WinStations\RDP-Tcp],修改右边PortNamber的值,其默认值是3389,修改成所希望的端口即可,例如56789
也可以搜索注册表 CTRL+F ,PortNamber,把3389改成56789
修改完后需要重启生效,注意防火墙的问题!

Oracle 查看表空间的大小及使用情况sql语句

admin 发表了文章 • 0 个评论 • 106 次浏览 • 2018-04-29 11:46 • 来自相关话题

1、查看表空间的名称及大小 
SELECT t.tablespace_name, round(SUM(bytes / (1024 * 1024)), 0) ts_size 
FROM dba_tablespaces t, dba_data_files d 
WHERE t.tablespace_name = d.tablespace_name 
GROUP BY t.tablespace_name; 
--2、查看表空间物理文件的名称及大小 
SELECT tablespace_name, 
file_id, 
file_name, 
round(bytes / (1024 * 1024), 0) total_space 
FROM dba_data_files 
ORDER BY tablespace_name; 
--3、查看回滚段名称及大小 
SELECT segment_name, 
tablespace_name, 
r.status, 
(initial_extent / 1024) initialextent, 
(next_extent / 1024) nextextent, 
max_extents, 
v.curext curextent 
FROM dba_rollback_segs r, v$rollstat v 
WHERE r.segment_id = v.usn(+) 
ORDER BY segment_name; 
--4、查看控制文件 
SELECT NAME FROM v$controlfile; 
--5、查看日志文件 
SELECT MEMBER FROM v$logfile; 
--6、查看表空间的使用情况 
SELECT SUM(bytes) / (1024 * 1024) AS free_space, tablespace_name 
FROM dba_free_space 
GROUP BY tablespace_name; 
SELECT a.tablespace_name, 
a.bytes total, 
b.bytes used, 
c.bytes free, 
(b.bytes * 100) / a.bytes "% USED ", 
(c.bytes * 100) / a.bytes "% FREE " 
FROM sys.sm$ts_avail a, sys.sm$ts_used b, sys.sm$ts_free c 
WHERE a.tablespace_name = b.tablespace_name 
AND a.tablespace_name = c.tablespace_name; 
--7、查看数据库库对象 
SELECT owner, object_type, status, COUNT(*) count# 
FROM all_objects 
GROUP BY owner, object_type, status; 
--8、查看数据库的版本  
SELECT version 
FROM product_component_version 
WHERE substr(product, 1, 6) = 'Oracle'; 
--9、查看数据库的创建日期和归档方式 
SELECT created, log_mode, log_mode FROM v$database; 
--1G=1024MB 
--1M=1024KB 
--1K=1024Bytes 
--1M=11048576Bytes 
--1G=1024*11048576Bytes=11313741824Bytes 
SELECT a.tablespace_name "表空间名", 
total "表空间大小", 
free "表空间剩余大小", 
(total - free) "表空间使用大小", 
total / (1024 * 1024 * 1024) "表空间大小(G)", 
free / (1024 * 1024 * 1024) "表空间剩余大小(G)", 
(total - free) / (1024 * 1024 * 1024) "表空间使用大小(G)", 
round((total - free) / total, 4) * 100 "使用率 %" 
FROM (SELECT tablespace_name, SUM(bytes) free 
FROM dba_free_space 
GROUP BY tablespace_name) a, 
(SELECT tablespace_name, SUM(bytes) total 
FROM dba_data_files 
GROUP BY tablespace_name) b 
WHERE a.tablespace_name = b.tablespace_name 
  查看全部
1、查看表空间的名称及大小 
SELECT t.tablespace_name, round(SUM(bytes / (1024 * 1024)), 0) ts_size 
FROM dba_tablespaces t, dba_data_files d 
WHERE t.tablespace_name = d.tablespace_name 
GROUP BY t.tablespace_name; 
--2、查看表空间物理文件的名称及大小 
SELECT tablespace_name, 
file_id, 
file_name, 
round(bytes / (1024 * 1024), 0) total_space 
FROM dba_data_files 
ORDER BY tablespace_name; 
--3、查看回滚段名称及大小 
SELECT segment_name, 
tablespace_name, 
r.status, 
(initial_extent / 1024) initialextent, 
(next_extent / 1024) nextextent, 
max_extents, 
v.curext curextent 
FROM dba_rollback_segs r, v$rollstat v 
WHERE r.segment_id = v.usn(+) 
ORDER BY segment_name; 
--4、查看控制文件 
SELECT NAME FROM v$controlfile; 
--5、查看日志文件 
SELECT MEMBER FROM v$logfile; 
--6、查看表空间的使用情况 
SELECT SUM(bytes) / (1024 * 1024) AS free_space, tablespace_name 
FROM dba_free_space 
GROUP BY tablespace_name; 
SELECT a.tablespace_name, 
a.bytes total, 
b.bytes used, 
c.bytes free, 
(b.bytes * 100) / a.bytes "% USED ", 
(c.bytes * 100) / a.bytes "% FREE " 
FROM sys.sm$ts_avail a, sys.sm$ts_used b, sys.sm$ts_free c 
WHERE a.tablespace_name = b.tablespace_name 
AND a.tablespace_name = c.tablespace_name; 
--7、查看数据库库对象 
SELECT owner, object_type, status, COUNT(*) count# 
FROM all_objects 
GROUP BY owner, object_type, status; 
--8、查看数据库的版本  
SELECT version 
FROM product_component_version 
WHERE substr(product, 1, 6) = 'Oracle'; 
--9、查看数据库的创建日期和归档方式 
SELECT created, log_mode, log_mode FROM v$database; 
--1G=1024MB 
--1M=1024KB 
--1K=1024Bytes 
--1M=11048576Bytes 
--1G=1024*11048576Bytes=11313741824Bytes 
SELECT a.tablespace_name "表空间名", 
total "表空间大小", 
free "表空间剩余大小", 
(total - free) "表空间使用大小", 
total / (1024 * 1024 * 1024) "表空间大小(G)", 
free / (1024 * 1024 * 1024) "表空间剩余大小(G)", 
(total - free) / (1024 * 1024 * 1024) "表空间使用大小(G)", 
round((total - free) / total, 4) * 100 "使用率 %" 
FROM (SELECT tablespace_name, SUM(bytes) free 
FROM dba_free_space 
GROUP BY tablespace_name) a, 
(SELECT tablespace_name, SUM(bytes) total 
FROM dba_data_files 
GROUP BY tablespace_name) b 
WHERE a.tablespace_name = b.tablespace_name 
 

最近用到从oracle的dmp文件中还原数据

admin 发表了文章 • 0 个评论 • 129 次浏览 • 2018-04-29 11:13 • 来自相关话题

由于没有这方面的资料,在网上搜集了一些,相信有以下这些资料,我们可以成功地将dmp文件用命令行的方式还原回去


在这里我用的是oracle10g的版本,我的机器是512内存的,运行oracle的web管理程序有一些困难,所以我选择通过命令行的方式,
以下我的安装完成后,oracle给出的报告


Enterprise Manager Database Control URL - (orcl) :
http://localhost:1158/em


数据库配置文件已经安装到 
E:/oracle/product/10.2.0,


同时其他选定的安装组件也已经安装到 
E:/oracle/product/10.2.0/db_1。


iSQL*Plus URL 为:
http://localhost:5560/isqlplus


iSQL*Plus DBA URL 为:
http://localhost:5560/isqlplus/dba

下面我们来看一看如何来完成这一任务

第一,启动服务,(如果数据库处于启动状态,那么略过这一步)

打开命令行执行以下语句
net start OracleServiceORCL
net start  OracleOraDb10g_home2TNSListener
net start OracleOraDb10g_home2iSQL*Plus

 

 
  以上方式是在windows服务中启动服务,当windows服务不能启动数据库实例的时候,应用以下的语句
  set oracle_sid=orcl
  oradim -startup -sid orcl

  sqlplus internal/oracle
  startup 
 

 

第二清理以前还原过的痕迹,如果我们在数据库曾经还原过,我们先来清理一下,痕迹,
    //删除用户
    drop user xxxx cascade; 
    //删除表空间
    drop tablespace xxxx;
    //删除数据库文件
    e:/xxxxxx.dbf


第三,接下来,准备工作做好后,我们就可以开始还原了
//创建用户
CREATE USER 用户名 IDENTIFIED BY 密码 DEFAULT TABLESPACE  USERS TEMPORARY TABLESPACE TEMP
 
//给予用户权限
grant connect,resource,dba to xxxx
 

//创建表空间,并指定文件名,和大小
CREATE SMALLFILE TABLESPACE "xxxx" DATAFILE 'E:/ORADATA/ORCL/xxxx.DBF' 
 SIZE 100M 
 AUTOEXTEND ON NEXT 100M 
 MAXSIZE UNLIMITED 
 LOGGING EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO

 

//执行给予权限的脚本grant.txt,将权限给予刚才创建的用户
//给予权限
GRANT CREATE USER,DROP USER,ALTER USER ,CREATE ANY VIEW ,
   DROP ANY VIEW,EXP_FULL_DATABASE,IMP_FULL_DATABASE,
      DBA,CONNECT,RESOURCE,CREATE SESSION  TO xxxx


//开始导入(完全导入),file:dmp文件所在的位置, ignore:因为有的表已经存在,对该表就不进行导入。
   在后面加上 ignore=y 。指定log文件 log=e:/log.txt
imp user/pass@orcl full=y file=e:/xxx.dmp ignore=y log=e:/log.txt

//当我们不需要完整的还原数据库的时候,我们可以单独地还原某个特定的表
//---------------------------------------------------------------------------
imp user/pass@datbase file=e:/xxx.dmp ignore=y log=e:/log.txt tables=(xxxx)
imp user/pass@database file=e:/xxx.dmp ignore=y log=e:/log2.txt tables=(xxxx) 
//---------------------------------------------------------------------------

 

//做到这里我们就已经完成了,数据库的还原工作,下面我们就可以打开isqlplus查看表中的数据了
 
select * from ***
 

第四我们来看一下,对oracle常用的操作命令
1)查看表空间的属性
 select tablespace_name,extent_management,allocation_type from dba_tablespaces


2)查找一个表的列,及这一列的列名,数据类型
 select TABLE_NAME,COLUMN_NAME,DATA_TYPE   from user_tab_columns where TABLE_NAME='xxxx'

 
3)查找表空间中的用户表
 select * from all_tables where owner='xxx' order by table_name desc

4)在指定用户下,的表的数量
 select count(*) from user_tab_columns 
 

5)查看数据库中的表名,表列,所有列
 select TABLE_NAME,COLUMN_NAME,DATA_TYPE   from user_tab_columns order by table_name desc

6)查看用户ZBFC的所有的表名及表存放的表空间
 select table_name,tablespace_name from all_tables where owner='xxxx' order by table_name desc
7)生成删除表的文本
select 'Drop   table '||table_name||';' from all_tables where owner="ZBFC";

8)删除表级联删除
drop table table_name [cascade constraints];

9)查找表中的列
select TABLE_NAME,COLUMN_NAME,DATA_TYPE   from user_tab_columns where column_name like '%'||'地'||'%' order by table_name

desc 
 

10)查看数据库的临时空间
select tablespace_name,EXTENT_SIZE,current_users,total_extents,used_extents,MAX_SIZE,free_extents from v$sort_segment;

 http://download1.csdn.net/down ... 0.txt


作者在导入的过程中,还遇到了一个错误,就是数据违反了唯一性约束,数据库拒绝了数据
IMP-00019: 由于 ORACLE 的 1 错误而拒绝行
在网上看到有人说,这是字符集的原因,所以我就新建了一个数据库,将字符集改成了ZHS16GBK这样,从新导了一次,结果就成功了

 下面是grant.txt脚本 查看全部

由于没有这方面的资料,在网上搜集了一些,相信有以下这些资料,我们可以成功地将dmp文件用命令行的方式还原回去


在这里我用的是oracle10g的版本,我的机器是512内存的,运行oracle的web管理程序有一些困难,所以我选择通过命令行的方式,
以下我的安装完成后,oracle给出的报告


Enterprise Manager Database Control URL - (orcl) :
http://localhost:1158/em


数据库配置文件已经安装到 
E:/oracle/product/10.2.0,


同时其他选定的安装组件也已经安装到 
E:/oracle/product/10.2.0/db_1。


iSQL*Plus URL 为:
http://localhost:5560/isqlplus


iSQL*Plus DBA URL 为:
http://localhost:5560/isqlplus/dba

下面我们来看一看如何来完成这一任务

第一,启动服务,(如果数据库处于启动状态,那么略过这一步)

打开命令行执行以下语句
net start OracleServiceORCL
net start  OracleOraDb10g_home2TNSListener
net start OracleOraDb10g_home2iSQL*Plus

 

 
  以上方式是在windows服务中启动服务,当windows服务不能启动数据库实例的时候,应用以下的语句
  set oracle_sid=orcl
  oradim -startup -sid orcl

  sqlplus internal/oracle
  startup 
 

 

第二清理以前还原过的痕迹,如果我们在数据库曾经还原过,我们先来清理一下,痕迹,
    //删除用户
    drop user xxxx cascade; 
    //删除表空间
    drop tablespace xxxx;
    //删除数据库文件
    e:/xxxxxx.dbf


第三,接下来,准备工作做好后,我们就可以开始还原了
//创建用户
CREATE USER 用户名 IDENTIFIED BY 密码 DEFAULT TABLESPACE  USERS TEMPORARY TABLESPACE TEMP
 
//给予用户权限
grant connect,resource,dba to xxxx
 

//创建表空间,并指定文件名,和大小
CREATE SMALLFILE TABLESPACE "xxxx" DATAFILE 'E:/ORADATA/ORCL/xxxx.DBF' 
 SIZE 100M 
 AUTOEXTEND ON NEXT 100M 
 MAXSIZE UNLIMITED 
 LOGGING EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO

 

//执行给予权限的脚本grant.txt,将权限给予刚才创建的用户
//给予权限
GRANT CREATE USER,DROP USER,ALTER USER ,CREATE ANY VIEW ,
   DROP ANY VIEW,EXP_FULL_DATABASE,IMP_FULL_DATABASE,
      DBA,CONNECT,RESOURCE,CREATE SESSION  TO xxxx


//开始导入(完全导入),file:dmp文件所在的位置, ignore:因为有的表已经存在,对该表就不进行导入。
   在后面加上 ignore=y 。指定log文件 log=e:/log.txt
imp user/pass@orcl full=y file=e:/xxx.dmp ignore=y log=e:/log.txt

//当我们不需要完整的还原数据库的时候,我们可以单独地还原某个特定的表
//---------------------------------------------------------------------------
imp user/pass@datbase file=e:/xxx.dmp ignore=y log=e:/log.txt tables=(xxxx)
imp user/pass@database file=e:/xxx.dmp ignore=y log=e:/log2.txt tables=(xxxx) 
//---------------------------------------------------------------------------

 

//做到这里我们就已经完成了,数据库的还原工作,下面我们就可以打开isqlplus查看表中的数据了
 
select * from ***
 

第四我们来看一下,对oracle常用的操作命令
1)查看表空间的属性
 select tablespace_name,extent_management,allocation_type from dba_tablespaces


2)查找一个表的列,及这一列的列名,数据类型
 select TABLE_NAME,COLUMN_NAME,DATA_TYPE   from user_tab_columns where TABLE_NAME='xxxx'

 
3)查找表空间中的用户表
 select * from all_tables where owner='xxx' order by table_name desc

4)在指定用户下,的表的数量
 select count(*) from user_tab_columns 
 

5)查看数据库中的表名,表列,所有列
 select TABLE_NAME,COLUMN_NAME,DATA_TYPE   from user_tab_columns order by table_name desc

6)查看用户ZBFC的所有的表名及表存放的表空间
 select table_name,tablespace_name from all_tables where owner='xxxx' order by table_name desc
7)生成删除表的文本
select 'Drop   table '||table_name||';' from all_tables where owner="ZBFC";

8)删除表级联删除
drop table table_name [cascade constraints];

9)查找表中的列
select TABLE_NAME,COLUMN_NAME,DATA_TYPE   from user_tab_columns where column_name like '%'||'地'||'%' order by table_name

desc 
 

10)查看数据库的临时空间
select tablespace_name,EXTENT_SIZE,current_users,total_extents,used_extents,MAX_SIZE,free_extents from v$sort_segment;

 http://download1.csdn.net/down ... 0.txt


作者在导入的过程中,还遇到了一个错误,就是数据违反了唯一性约束,数据库拒绝了数据
IMP-00019: 由于 ORACLE 的 1 错误而拒绝行
在网上看到有人说,这是字符集的原因,所以我就新建了一个数据库,将字符集改成了ZHS16GBK这样,从新导了一次,结果就成功了

 下面是grant.txt脚本

oracle_RESTRICTED模式

admin 发表了文章 • 0 个评论 • 121 次浏览 • 2018-04-29 08:57 • 来自相关话题

开启限制会话模式:

alter system enable restricted session;
取消限制会话模式:
alter system disable restricted session;   

RESTRICTED模式以后  除了管理员都不能登录,如果需要非管理员登录,必须
GRANT restricted session to test;




那么以限制会话模式登入有两种方法:

一:正常登入数据库后执行alter system enable restricted session;




二:sqlplus  /nolog

       conn /as sysdba

      shutdown  immediate;

       startup  restrict




个人喜欢用第二种方法,第一种有的时候居然 alter system disable restricted session; 后无效。 查看全部
开启限制会话模式:

alter system enable restricted session;
取消限制会话模式:
alter system disable restricted session;   

RESTRICTED模式以后  除了管理员都不能登录,如果需要非管理员登录,必须
GRANT restricted session to test;




那么以限制会话模式登入有两种方法:

一:正常登入数据库后执行alter system enable restricted session;




二:sqlplus  /nolog

       conn /as sysdba

      shutdown  immediate;

       startup  restrict




个人喜欢用第二种方法,第一种有的时候居然 alter system disable restricted session; 后无效。

ORACLE 修改字符集 ZHS16GBK;

admin 发表了文章 • 0 个评论 • 96 次浏览 • 2018-04-29 08:56 • 来自相关话题

Windows PowerShell
版权所有 (C) 2009 Microsoft Corporation。保留所有权利

PS C:\Users\Administrator>  sqlplus /nolog

SQL*Plus: Release 11.2.0.1.0 Production on 星期日 4月

Copyright (c) 1982, 2010, Oracle.  All rights reserv

SQL> conn /as sysdba
已连接。
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL>  startup mount
ORACLE 例程已经启动。

Total System Global Area 5.4784E+10 bytes
Fixed Size                  2188768 bytes
Variable Size            2.6038E+10 bytes
Database Buffers         2.8723E+10 bytes
Redo Buffers               20566016 bytes
数据库装载完毕。
SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION;

系统已更改。

SQL>  ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;

系统已更改。

SQL> ALTER SYSTEM SET AQ_TM_PROCESSES=0;

系统已更改。

SQL>  alter database open;

数据库已更改。

SQL> ALTER DATABASE CHARACTER SET ZHS16GBK;
ALTER DATABASE CHARACTER SET ZHS16GBK
*
第 1 行出现错误:
ORA-12712: 新字符集必须为旧字符集的超集


SQL>  ALTER DATABASE character set INTERNAL_USE ZHS1
---跳过超级检查
数据库已更改。

SQL>  select * from v$nls_parameters;

PARAMETER
----------------------------------------------------
VALUE
----------------------------------------------------
NLS_LANGUAGE
SIMPLIFIED CHINESE

NLS_TERRITORY
CHINA

NLS_CURRENCY



PARAMETER
----------------------------------------------------
VALUE
----------------------------------------------------
NLS_ISO_CURRENCY
CHINA

NLS_NUMERIC_CHARACTERS
.,

NLS_CALENDAR
GREGORIAN


PARAMETER
----------------------------------------------------
VALUE
----------------------------------------------------
NLS_DATE_FORMAT
DD-MON-RR

NLS_DATE_LANGUAGE
SIMPLIFIED CHINESE

NLS_CHARACTERSET
ZHS16GBK


PARAMETER
----------------------------------------------------
VALUE
----------------------------------------------------
NLS_SORT
BINARY

NLS_TIME_FORMAT
HH.MI.SSXFF AM

NLS_TIMESTAMP_FORMAT
DD-MON-RR HH.MI.SSXFF AM


PARAMETER
----------------------------------------------------
VALUE
----------------------------------------------------
NLS_TIME_TZ_FORMAT
HH.MI.SSXFF AM TZR

NLS_TIMESTAMP_TZ_FORMAT
DD-MON-RR HH.MI.SSXFF AM TZR

NLS_DUAL_CURRENCY



PARAMETER
----------------------------------------------------
VALUE
----------------------------------------------------
NLS_NCHAR_CHARACTERSET
AL16UTF16

NLS_COMP
BINARY

NLS_LENGTH_SEMANTICS
BYTE


PARAMETER
----------------------------------------------------
VALUE
----------------------------------------------------
NLS_NCHAR_CONV_EXCP
FALSE


已选择19行。

SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL>  startup
ORACLE 例程已经启动。

Total System Global Area 5.4784E+10 bytes
Fixed Size                  2188768 bytes
Variable Size            2.6038E+10 bytes
Database Buffers         2.8723E+10 bytes
Redo Buffers               20566016 bytes
数据库装载完毕。
数据库已经打开。
SQL> select * from v$nls_parameters;

PARAMETER
----------------------------------------------------
VALUE
----------------------------------------------------
NLS_LANGUAGE
SIMPLIFIED CHINESE

NLS_TERRITORY
CHINA

NLS_CURRENCY



PARAMETER
----------------------------------------------------
VALUE
----------------------------------------------------
NLS_ISO_CURRENCY
CHINA

NLS_NUMERIC_CHARACTERS
.,

NLS_CALENDAR
GREGORIAN


PARAMETER
----------------------------------------------------
VALUE
----------------------------------------------------
NLS_DATE_FORMAT
DD-MON-RR

NLS_DATE_LANGUAGE
SIMPLIFIED CHINESE

NLS_CHARACTERSET
ZHS16GBK


PARAMETER
----------------------------------------------------
VALUE
----------------------------------------------------
NLS_SORT
BINARY

NLS_TIME_FORMAT
HH.MI.SSXFF AM

NLS_TIMESTAMP_FORMAT
DD-MON-RR HH.MI.SSXFF AM


PARAMETER
----------------------------------------------------
VALUE
----------------------------------------------------
NLS_TIME_TZ_FORMAT
HH.MI.SSXFF AM TZR

NLS_TIMESTAMP_TZ_FORMAT
DD-MON-RR HH.MI.SSXFF AM TZR

NLS_DUAL_CURRENCY



PARAMETER
----------------------------------------------------
VALUE
----------------------------------------------------
NLS_NCHAR_CHARACTERSET
AL16UTF16

NLS_COMP
BINARY

NLS_LENGTH_SEMANTICS
BYTE


PARAMETER
----------------------------------------------------
VALUE
----------------------------------------------------
NLS_NCHAR_CONV_EXCP
FALSE


已选择19行。

SQL> alter system disable restricted session;
开启限制会话模式:
-----------------------------------------------------------------------------------
alter system enable restricted session;
取消限制会话模式:
alter system disable restricted session;   
  查看全部
Windows PowerShell
版权所有 (C) 2009 Microsoft Corporation。保留所有权利

PS C:\Users\Administrator>  sqlplus /nolog

SQL*Plus: Release 11.2.0.1.0 Production on 星期日 4月

Copyright (c) 1982, 2010, Oracle.  All rights reserv

SQL> conn /as sysdba
已连接。
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL>  startup mount
ORACLE 例程已经启动。

Total System Global Area 5.4784E+10 bytes
Fixed Size                  2188768 bytes
Variable Size            2.6038E+10 bytes
Database Buffers         2.8723E+10 bytes
Redo Buffers               20566016 bytes
数据库装载完毕。
SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION;

系统已更改。

SQL>  ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;

系统已更改。

SQL> ALTER SYSTEM SET AQ_TM_PROCESSES=0;

系统已更改。

SQL>  alter database open;

数据库已更改。

SQL> ALTER DATABASE CHARACTER SET ZHS16GBK;
ALTER DATABASE CHARACTER SET ZHS16GBK
*
第 1 行出现错误:
ORA-12712: 新字符集必须为旧字符集的超集


SQL>  ALTER DATABASE character set INTERNAL_USE ZHS1
---跳过超级检查
数据库已更改。

SQL>  select * from v$nls_parameters;

PARAMETER
----------------------------------------------------
VALUE
----------------------------------------------------
NLS_LANGUAGE
SIMPLIFIED CHINESE

NLS_TERRITORY
CHINA

NLS_CURRENCY



PARAMETER
----------------------------------------------------
VALUE
----------------------------------------------------
NLS_ISO_CURRENCY
CHINA

NLS_NUMERIC_CHARACTERS
.,

NLS_CALENDAR
GREGORIAN


PARAMETER
----------------------------------------------------
VALUE
----------------------------------------------------
NLS_DATE_FORMAT
DD-MON-RR

NLS_DATE_LANGUAGE
SIMPLIFIED CHINESE

NLS_CHARACTERSET
ZHS16GBK


PARAMETER
----------------------------------------------------
VALUE
----------------------------------------------------
NLS_SORT
BINARY

NLS_TIME_FORMAT
HH.MI.SSXFF AM

NLS_TIMESTAMP_FORMAT
DD-MON-RR HH.MI.SSXFF AM


PARAMETER
----------------------------------------------------
VALUE
----------------------------------------------------
NLS_TIME_TZ_FORMAT
HH.MI.SSXFF AM TZR

NLS_TIMESTAMP_TZ_FORMAT
DD-MON-RR HH.MI.SSXFF AM TZR

NLS_DUAL_CURRENCY



PARAMETER
----------------------------------------------------
VALUE
----------------------------------------------------
NLS_NCHAR_CHARACTERSET
AL16UTF16

NLS_COMP
BINARY

NLS_LENGTH_SEMANTICS
BYTE


PARAMETER
----------------------------------------------------
VALUE
----------------------------------------------------
NLS_NCHAR_CONV_EXCP
FALSE


已选择19行。

SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL>  startup
ORACLE 例程已经启动。

Total System Global Area 5.4784E+10 bytes
Fixed Size                  2188768 bytes
Variable Size            2.6038E+10 bytes
Database Buffers         2.8723E+10 bytes
Redo Buffers               20566016 bytes
数据库装载完毕。
数据库已经打开。
SQL> select * from v$nls_parameters;

PARAMETER
----------------------------------------------------
VALUE
----------------------------------------------------
NLS_LANGUAGE
SIMPLIFIED CHINESE

NLS_TERRITORY
CHINA

NLS_CURRENCY



PARAMETER
----------------------------------------------------
VALUE
----------------------------------------------------
NLS_ISO_CURRENCY
CHINA

NLS_NUMERIC_CHARACTERS
.,

NLS_CALENDAR
GREGORIAN


PARAMETER
----------------------------------------------------
VALUE
----------------------------------------------------
NLS_DATE_FORMAT
DD-MON-RR

NLS_DATE_LANGUAGE
SIMPLIFIED CHINESE

NLS_CHARACTERSET
ZHS16GBK


PARAMETER
----------------------------------------------------
VALUE
----------------------------------------------------
NLS_SORT
BINARY

NLS_TIME_FORMAT
HH.MI.SSXFF AM

NLS_TIMESTAMP_FORMAT
DD-MON-RR HH.MI.SSXFF AM


PARAMETER
----------------------------------------------------
VALUE
----------------------------------------------------
NLS_TIME_TZ_FORMAT
HH.MI.SSXFF AM TZR

NLS_TIMESTAMP_TZ_FORMAT
DD-MON-RR HH.MI.SSXFF AM TZR

NLS_DUAL_CURRENCY



PARAMETER
----------------------------------------------------
VALUE
----------------------------------------------------
NLS_NCHAR_CHARACTERSET
AL16UTF16

NLS_COMP
BINARY

NLS_LENGTH_SEMANTICS
BYTE


PARAMETER
----------------------------------------------------
VALUE
----------------------------------------------------
NLS_NCHAR_CONV_EXCP
FALSE


已选择19行。

SQL> alter system disable restricted session;
开启限制会话模式:
-----------------------------------------------------------------------------------
alter system enable restricted session;
取消限制会话模式:
alter system disable restricted session;