oracle 的一些东西

1 如何查询oracle数据库中的所有用户名

   select username from dba_users; --该语句查出所有的用户,当然其中包括了国过期的,系统的,用户的等等。

   desc dba_users;//可以查看结构

   select * from dba_users where account_status='OPEN' and default_tablespace='USERS';//查询出用户自己建立的账户

 

2  oracle的lpad [ 2010年12月27日13:33:48]

 

    SELECT LPAD(TO_CHAR(TO_NUMBER(NVL(SUBSTR(MAX(PRODUCTCODE),5,4),'0'))+1),4,'0') PCODE FROMtable_name

    WHERE SUBSTR(PRODUCTCODE,1,4) = #productcode#

 

    项目中看到的,不明白的顺便查了下internet

    在Oracle/PLSQL中,lpad函数将左边的字符串填充一些特定的字符,其语法格式如下:   

     lpad( string1, padded_length, [ pad_string ] )
     其中string1是需要粘贴字符的字符串
     padded_length是返回的字符串的数量,如果这个数量比原字符串的长度要短,lpad函数将会把字符串截取成padded_length;

     pad_string是个可选参数,这个字符串是要粘贴到string1的左边,如果这个参数未写,lpad函数将会在string1的左边粘贴空格。
    例如:
          

lpad('tech', 7);将返回'    tech'

lpad('tech', 2);将返回'te'
lpad('tech', 8, '0');将返回'0000tech'
lpad('tech on the net', 15, 'z');将返回 'tech on the net'
lpad('tech on the net', 16, 'z');将返回 'ztech on the net'

 

lpad 就是说如果对于原始的字串如果指定的要返回的长度比他还长,则用默认的空格或指定的字符进行返回;如果目标长度

比原始的字串还短,则oracle直接去截取字符串了。

 

 

 

 

3  cast  multiset 

感谢 http://hi.baidu.com/edeed/blog/item/dc7c0cd7144ea1d9a144dfd2.html

 

The MULTISET pseudo-function
        MULTISET 必须和 CASTs 一起使用,MULTISET 将数据集转换为 collection,SQL MULTISET function 和操作 nested tables 的 PL/SQL MULTISET 是完全不同的
          SELECT CAST (MULTISET (SELECT field FROM table) AS collection-type)
          FROM DUAL;
        As with the CAST pseudo-function, MULTISET cannot serve as the target of an INSERT, UPDATE, or DELETE statement.

 

例子:

 

SELECT FUN_COL_TO_ROW(CAST(MULTISET (SELECT T.列名

                             FROM 表名  T

                            WHERE T.STRATEGYCODE = #strategycode#

                            ORDER BY T.SN) AS STR_TAB)) EXPS

 FROM DUAL

 

 

其中FUN_COL_TO_ROW 是个functions:

 

CREATE OR REPLACE FUNCTION FUN_COL_TO_ROW(PV IN STR_TAB) RETURN VARCHAR2 IS

  LS VARCHAR2(4000);

BEGIN

  FOR I IN 1 .. PV.COUNT LOOP

    LS := LS || PV(I);

  END LOOP;

  RETURN LS;

END;

 

 

==============================

再进下imp 或者exp进行数据导入导出的时候,可以使用%通配符进行处理tables=(emp%)

 


2011年12月7日22:25:53

a  oracle 启动和关闭的bat脚本。windowxp

@EHCO
ECHO Starting OracleService, please wait ...
net start OracleDBConsoleorcl
net start OracleOraDb10g_home2TNSListener
net start OracleOraDb10g_home2iSQL*Plus
net start OracleServiceORCL


@EHCO
ECHO Stopping OracleService, please wait ...


net stop OracleServiceORCL
net stop OracleOraDb10g_home2TNSListener
net stop OracleOraDb10g_home2iSQL*Plus
net stop OracleDBConsoleorcl


2012年1月9日9:50:26

----查询用户表 索引 分区表占用空间啊
SELECT SEGMENT_NAME, SUM(BYTES) / 1024 / 1024 MBYTESE
  FROM USER_SEGMENTS
 GROUP BY SEGMENT_NAME
 ORDER BY 2 DESC;
 


--1、表占用空间:
SELECT SEGMENT_NAME, SUM(BYTES) / 1024 / 1024 MBYTESE
  FROM USER_SEGMENTS
 WHERE SEGMENT_TYPE = 'TABLE'
 GROUP BY SEGMENT_NAME
  ORDER BY 2 DESC;


--2、索引占用空间:
SELECT SEGMENT_NAME, SUM(BYTES) / 1024 / 1024
  FROM USER_SEGMENTS
 WHERE SEGMENT_TYPE = 'INDEX'
 GROUP BY SEGMENT_NAME
  ORDER BY 2 DESC;


--3、分区表TABLE PARTITION占用空间:
SELECT SEGMENT_NAME, SUM(BYTES) / 1024 / 1024 MBYTES
  FROM USER_SEGMENTS
 WHERE SEGMENT_TYPE = 'TABLE PARTITION'
 GROUP BY SEGMENT_NAME
  ORDER BY 2 DESC;


=================================

2012年1月11日21:59:23

1  将表中的clob字段修改成varchar2型,起因是在运行指针的时候,发现在插入clob类型的时候

   发现错误。故改成varchar2类型,但是在pl/sql中直接进行修改或是使用命令的形式都是不行的。 alter table  table_name modify   colomuName  varchar2(2000)

  查后这么解决的:

create table  TT_his as select * from TT;   //可以建立一个历史表  

truncate  table TT;  //清空TT表

将clob的字段进行修改,修改成varchar2类型的

insert  into TT as select * from TT_his ;//重新倒回,查看后原来的clob字段值是存在的 

drop table  TT_his;


=========================================

2012年1月11日22:09:30

Have a simple test, you can understand it clearly:

SQL> connect scott/tiger
Connected.
SQL> CREATE INDEX upper_dept_name_idx
  2  ON dept(UPPER(dname));

Index created.

SQL> set autotrace on
SQL> SELECT *
  2  FROM dept
  3  WHERE UPPER(dname) = 'SALES';

    DEPTNO DNAME          LOC
---------- -------------- -------------
        30 SALES          CHICAGO


Execution Plan
----------------------------------------------------------
   0      SELECT STATEMENT Optimizer=CHOOSE
   1    0   TABLE ACCESS (FULL) OF 'DEPT'

SQL> analyze table dept compute statistics;

Table analyzed.

SQL> SELECT *
  2  FROM dept
  3  WHERE UPPER(dname) = 'SALES'; 

    DEPTNO DNAME          LOC
---------- -------------- -------------
        30 SALES          CHICAGO


Execution Plan
----------------------------------------------------------
   0      SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=1 Bytes=18)
   1    0   TABLE ACCESS (BY INDEX ROWID) OF 'DEPT' (Cost=2 Card=1 Bytes=18)
   2    1     INDEX (RANGE SCAN) OF 'UPPER_DEPT_NAME_IDX' (NON-UNIQUE) (Cost=1 Card=1)


===========================================================================================================

2012年2月9日10:19:44

number默认情况下,精度为38位,取值范围1~38之间
它实际上是磁盘上的一个变长类型,会占用0~22 字节的存储空间。
只知道默认小数点位是0,



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值