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,