??xml version="1.0" encoding="utf-8" standalone="yes"?> 在windows中创Z个名?#8220;NLS_LANG”的系l环境变量,讄其gؓ“SIMPLIFIED CHINESE_CHINA.ZHS16GBK”Q然后重新启?pl/sql developerQ这h索出来的中文内容׃会是q了。如果想转换为UTF8字符集,可以赋予“NLS_LANG”?“AMERICAN_AMERICA.UTF8”Q然后重新启?pl/sql developer。其它字W集讄同上?/span> 如何讄客户端字W集与服务器端字W集一? q行REGEDIT,W一步选HKEY_LOCAL_MACHINE,W二步选择SOFTWAREQ第三步选择 OracleQ第四步选择 NLS_LANGQ键入与服务器端相同的字W集?/font> 例如:AMERICAN_AMERICA.UTF8或者SIMPLIFIED CHINESE_CHINA.ZHS16GBK oracle 10g装上?Z个表写入中文数据,发现通过工具PL/SQL Developer中文不能正常昄. 要正常显CZ?必d服务器和客户端编码一致才行。于是检查: 1.查服务器~码: 执行SQL语法: select * from v$nls_parameters; 也可以参?home/oracle/.bash_profile 相关语言讄. LANG=zh_CN.GBK 2.讄本地客户端编? q入我的电脑,属?高,环境变量,d2? LANG=zh_CN.GBK 如图: 3.重新q接sqlplus,查看数据: 昄正常. 4.PL/SQL Developer讄q新连? 在pl/sql developer的菜?>tools->preferences->user interface->fonts 中修改ؓ中文字体 重新q接,如图: 昄正常.OK!
NLS_LANG格式Q?br />NLS_LANG = language_territory.charset
有三个组成部分(语言、地域和字符集)Q每个成分控制了NLS子集的特性。其中:language 指定服务器消息的语言。territory 指定服务器的日期和数字格式。charset 指定字符集?br />developer
可以看到我的相关讄?
NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK"
NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK" developer
developer
FromQ?a >http://apps.hi.baidu.com/share/detail/19972908
]]>
公司上线一套RAC pȝ?Aston对Sequence ?Cache 参数表示xQ徏议ƈ发大的系l对Cache讄大一炏V?q样可以提高性能?和Aston 讨论了一下?又从|上查了一下?
RACLE SEQUENCE 介绍
http://blog.csdn.net/tianlesoftware/archive/2009/10/30/4745039.aspx
之前整理的一文章?刚才看了一下,也是从网上{的?那是q是写blog初期的作品?2009q?0月䆾的?转眼一q_写Blog 也比以前成熟了很多?br />
一. 理论知识先看一个创建Sequence的语句:
SQL> create sequence seq_tmp
2 increment by 1
3 start with 1
4 nomaxvalue
5 nocycle
6 ;
序列已创建?br />
相关参数说明Q?br /> INCREMENT BY 1 -- 每次加几?
START WITH 1 -- ?开始计?
NOMAXvalue -- 不设|最大?
NOCYCLE -- 一直篏加,不@?
CACHE 10; --讄~存cache个序?/p>
CURRVAL=q回 sequence的当前?
NEXTVAL=增加sequence的|然后q回 sequence ?/p>
更多信息Q参考Oracle 联机文Q?br /> CREATE SEQUENCE
http://download.oracle.com/docs/cd/E11882_01/server.112/e17118/statements_6015.htm#SQLRF01314
q里对Cache 参数做一个说明:
如果指定CACHE|ORACLE可以预先在内存里面攄一些sequenceQ这样存取的快些。cache里面的取完后Qoracle自动再取一l到cache?使用cache或许会蟩P 比如我们在创建序列时指定Cache ?00. 在某一个时刻,序列使用C80. 而在q个时刻Q数据库H然不正常down掉(shutdown abort),cache中的sequence׃丢失. 在下ơ启动分配cacheӞ数据库会?01 开始,在分?00个缓存。即101--200. 而之前分?00个中?0-100q?0个因为意外宕丢失?q种情况下就会出现蟩L现象。我们可以在create sequence的时候用nocache防止q种情况?但是nocache 的性能较差?如果指定cache而没有设定cache|默认cache?0个?q个默认值对于大多数情况下都是够用的?除非那种每秒上万ơ的select?所以具体情况要具体对待?对于哪些大ƈ发的pȝQ最好设|在100以上。像Ud的BOSSpȝQ以1000为单位?
CACHE Specify how many values of the sequence the database preallocates and keeps in memory for faster access. This integer value can have 28 or fewer digits. The minimum value for this parameter is 2. For sequences that cycle, this value must be less than the number of values in the cycle. You cannot cache more values than will fit in a given cycle of sequence numbers. Therefore, the maximum value allowed for CACHE must be less than the value determined by the following formula:
(CEIL (MAXVALUE - MINVALUE)) / ABS (INCREMENT)
If a system failure occurs, then all cached sequence values that have not been used in committed DML statements are lost. The potential number of lost values is equal to the value of the CACHE parameter.
Note:
Oracle recommends using the CACHE setting to enhance performance if you are using sequences in an Oracle Real Application Clusters environment.
NOCACHE Specify NOCACHE to indicate that values of the sequence are not preallocated. If you omit both CACHE and NOCACHE, then the database caches 20 sequence numbers by default.
关于Order 参数的说明:
序参敎ͼoracle默认是NOORDERQ如果设|ؓORDERQ在单实例环境没有媄响,在RAC环境此时Q多实例实际~存相同的序列,此时在多个实例ƈ发取该序列的时候,会有短暂的资源竞争来在多实例之间q行同步。因ơ性能相比noorder要差Q所以RAC环境非必ȝ情况下不要用ORDERQ尤其要避免NOCACHE ORDERl合?/p>
ORDER Specify ORDER to guarantee that sequence numbers are generated in order of request. This clause is useful if you are using the sequence numbers as timestamps. Guaranteeing order is usually not important for sequences used to generate primary keys.
ORDER is necessary only to guarantee ordered generation if you are using Oracle Real Application Clusters. If you are using exclusive mode, then sequence numbers are always generated in order.
NOORDER Specify NOORDER if you do not want to guarantee sequence numbers are generated in order of request. This is the default.
查看user_sequences 表的l构Q?br /> SQL> desc user_sequences;
名称 是否为空? cd
----------------------------------------- -------- ---------------
SEQUENCE_NAME NOT NULL VARCHAR2(30)
MIN_VALUE NUMBER
MAX_VALUE NUMBER
INCREMENT_BY NOT NULL NUMBER
CYCLE_FLAG VARCHAR2(1)
ORDER_FLAG VARCHAR2(1)
CACHE_SIZE NOT NULL NUMBER
LAST_NUMBER NOT NULL NUMBER
查看刚才创徏的序列seq_tmp 的|
SQL> select * from user_sequences where sequence_name='SEQ_TMP';
SEQUENCE_N MIN_VALUE MAX_VALUE INCREMENT_BY C O CACHE_SIZE LAST_NUMBER
---------- ---------- ---------- ------------ - - ---------- -----------
SEQ_TMP 1 1.0000E+28 1 N N 20 21
q里有个CACHE_SIZE的倹{?我们在创建sequence的时候,启用了cacheQ但是没有给它倹{?所以这里的cache_size 是pȝ的模式倹{??0个?
取下一个sequence的|
SQL> select seq_tmp.nextval from dual;
NEXTVAL
----------
1
SQL> select seq_tmp.nextval from dual;
NEXTVAL
----------
2
查看当前sequence的|
SQL> select seq_tmp.currval from dual;
CURRVAL
----------
? 实验一个网友RAC pȝ上的试时结果:
nocacheQ?nbsp; 2100s
cache Q?000Q 55s
差别很明显?/p>
试一Q?br /> SQL> create sequence seq_1 nocache;
序列已创建?/p>
SQL> set timing on;
SQL> declare
2 x number;
3 begin
4 for i in 1 .. 10000 loop
5 select seq_1.nextval into x from dual;
6 end loop;
7 end;
8 /
PL/SQL q程已成功完成?/p>
已用旉: 00: 00: 02.26
试二:
SQL> create sequence seq_2 cache 20;
序列已创建?/p>
已用旉: 00: 00: 00.01
SQL> declare
2 x number;
3 begin
4 for i in 1 .. 10000 loop
5 select seq_2.nextval into x from dual;
6 end loop;
7 end;
8 /
PL/SQL q程已成功完成?/p>
已用旉: 00: 00: 00.46
试三:
SQL> create sequence seq_3 cache 100;
序列已创建?/p>
已用旉: 00: 00: 00.05
SQL> declare
2 x number;
3 begin
4 for i in 1 .. 10000 loop
5 select seq_3.nextval into x from dual;
6 end loop;
7 end;
8 /
PL/SQL q程已成功完成?/p>
已用旉: 00: 00: 00.37
试四:
SQL> create sequence seq_4 cache 1000;
序列已创建?/p>
已用旉: 00: 00: 00.04
SQL> declare
2 x number;
3 begin
4 for i in 1 .. 40000 loop
5 select seq_4.nextval into x from dual;
6 end loop;
7 end;
8 /
PL/SQL q程已成功完成?/p>
已用旉: 00: 00: 01.31
SQL> declare
2 x number;
3 begin
4 for i in 1 .. 40000 loop
5 select seq_1.nextval into x from dual;
6 end loop;
7 end;
8 /
PL/SQL q程已成功完成?/p>
已用旉: 00: 00: 09.33
SQL>
结Q?
在自q本本上测试的QOracle 11gR2. 单Instance数据库单会话循环不间断取1-4万个倹{?/p>
nocacheQ?nbsp; 2.26s 10000
cache:20 0.46s 10000
cache:100 0.37s 10000
cache:1000 1.31s 40000
nocacheQ?nbsp; 9.33s 40000
基本上cache 大于20的时候性能基本可以接受Qnocache的时候性能实很差Q?/p>
本文来自CSDN博客Q{载请标明出处Qhttp://blog.csdn.net/tianlesoftware/archive/2010/11/08/5995051.aspx
--如何在oracle中导入dmp数据库文Ӟ
2006/2/16 zhanghua first create
Oracle数据导入导出imp/expq当于oracle数据q原与备份。exp命o可以把数据从q程数据库服务器导出到本地的dmp文gQimp命o可以把dmp文g从本地导入到q处的数据库服务器中?nbsp;利用q个功能可以构徏两个相同的数据库Q一个用来测试,一个用来正式用?br />
执行环境Q可以在SQLPLUS.EXE或者DOSQ命令行Q中执行Q?br />
DOS中可以执行时׃ 在oracle 8i ?nbsp; 安装目录\ora81\BIN被设|ؓ全局路径Q?br />
该目录下有EXP.EXE与IMP.EXE文g被用来执行导入导出?br />
oracle用java~写QSQLPLUS.EXE、EXP.EXE、IMP.EXEq两个文件有可能是被包装后的cL件?br />
SQLPLUS.EXE调用EXP.EXE、IMP.EXE所包裹的类Q完成导入导出功能?br />
下面介绍的是导入导出的实例?br />
数据导出Q?br />
1 数据库TEST完全导出,用户名system 密码manager 导出到D:\daochu.dmp?br />
exp system/manager@TEST file=d:\daochu.dmp full=y
2 数据库中system用户与sys用户的表导出
exp system/manager@TEST file=d:\daochu.dmp owner=(system,sys)
3 数据库中的表inner_notify、notify_staff_relat导出
exp aichannel/aichannel@TESTDB2 file= d:\data\newsmgnt.dmp tables=(inner_notify,notify_staff_relat)
4 数据库中的表table1中的字段filed1?00"打头的数据导?br />
exp system/manager@TEST file=d:\daochu.dmp tables=(table1) query=\" where filed1 like '00%'\"
上面是常用的导出Q对于压~,既用winzip把dmp文g可以很好的压~?br />
也可以在上面命o后面 加上 compress=y 来实现?/p>
数据的导?br />
1 D:\daochu.dmp 中的数据导入 TEST数据库中?br />
imp system/manager@TEST file=d:\daochu.dmp
imp aichannel/aichannel@HUST full=y file=file= d:\data\newsmgnt.dmp ignore=y
上面可能有点问题Q因为有的表已经存在Q然后它报错,对该表就不进行导入?br />
在后面加?ignore=y 可以了?br />
2 d:\daochu.dmp中的表table1 导入
imp system/manager@TEST file=d:\daochu.dmp tables=(table1)
基本上上面的导入导出够用了。不情况要先是表d删除Q然后导入?br />
注意Q?br />
操作者要有够的权限Q权限不够它会提C?br />
数据库时可以q上的。可以用tnsping TEST 来获得数据库TEST能否q上?/p>
附录一Q?br />
l用户增加导入数据权限的操作
W一,启动sql*puls
W二Q以system/manager登陆
W三Qcreate user 用户?IDENTIFIED BY 密码 Q如果已l创用户Q这步可以省略)
W四QGRANT CREATE USER,DROP USER,ALTER USER ,CREATE ANY VIEW ,
DROP ANY VIEW,EXP_FULL_DATABASE,IMP_FULL_DATABASE,
DBA,CONNECT,RESOURCE,CREATE SESSION TO 用户名字
W五, q行-cmd-q入dmp文g所在的目录,
imp userid=system/manager full=y file=*.dmp
或?imp userid=system/manager full=y file=filename.dmp
执行CZ:
F:\Work\Oracle_Data\backup>imp userid=test/test full=y file=inner_notify.dmp
屏幕昄
Import: Release 8.1.7.0.0 - Production on 星期?2?16 16:50:05 2006
(c) Copyright 2000 Oracle Corporation. All rights reserved.
q接? Oracle8i Enterprise Edition Release 8.1.7.0.0 - Production
With the Partitioning option
JServer Release 8.1.7.0.0 - Production
l由常规路径导出由EXPORT:V08.01.07创徏的文?br />
已经完成ZHS16GBK字符集和ZHS16GBK NCHAR 字符集中的导?br />
导出服务器用UTF8 NCHAR 字符?(可能的ncharset转换)
. 正在AICHANNEL的对象导入到 AICHANNEL
. . 正在导入?nbsp; "INNER_NOTIFY" 4行被导入
准备启用U束条g...
成功l止导入Q但出现警告?/p>
附录二:
Oracle 不允许直接改变表的拥有? 利用Export/Import可以辑ֈq一目的.
先徏立import9.par,
然后Q用时命o如下Qimp parfile=/filepath/import9.par
?import9.par 内容如下Q?br />
FROMUSER=TGPMS
TOUSER=TGPMS2 Q注Q把表的拥有者由FROMUSER改ؓTOUSERQFROMUSER和TOUSER的用户可以不同)
ROWS=Y
INDEXES=Y
GRANTS=Y
CONSTRAINTS=Y
BUFFER=409600
file==/backup/ctgpc_20030623.dmp
log==/backup/import_20030623.log
http://dev.csdn.net/htmls/82/82431.html
原因Q?/p>
表空间DATA01I间不Q导致数据无法插入?/p>
SolutionQ?/p>
重新定义表空间大:
ALTER TABLESPACE DATA01 RESIZE 5G ;
表I间删除后重新定义表I间Q?
DROP TABLESPACE DATA01 INCLUDING CONTENTS AND DATAFILES ;
CREATE TABLESPACE “DATA01”
LOGGING DATAFILE ’D:\ORACLE\PRODUCT\10.2.0\SSVC\DATA01.DBF’
SIZE 5000M REUSE
DEFAULT STORAGE (INITIAL 10K NEXT 128K MINEXTENTS 1 MAXEXTENTS UMLIMITED PCTINCREASE 100) ;
本文来自CSDN博客Q{载请标明出处Qhttp://blog.csdn.net/yexianyi/archive/2009/08/23/4476216.aspx
Oracle 使用两种光标Q显式光标和隐式光标。不语句返回多条U录Q?PL/SQL Z用的每一?UPDATE ?DELETE ?INSERT {?SQL 命o隐式的声明一个光标。(要管?SQL 语句的处理,必须隐式的给它定义一个光标。)用户声明q用显C光标处?SELECT 语句q回的多条记录。显C的定义光标一U结构,它用户能够为特定的语句指定内存区域Q以便以后用?
二?光标的作?/strong>
?PL/SQL 光标查询q回多行数据Ӟq些记录l被UCؓzd集?Oracle 这U活动集存储在您创徏的显C定义的已命名的光标中?strong style="color: black; background-color: #ffff66">Oracle 光标是一U用于轻杄处理多行数据的机Ӟ没有光标Q?Oracle 开发h员必d独地、显式地取回q管理光标查询选择的每一条记录?
光标的另一功能事Q它包含一个跟t当前访问的记录的指针,q您的E序能够一ơ处理多条记录?
三?使用昄光标的基本方?/strong>
步骤如下Q?
1 、声明光?/strong>
声明光标的语法如下:
DECLARE cursor_name
Is
SELECT statement
其中Q?cursor_name 是您l光标指定的名称Q?SELECT statement 是给光标zd集返回记录的查询?
声明光标完成了下面两个目的:
l光标命名;
一个查询与光标兌h?
值得注意的是Q必d PL/SQL 块的声明部分声明光标Q给光标指定的名U是一个未声明的标识符Q而不是一?PL/SQL 变量Q不能给光标名称赋|也不能将它用在表辑ּ中?PL/SQL 块用这个名U来引用光标查询?
例: DECLARE
CURSOR c1
Is
SELECT VIEW_NAME FROM ALL_VIEWS
WHERE ROWNUM<=10 Q?
另外q可以在光标定义语句中声明光标的参数Q例Q?
CURSOR c1 Q?view _nbr number Q?
Is
SELECT VIEW_NAME FROM ALL_VIEWS
WHERE ROWNUM<= view _nbr Q?
光标参数只对相应的光标是可见的,不能在光标范围之外引用该光标的参数。如果试图这样做Q?Oracle 返回一个错误,指出该变量没有定义?
2 、打开光标
打开光标的语法如下:
OPEN cursor_name Q?
其中 cursor_name 是您以前定义的光标名U?
打开光标激zL询ƈ识别zd集,可是在执行光标取回命令之前,q没有真正取回记录?OPEN 命oq初始化了光标指针,使其指向zd集的W一条记录。光标被打开后,直到关闭之前Q取回到zd集的所有数据都是静态的Q换句话_光标忽略所有在光标打开之后Q对数据执行?SQL DML 命oQ?INSERT ?UPDATE ?DELETE ?SELECT Q。因此只有在需要时才打开它,要刷新活动集Q只需关闭q新打开光标卛_?
3 、从光标中取回数?/strong>
FETCH 命o以每ơ一条记录的方式取回zd集中的记录。通常?FETCH 命o和某UP代处理结合v来用,在P代处理中Q?FETCH 命o每执行一ơ,光标前进到活动集的下一条记录?
FETCH 命o的语法:
FETCH cursor_name INTO record_list Q?
其中Q?cursor_name 是前面定义的光标的名Uͼ record_list 是变量列表,它接受活动集中的列?FETCH 命o活动集的结果放|到q些变量中?
执行 FETCH 命o后,zd集中的结果被取回?PL/SQL 变量中,以便?PL/SQL 块中使用。每取回一条记录,光标的指针就Udzd集的下一条记录?
例:
FETCH C1 INTO VNAME;
WHILE C1%FOUND LOOP
DBMS_OUTPUT.PUT_LINE(TO_CHAR(C1%ROWCOUNT)||' '||VNAME);
END LOOP;
其中Q用属?'%FOUND' 使得?FETCH 到达zd集的l尾Ӟ不会引发异常。其它属性及含义见下表:
属?含量
%FOUND 布尔型属性,当最q一ơ该记录时成功返回,则gؓ TRUE
%NOTFOUND 布尔型属性,它的值M %FOUND 属性的值相?
%ISOPEN 布尔型属性,当光标是打开时返?TRUE
%ROWCOUNT 数字型属性,q回已从光标中读取的记录?
属?含量
%FOUND 布尔型属性,当最q一ơ该记录时成功返回,则gؓ TRUE
%NOTFOUND 布尔型属性,它的值M %FOUND 属性的值相?
%ISOPEN 布尔型属性,当光标是打开时返?TRUE
%ROWCOUNT 数字型属性,q回已从光标中读取的记录?
4 ?a name="baidusnap2">关闭光标
CLOSE 语句关闭以前打开的光标,使得zd集不定。当用户的程序或会话l束Ӟ Oracle 隐式关闭光标。光标被关闭后,׃能对它执行Q何操作了 , 否则引发异常?
CLOSE 语句的语法是Q?
CLOSE cursor_name Q?
其中Q?cursor_name 是以前打开的光标的名称?
完整的程序代码如下:
DECLARE
CURSOR C1 IS SELECT VIEW_NAME FROM ALL_VIEWS
WHERE ROWNUM<=10
ORDER BY VIEW_NAME;
VNAME VARCHAR2(40);
BEGIN
OPEN C1;
FETCH C1 INTO VNAME;
WHILE C1%FOUND LOOP
DBMS_OUTPUT.PUT_LINE(TO_CHAR(C1%ROWCOUNT)||''||VNAME);
END LOOP;
END;
…… CLOSE C1;
四?结
光标是一U结?, 能够以一ơ一条记录的方式处理多行查询的结?. 为每?DML 语句创徏隐式光标 , 而显式光标是q户创建的 , 以便处理q回多条记录的查询。而且 , 通过消除反复地分析代?, 光标提高了代码的处理速度?
---- ????中, I?????C????????????c??一 ??中, ??一 ???????| ???U???I?|NULLQ?????c???? ???????I(NOT NULLQ???键(PRIMARY KEYQ?????Ӟ ?????I?倹{??????中, ????I????在, ???????????烦?
---- ?如, ??????表(EMPQ?中, ??名(ENAMEQ?为KING ?行, ?为KING ?最 ??员(PRESIDENTQ, ????(MGRQ, 所 ?其MGR ?I?倹{?????所 ???????l?费(COMMQ, 所 ?列COMM ???I?| ?00?00?400? ??????行COMM ??I?倹{?
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---- -------- -------- --------- -------- ------ --------- 7369 SMITH CLERK 7902 17-DEC-80 800 20 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30 7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30 7566 JONES MANAGER 7839 02-APR-81 2975 20 7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30 7698 BLAKE MANAGER 7839 01-MAY-81 2850 30 7782 CLARK MANAGER 7839 09-JUN-81 2450 10 7788 SCOTT ANALYST 7566 09-DEC-82 3000 20 7839 KING PRESIDENT 17-NOV-81 5000 10 7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30 7876 ADAMS CLERK 7788 12-JAN-83 1100 20 7900 JAMES CLERK 7698 03-DEC-81 950 30 7902 FORD ANALYST 7566 03-DEC-81 3000 20 7934 MILLER CLERK 7782 23-JAN-82 1300 10
---- ?????qEMP ??例, ????一 ?I????????所 ???一 ??性?
---- 一?I????????
---- 1. I?????
---- ??一 ????I(NOT NULLQ?????Ӟ ???~?????I?| ?????一 ????????| ????I?倹{?
---- ?用SQL ?句INSERT ??行, ??????列, ???I?| ????列, ???????I?| ?????用NULL ??C( ???W???列, ????' ??C)?
---- 例: ??一 行, 其EMPNO ?、ENAME ?JIA'、SAL ?0000、job 和comm ?I?倹{?
SQL >insert into emp(empno,ename,job,sal,comm) values(1,'JIA',NULL,1000,NULL); SQL >select * from emp where empno=1; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO --------- ---------- --------- --------- --------- --------- 1 JIA 1000
---- ????????一 行, 除job 和comm ?I??外,mgr、hiredate、deptno ?????????及, ??I?倹{?
---- ?用SQL ?句UPDATE ????据, I???用NULL ??C( ???W???列, ????' ??C)??
SQL >update emp set ename=NULL,sal=NULL where empno=1;
---- 2. I?????
---- I???????点:
---- * {???????倹{?
---- * ?0?I??W???I???同?
---- * 在where ??? Oracle ??l??为NULL ???为FALSEQ???q????的select ???q??行, q???q?????息?但NULL 和FALSE ???的?
---- * ?????????大?
---- * I??????引?
---- 二?I?????
---- ??I???C?~???据, 所 ?I??????????性, ????{?于??{?于????????????较, ?????I???w( ??在decode ??外, ??I??????{?P???I?????????WIS NULL 和IS NOT NULL?????????????W??????式, q???l?????I?| ???l????是NULL?在where ??中,Oracle ??l??为NULL ???为FALSEQ???q????的select ???q??行, ??q?????息?
---- ???询EMP ?中MGR 为NULL ?行:
SQL >select * from emp where mgr=''; no rows selected SQL >select * from emp where mgr=null; no rows selected SQL >select * from emp where mgr is null; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- --------- --------- --------- --------- 7839 KING PRESIDENT 17-NOV-81 5000 10
---- W?? ????妥,WHERE ??l??为NULLQ??q??行?W????, q?回MGR ?I???行?
---- 三?I?????W?
---- 1. I???????W?
---- ????W?
---- ???
---- l??
AND NULL AND TRUE NULL NULL AND FALSE FALSE NULL AND NULL NULL OR NULL OR TRUE TRUE NULL OR FALSE NULL NULL OR NULL NULL NOT NOT NULL NULL
---- ???刎ͼ ????中, 除NULL AND FALSE l??为FALSE、NULL OR TRUE l??为TRUE ?外, ??l???为NULL?
---- ??在where ??中,Oracle ??l??为NULL 的WHERE ??为FALSEQ????????中NULL ??于FALSE???在NOT Q?NULL AND FALSE Q?和NOT Q?NULL AND NULL Q??????一 处FALSE 和TRUE ??别, 但NOT Q?NULL AND FALSE Q??l???TRUEQ?而NOT Q?NULL AND NULL Q??l??为NULL?
---- ??????I???????W???法:
SQL > select * from emp where not comm=null and comm!=0; no rows selected SQL > select * from emp where not ( not comm=null and comm!=0 ); EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- --------- --------- --------- --------- 7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30
---- W?一 个Select ?句, ??not comm=null and comm!=0" {??于NULL AND COMM!=0?????一 行, ?果COMM ??{?? ??| ??{??于NULL AND TRUEQ?l??为NULLQ??果COMM {??Q???{??于NULL AND FALSEQ?l??为FALSE?所 以, 最 l?l???q??行?
---- W??个Select ??????W?一 个Select ????? ?QNOTQ, ????一 行, ?果COMM ??{?? ??| ??{??于NOT NULLQ?l??为NULLQ??果COMM {??Q???{??于NOT FALSEQ?l??为TRUE?所 以, 最 l?l??q??行COMM {?? ?行?
---- 2. I???????W?
---- Q?QIS [NOT] NULLQ??????I????一 ??W( ? I?????Q?
Q?Q??=?gt;=?lt;=?gt;?lt; SQL >select ename,sal,comm from emp where sal >comm; ENAME SAL COMM ---------- --------- --------- ALLEN 1600 300 WARD 1250 500 TURNER 1500 0
---- sal 或comm ?I???行,sal>comm ??l??为NULLQ?所 ??是sal 或comm ?I???????q?回?
---- Q?QIN 和NOT IN ??W?
SQL >select ename,mgr from emp where mgr in (7902,NULL); ENAME MGR ---------- --------- SMITH 7902
---- ??q???中, ??mgr in (7902,NULL)" {??于mgr=7902 or mgr=NULL???表EMP ????一 行, ?果mgr 为NULLQ???q???{??于NULL OR NULLQ??为NULLQ??果mgr ??{??902 ??| ??q???{??于FALSE OR NULLQ??为NULLQ??果mgr {??902Q???q???{??于TRUE OR NULLQ??为TRUE?所 以, 最 l?l???q?回mgr {??902 ?行?
SQL >select deptno from emp where deptno not in ('10',NULL); no rows selected
---- ??q???中, ??deptno not in ('10',NULL)" {??于deptno!='10' and deptno!=NULLQ??于EMP ?????一 行, ???l????为NULL 或FALSEQ?所 ??q??行?
---- Q?Qany,some
SQL >select ename,sal from emp where sal > any(3000,null); ENAME SAL ---------- --------- KING 5000
---- ??sal > any(3000,null)" {??于sal >3000 or sal >null?c???qͼ3Q?W?一 句, 最 l?l??q??所 有sal >3000 ?行?
---- Q?QAll
SQL >select ename,sal from emp where sal > all(3000,null); no rows selected
---- ??sal> all(3000,null)" {??于sal >3000 and sal >null, l????为NULL 或FALSEQ?所 ??q??行?
---- Q?Q(notQbetween
SQL >select ename,sal from emp where sal between null and 3000; no rows selected
---- ??sal between null and 3000" {??于sal >=null and sal< =3000, l????为NULL 或FALSEQ?所 ??q??行?
SQL >select ename,sal from emp where sal not between null and 3000; ENAME SAL ---------- --------- KING 5000
---- ??sal not between null and 3000" {??于sal ---- ???????W??I????l:
---- ????W?
---- ??式( 例:A、B 是NULL、C=10Q?
---- l??
---- 3?I????术??W???W?
---- Q?Q?????W: I???{???Q?????I?????????q??l????I?| ??I???0 ?I?倹{?
---- Q?Q??W???W||Q??为ORACLE ???????W????????I??????同( ???????一 ????此)Q?所 ??于||Q?I??{??????W?倹{?例:
---- ?????刎ͼ 凡mgr ?I??的,ename||mgr l??{?于enameQ??是comm ?I???行,sal+comm ??I?倹{?
---- 四?I?????
---- 1 Q?I???????
---- ?????敎ͼ ??l??????I?| ?ӞNVL、TRANSLATE ?外) q????I?倹{?????的ABSQCOMMQ, ?果COMM ?I?|ABS(COMM) ?I?倹{?
---- 2. I???l???
---- l?????I?倹{??????中, ??需 ???用nvl ??????I?倹{?例:
---- W?一 个SELECT ???略COMM ?I???行, W??个SELECT ???用NVL ??l???所 ?的COMMQ?所 ???l????数?q??????同???需 ????是, ???l???q??????Ӟ ?????????????义, ????????z??握??如:
---- ???到SUM(SAL+COMM)、SUM(SAL)+SUM(COMM)?SUM(NVL(SAL,0)+NVL(COMM,0)) ??别:SUM(SAL+COMM) ??????????和, ?果SAL、COMM ??一 ?为NULLQ???????计;SUM(SAL)+SUM(COMM) ????????????加,SAL、COMM ?的NULL ????计, ???SUM(SAL)、SUM(COMM) ???l?????一 ?为NULLQ??????为NULLQ?在SUM(NVL(SAL,0)+NVL(COMM,0)) 里,SAL、COMM ?的NULL ? ?理?
---- 五?I???????
---- 1. I??????????倹{??如:
---- 2. I??????引???????????引, ??????I?????_ ??I??????引, 所 ?????????率????????????在MGR ??????引?
---- ??????I?????引, 所 ?????I????????一 ??引(UNIQUE INDEXQ??如, ??在EMP ?的COMM ?????一 ??引:
IS NULL、IS NOT NULL
A IS NULL
TRUE
A IS NOT NULL
FALSE
C IS NULL
FALSE
C IS NOT NULL
TRUE
=?=?gt;=?lt; =?gt;?lt;
A = NULL
NULL
A > NULL
NULL
C = NULL
NULL
C > NULL
NULL
IN (=ANY)
A IN (10,NULL)
NULL
C IN (10,NULL)
TRUE
C IN (20,NULL)
NULL
NOT IN
( {???Q?ALL)
A NOT IN (20,NULL)
NULL
C NOT IN (20,NULL)
FALSE
C NOT IN (10,NULL)
NULL
ANYQSOME
A > ANY(5,NULL)
NULL
C > ANY(5,NULL)
TRUE
C > ANY(15,NULL)
NULL
ALL
A > ALL(5,NULL)
NULL
C > ALL(5,NULL)
NULL
C > ALL(15,NULL)
FALSE
(NOT)BETWEEN
A BETWEEN 5 AND NULL
NULL
C BETWEEN 5 AND NULL
NULL
C BETWEEN 15 AND NULL
FALSE
A NOT BETWEEN 5 AND NULL
NULL
C NOT BETWEEN 5 AND NULL
NULL
C NOT BETWEEN 15 AND NULL
TRUE
SQL >select ename,mgr,ename||mgr,sal,comm,sal+comm from emp;
ENAME MGR ENAME||MGR SAL COMM SAL+COMM
---------- --------- ------------- --------- --------- ---------
SMITH 7902 SMITH7902 800
ALLEN 7698 ALLEN7698 1600 300 1900
WARD 7698 WARD7698 1250 500 1750
JONES 7839 JONES7839 2975
MARTIN 7698 MARTIN7698 1250 1400 2650
BLAKE 7839 BLAKE7839 2850
CLARK 7839 CLARK7839 2450
SCOTT 7566 SCOTT7566 3000
KING KING 5000
TURNER 7698 TURNER7698 1500 0 1500
ADAMS 7788 ADAMS7788 1100
JAMES 7698 JAMES7698 950
FORD 7566 FORD7566 3000
MILLER 7782 MILLER7782 1300
SQL > select ename,sal,comm,abs(comm) from emp where sal< 1500;
ENAME SAL COMM ABS(COMM)
---------- --------- --------- ---------
SMITH 800
WARD 1250 500 500
MARTIN 1250 1400 1400
ADAMS 1100
JAMES 950
MILLER 1300
SQL >select count(comm),sum(comm),avg(comm) from emp;
COUNT(COMM) SUM(COMM) AVG(COMM)
----------- --------- ---------
4 2200 550
SQL >select count(nvl(comm,0)),sum(nvl(comm,0)),avg(nvl(comm,0))
from emp;
COUNT(NVL(COMM,0)) SUM(NVL(COMM,0)) AVG(NVL(COMM,0))
------------------ ---------------- ----------------
14 2200 157.14286
SQL >select deptno,sum(sal),sum(comm),
sum(sal+comm),sum(sal)+sum(comm),sum(nvl(sal,0)+nvl(comm,0))
from emp
group by deptno;
DEPTNO SUM(SAL) SUM(COMM) SUM(SAL+COMM) SUM(SAL)
+SUM(COMM) SUM(NVL(SAL,0)+NVL(COMM,0))
--------- --------- --------- ------------- -------
10 8750 8750
20 10875 10875
30 9400 2200 7800 11600 11600
SQL > select ename,comm from emp where deptno='30' order by commQ?
ENAME COMM
---------- ---------
TURNER 0
ALLEN 300
WARD 500
MARTIN 1400
BLAKE
JAMES
SQL >select ename from emp where mgr is null;
ENAME
----------
KING
SQL > create unique index emp_comm on emp(comm);
Index created.
]]>
PowerDesigner是Sybase公司的CASE工具集,使用它可以方便地对管理信息系l进行分析设计,它几乎包括了数据库模型设计的全过E。利用PowerDesigner可以制作数据程图、概忉|据模型、物理数据模型,可以生成多种客户端开发工L应用E序Q还可ؓ数据仓库制作l构模型Q也能对团队设计模型q行控制。它可与许多行的数据库设计软gQ例如:PowerBuilderQDelphiQVB{相配合使用来羃短开发时间和使系l设计更优化?
PowerDesigner主要包括以下几个功能部分Q?/strong>
Q?Q?DataArchitect
q是一个强大的数据库设计工P使用DataArchitect可利用实?关系图ؓ一个信息系l创?概念数据模型"QCDMQConceptual Data ModelQ。ƈ且可ҎCDM产生Z某一特定数据库管理系l(例如QSybase System 11Q的"物理数据模型"-PDM(Physical Data Model)。还可优化PDMQ生ؓ特定DBMS创徏数据库的SQL语句q可以文件Ş式存储以便在其他时刻q行q些SQL语句创徏数据库。另外,DataArchitectq可Ҏ已存在的数据库反向生成PDMQCDM及创建数据库的SQL脚本?
Q?Q?ProcessAnalyst
q部分用于创建功能模型和数据图Q创?处理层次关系"?
Q?Q?AppModeler
为客?服务器应用程序创建应用模型?
Q?Q?ODBC Administrator
此部分用来管理系l的各种数据源?
PowerDesigner?U模型文Ӟ
概念数据模型 (CDM)
CDM 表现数据库的全部逻辑的结?与Q何的软g或数据储藏结构无兟?一个概忉|型经常包括在物理数据库中仍然不实现的数据对象?它给q行计划或业务活动的数据一个正式表现方式?
物理数据模型 (PDM)
PDM 叙述数据库的物理实现?
藉由 PDM Q你考虑真实的物理实现的l节?它进入帐户两个Y件或数据储藏l构之内ѝ?你能修正 PDM 适合你的表现或物理约束?
面向对象模型 (OOM)
一个OOM包含一pd包,c,接口 , 和他们的关系?q些对象一起Ş成所有的 ( 或部? 一个Y件系l的逻辑的设计视囄cȝ构?一个OOM本质上是软gpȝ的一个静态的概念模型?
你?PowerDesigner 面向对象模型建立面向对象模型.(OOM) 你能为纯_地对象- 导向的靠模切目的建立一个OOM, 产生Java文g或者PowerBuilder文gQ或你能使用一个来自OOM的物理数据模?PDM)对象 , 来表C关pL据库设计分析?
业务E序模型 (BPM)
BPM 描述业务的各U不同内在Q务和内在程Q而且客户如何以这些Q务和程互相影响?
BPM 是从业务合伙人的观点来看业务逻辑和规则的概念模型Q用一个图表描q?
E序Q流E,信息和合作协议之间的交互作用?
以下是其中的CDM PDM OOM三者的转换关系
使用PowerDesigner环境
对象览?
对象览器可以用分层l构昄你的工作I间.
输出H口
昄操作的结果?
l果列表
用于昄生成、覆盖和模型查结果,以及设计环境的M信息?
图表H口
用于l织模型中的图表Q以囑Ş方式昄模型中各对象之间的关pR?br />
我也不知道只有这些。。。?br />