??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲欧洲国产综合,亚洲电影中文字幕,亚洲精品午夜无码电影网http://www.tkk7.com/superwei/category/19914.htmlzh-cnMon, 03 Sep 2012 19:08:20 GMTMon, 03 Sep 2012 19:08:20 GMT60Oracle错误代码一览表Q方便查询!http://www.tkk7.com/superwei/articles/385696.html辞?/dc:creator>辞?/author>Fri, 17 Aug 2012 08:01:00 GMThttp://www.tkk7.com/superwei/articles/385696.htmlhttp://www.tkk7.com/superwei/comments/385696.htmlhttp://www.tkk7.com/superwei/articles/385696.html#Feedback0http://www.tkk7.com/superwei/comments/commentRss/385696.htmlhttp://www.tkk7.com/superwei/services/trackbacks/385696.html阅读全文

]]>
SQLServer和Oracle常用函数Ҏ (转蝲Q?http://www.tkk7.com/superwei/articles/111638.html辞?/dc:creator>辞?/author>Wed, 18 Apr 2007 06:53:00 GMThttp://www.tkk7.com/superwei/articles/111638.htmlhttp://www.tkk7.com/superwei/comments/111638.htmlhttp://www.tkk7.com/superwei/articles/111638.html#Feedback0http://www.tkk7.com/superwei/comments/commentRss/111638.htmlhttp://www.tkk7.com/superwei/services/trackbacks/111638.html

某种意义上也可以说是 sqlserver ?nbsp;mysql 的常用函数对比?/p>

数学函数

  1.l对?nbsp;
  S:select abs(-1) value 
  O:select abs(-1) value from dual 

  2.取整(? 
  S:select ceiling(-1.001) value 
  O:select ceil(-1.001) value from dual 

  3.取整Q小Q?nbsp;
  S:select floor(-1.001) value 
  O:select floor(-1.001) value from dual 

  4.取整Q截取) 
  S:select cast(-1.002 as int) value 
  O:select trunc(-1.002) value from dual 

  5.四舍五入 
  S:select round(1.23456,4) value 1.23460 
  O:select round(1.23456,4) value from dual 1.2346 

  6.e为底的幂 
  S:select Exp(1) value 2.7182818284590451 
  O:select Exp(1) value from dual 2.71828182 

  7.取e为底的对?nbsp;
  S:select log(2.7182818284590451) value 1 
  O:select ln(2.7182818284590451) value from dual; 1 

  8.?0为底Ҏ 
  S:select log10(10) value 1 
  O:select log(10,10) value from dual; 1 

  9.取^?nbsp;
  S:select SQUARE(4) value 16 
  O:select power(4,2) value from dual 16 

  10.取^Ҏ 
  S:select SQRT(4) value 2 
  O:select SQRT(4) value from dual 2 

  11.求Q意数为底的幂 
  S:select power(3,4) value 81 
  O:select power(3,4) value from dual 81 

  12.取随机数 
  S:select rand() value 
  O:select sys.dbms_random.value(0,1) value from dual; 

  13.取符?nbsp;
  S:select sign(-8) value -1 
  O:select sign(-8) value from dual -1 

  14.圆周?nbsp;
  S:SELECT PI() value 3.1415926535897931 
  O:不知?nbsp;

  15.sin,cos,tan 参数都以弧度为单?nbsp;
  例如Qselect sin(PI()/2) value 得到1QSQLServerQ?nbsp;

  16.Asin,Acos,Atan,Atan2 q回弧度 

  17.弧度角度互换(SQLServerQOracle不知? 
  DEGREESQ弧?〉角?nbsp;
  RADIANSQ角?〉弧?nbsp;

数值间比较 

  18. 求集合最大?nbsp;
  S:select max(value) value from 
  (select 1 value 
  union 
  select -2 value 
  union 
  select 4 value 
  union 
  select 3 value)a 

  O:select greatest(1,-2,4,3) value from dual 

  19. 求集合最?nbsp;
  S:select min(value) value from 
  (select 1 value 
  union 
  select -2 value 
  union 
  select 4 value 
  union 
  select 3 value)a 

  O:select least(1,-2,4,3) value from dual 

  20.如何处理null?F2中的null?0代替) 
  S:select F1,IsNull(F2,10) value from Tbl 
  O:select F1,nvl(F2,10) value from Tbl 

  21.求字W序?nbsp;
  S:select ascii('a') value 
  O:select ascii('a') value from dual 

  22.从序h字符 
  S:select char(97) value 
  O:select chr(97) value from dual 

  23.q接 
  S:select '11'+'22'+'33' value 
  O:select CONCAT('11','22')  33 value from dual 

23.子串位置 --q回3 
  S:select CHARINDEX('s','sdsq',2) value 
  O:select INSTR('sdsq','s',2) value from dual 

  23.模糊子串的位|?nbsp;--q回2,参数L中间%则返? 
  S:select patindex('%d%q%','sdsfasdqe') value 
  O:oracle没发玎ͼ但是instr可以通过W四个参数控制出现次?nbsp;
  select INSTR('sdsfasdqe','sd',1,2) value from dual q回6 

  24.求子?nbsp;
  S:select substring('abcd',2,2) value 
  O:select substr('abcd',2,2) value from dual 

  25.子串代替 q回aijklmnef 
  S:SELECT STUFF('abcdef', 2, 3, 'ijklmn') value 
  O:SELECT Replace('abcdef', 'bcd', 'ijklmn') value from dual 

  26.子串全部替换 
  S:没发?nbsp;
  O:select Translate('fasdbfasegas','fa','? ) value from dual 

  27.长度 
  S:len,datalength 
  O:length 
    www.knowsky.com
  28.大小写{?nbsp;lower,upper 

  29.单词首字母大?nbsp;
  S:没发?nbsp;
  O:select INITCAP('abcd dsaf df') value from dual 

  30.左补I格QLPAD的第一个参CؓI格则同space函数Q?nbsp;
  S:select space(10)+'abcd' value 
  O:select LPAD('abcd',14) value from dual 

  31.双I格QRPAD的第一个参CؓI格则同space函数Q?nbsp;
  S:select 'abcd'+space(10) value 
  O:select RPAD('abcd',14) value from dual 

  32.删除I格 
  S:ltrim,rtrim 
  O:ltrim,rtrim,trim 

  33. 重复字符?nbsp;
  S:select REPLICATE('abcd',2) value 
  O:没发?nbsp;

  34.发音怼性比?q两个单词返回gP发音相同) 
  S:SELECT SOUNDEX ('Smith'), SOUNDEX ('Smythe') 
  O:SELECT SOUNDEX ('Smith'), SOUNDEX ('Smythe') from dual 
  SQLServer中用SELECT DIFFERENCE('Smithers', 'Smythers') 比较soundex的差 
  q回0-4Q?为同韻I1最?nbsp;

日期函数 
  35.pȝ旉 
  S:select getdate() value 
  O:select sysdate value from dual 

  36.前后几日 
  直接与整数相加减 

  37.求日?nbsp;
  S:select convert(char(10),getdate(),20) value 
  O:select trunc(sysdate) value from dual 
  select to_char(sysdate,'yyyy-mm-dd') value from dual 

  38.求时?nbsp;
  S:select convert(char(8),getdate(),108) value 
  O:select to_char(sysdate,'hh24:mm:ss') value from dual 

39.取日期时间的其他部分 
  S:DATEPART ?nbsp;DATENAME 函数 Q第一个参数决定) 
  O:to_char函数 W二个参数决?nbsp;

  参数---------------------------------下表需要补?nbsp;
  year yy, yyyy 
  quarter qq, q (季度) 
  month mm, m (m O无效) 
  dayofyear dy, y (O表星? 
  day dd, d (d O无效) 
  week wk, ww (wk O无效) 
  weekday dw (O不清? 
  Hour hh,hh12,hh24 (hh12,hh24 S无效) 
  minute mi, n (n O无效) 
  second ss, s (s O无效) 
  millisecond ms (O无效) 
  ---------------------------------------------- 

  40.当月最后一?nbsp;
  S:不知?nbsp;
  O:select LAST_DAY(sysdate) value from dual 

  41.本星期的某一天(比如星期日) 
  S:不知?nbsp;
  O:SELECT Next_day(sysdate,7) vaule FROM DUAL; 

  42.字符串{旉 
  S:可以直接转或者select cast('2004-09-08'as datetime) value 
  O:SELECT To_date('2004-01-05 22:09:38','yyyy-mm-dd hh24-mi-ss') vaule FROM DUAL; 

  43.求两日期某一部分的差Q比如秒Q?nbsp;
  S:select datediff(ss,getdate(),getdate()+12.3) value 
  O:直接用两个日期相减(比如d1-d2=12.3Q?nbsp;
  SELECT (d1-d2)*24*60*60 vaule FROM DUAL; 

  44.Ҏ差值求新的日期Q比如分钟) 
  S:select dateadd(mi,8,getdate()) value 
  O:SELECT sysdate+8/60/24 vaule FROM DUAL; 

  45.求不同时区时?nbsp;
  S:不知?nbsp;
  O:SELECT New_time(sysdate,'ydt','gmt' ) vaule FROM DUAL; 

  -----时区参数,北京在东8区应该是Ydt------- 
  AST ADT 大西z标准时?nbsp;
  BST BDT 白oh准时?nbsp;
  CST CDT 中部标准旉 
  EST EDT 东部标准旉 
  GMT 格林治标准旉 
  HST HDT 阿拉斯加?夏威h准时?nbsp;
  MST MDT 山区标准旉 
  NST U芬兰标准时?nbsp;
  PST PDT 太^z标准时?nbsp;
  YST YDT YUKON标准旉 



]]>
SQL-SERVER中CONVERT转化函数的用?http://www.tkk7.com/superwei/articles/111630.html辞?/dc:creator>辞?/author>Wed, 18 Apr 2007 06:37:00 GMThttp://www.tkk7.com/superwei/articles/111630.htmlhttp://www.tkk7.com/superwei/comments/111630.htmlhttp://www.tkk7.com/superwei/articles/111630.html#Feedback0http://www.tkk7.com/superwei/comments/commentRss/111630.htmlhttp://www.tkk7.com/superwei/services/trackbacks/111630.html 

格式:
CONVERT(data_type,expression[,style])

说明:
此样式一般在旉cd(datetime,smalldatetime)与字W串cd
(nchar,nvarchar,char,varchar)
怺转换的时候才用到.

例子:
SELECT CONVERT(varchar(30),getdate(),101) now

l果?
now
---------------------------------------
|09/15/2001

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

style数字在{换时间时的含义如?

------------------------------------------------------------------------------------------------------------
Style(2位表C年?   |  Style(4位表C年?   |   输入输出格式                                   
------------------------------------------------------------------------------------------------------------
0                               | 100                           |   mon dd yyyy hh:miAM(或PM)             
------------------------------------------------------------------------------------------------------------
1                               |  101   国                |   mm/dd/yy                                      
------------------------------------------------------------------------------------------------------------
2                               |  102    ANSI               |   yy-mm-dd                                       
------------------------------------------------------------------------------------------------------------
3                               |  103    英法                |   dd/mm/yy                                      
------------------------------------------------------------------------------------------------------------
4                               |  104    德国                |   dd.mm.yy                                       
------------------------------------------------------------------------------------------------------------
5                               |  105    意大?nbsp;            |   dd-mm-yy                                       
------------------------------------------------------------------------------------------------------------
6                               |  106                            |   dd mon yy                                       
------------------------------------------------------------------------------------------------------------
7                               |  107                            |   mon dd,yy                                       
------------------------------------------------------------------------------------------------------------
8                               |  108                            |   hh:mm:ss                                        
------------------------------------------------------------------------------------------------------------
9                               |  109                            |   mon dd yyyy hh:mi:ss:mmmmAM(或PM)
------------------------------------------------------------------------------------------------------------
10                             |  110    国                 |   mm-dd-yy                                        
------------------------------------------------------------------------------------------------------------
11                             |  111    日本                 |   yy/mm/dd                                       
------------------------------------------------------------------------------------------------------------
12                             |  112    ISO                  |   yymmdd                                          
------------------------------------------------------------------------------------------------------------
13                             |  113     Ƨ洲默认?nbsp;    |   dd mon yyyy hh:mi:ss:mmm(24时? 
------------------------------------------------------------------------------------------------------------
14                             |  114                            |   hh:mi:ss:mmm(24时?                   
------------------------------------------------------------------------------------------------------------
20                             |  120     ODBC 规范     |    yyyy-mm-dd hh:mi:ss(24时?        
------------------------------------------------------------------------------------------------------------
21                             |   121                           |    yyyy-mm-dd hh:mi:ss:mmm(24时?
------------------------------------------------------------------------------------------------------------

语句及查询结果:
SELECT CONVERT(varchar(100), GETDATE(), 0): 05 16 2006 10:57AM
SELECT CONVERT(varchar(100), GETDATE(), 1): 05/16/06
SELECT CONVERT(varchar(100), GETDATE(), 2): 06.05.16
SELECT CONVERT(varchar(100), GETDATE(), 3): 16/05/06
SELECT CONVERT(varchar(100), GETDATE(), 4): 16.05.06
SELECT CONVERT(varchar(100), GETDATE(), 5): 16-05-06
SELECT CONVERT(varchar(100), GETDATE(), 6): 16 05 06
SELECT CONVERT(varchar(100), GETDATE(), 7): 05 16, 06
SELECT CONVERT(varchar(100), GETDATE(), 8): 10:57:46
SELECT CONVERT(varchar(100), GETDATE(), 9): 05 16 2006 10:57:46:827AM
SELECT CONVERT(varchar(100), GETDATE(), 10): 05-16-06
SELECT CONVERT(varchar(100), GETDATE(), 11): 06/05/16
SELECT CONVERT(varchar(100), GETDATE(), 12): 060516
SELECT CONVERT(varchar(100), GETDATE(), 13): 16 05 2006 10:57:46:937
SELECT CONVERT(varchar(100), GETDATE(), 14): 10:57:46:967
SELECT CONVERT(varchar(100), GETDATE(), 20): 2006-05-16 10:57:47
SELECT CONVERT(varchar(100), GETDATE(), 21): 2006-05-16 10:57:47.157
SELECT CONVERT(varchar(100), GETDATE(), 22): 05/16/06 10:57:47 AM
SELECT CONVERT(varchar(100), GETDATE(), 23): 2006-05-16
SELECT CONVERT(varchar(100), GETDATE(), 24): 10:57:47
SELECT CONVERT(varchar(100), GETDATE(), 25): 2006-05-16 10:57:47.250
SELECT CONVERT(varchar(100), GETDATE(), 100): 05 16 2006 10:57AM
SELECT CONVERT(varchar(100), GETDATE(), 101): 05/16/2006
SELECT CONVERT(varchar(100), GETDATE(), 102): 2006.05.16
SELECT CONVERT(varchar(100), GETDATE(), 103): 16/05/2006
SELECT CONVERT(varchar(100), GETDATE(), 104): 16.05.2006
SELECT CONVERT(varchar(100), GETDATE(), 105): 16-05-2006
SELECT CONVERT(varchar(100), GETDATE(), 106): 16 05 2006
SELECT CONVERT(varchar(100), GETDATE(), 107): 05 16, 2006
SELECT CONVERT(varchar(100), GETDATE(), 108): 10:57:49
SELECT CONVERT(varchar(100), GETDATE(), 109): 05 16 2006 10:57:49:437AM
SELECT CONVERT(varchar(100), GETDATE(), 110): 05-16-2006
SELECT CONVERT(varchar(100), GETDATE(), 111): 2006/05/16
SELECT CONVERT(varchar(100), GETDATE(), 112): 20060516
SELECT CONVERT(varchar(100), GETDATE(), 113): 16 05 2006 10:57:49:513
SELECT CONVERT(varchar(100), GETDATE(), 114): 10:57:49:547
SELECT CONVERT(varchar(100), GETDATE(), 120): 2006-05-16 10:57:49
SELECT CONVERT(varchar(100), GETDATE(), 121): 2006-05-16 10:57:49.700
SELECT CONVERT(varchar(100), GETDATE(), 126): 2006-05-16T10:57:49.827
SELECT CONVERT(varchar(100), GETDATE(), 130): 18 ???? ?????? 1427 10:57:49:907AM
SELECT CONVERT(varchar(100), GETDATE(), 131): 18/04/1427 10:57:49:920AM

说明:
使用 CONVERTQ?/font>

CONVERT ( data_type [ ( length ) ] , expression [ , style ] )

参数

expression

是Q何有效的 Microsoft® SQL Server™ 表达式。?

data_type

目标pȝ所提供的数据类型,包括 bigint ?sql_variant。不能用用户定义的数据cd?br>length

nchar?strong>nvarchar?strong>char?strong>varchar?strong>binary ?varbinary 数据cd的可选参数?

style

日期格式样式Q借以?datetime ?smalldatetime 数据转换为字W数据(nchar?strong>nvarchar?strong>char?strong>varchar?strong>nchar ?nvarchar 数据cdQ;或者字W串格式样式Q借以?float?strong>real?strong>money ?smallmoney 数据转换为字W数据(nchar?strong>nvarchar?strong>char?strong>varchar?strong>nchar ?nvarchar 数据cdQ?/font>

SQL Server 支持使用U威特算法的阿拉伯样式中的数据格式?/font>

在表中,左侧的两列表C将 datetime ?smalldatetime 转换为字W数据的 style 倹{给 style 值加 100Q可获得包括世纪C的四位年?(yyyy)?/font>

不带世纪C (yy) 带世U数?(yyyy)
标准

输入/输出**
- 0 ?100 (*) 默认?/font> mon dd yyyy hh:miAMQ或 PMQ?/font>
1 101 mm/dd/yyyy
2 102 ANSI yy.mm.dd
3 103 英国/法国 dd/mm/yy
4 104 德国 dd.mm.yy
5 105 意大?/font> dd-mm-yy
6 106 - dd mon yy
7 107 - mon dd, yy
8 108 - hh:mm:ss
- 9 ?109 (*) 默认?+ 毫秒 mon dd yyyy hh:mi:ss:mmmAMQ或 PMQ?/font>
10 110 mm-dd-yy
11 111 日本 yy/mm/dd
12 112 ISO yymmdd
- 13 ?113 (*) Ƨ洲默认?+ 毫秒 dd mon yyyy hh:mm:ss:mmm(24h)
14 114 - hh:mi:ss:mmm(24h)
- 20 ?120 (*) ODBC 规范 yyyy-mm-dd hh:mm:ss[.fff]
- 21 ?121 (*) ODBC 规范Q带毫秒Q?/font> yyyy-mm-dd hh:mm:ss[.fff]
- 126(***) ISO8601 yyyy-mm-dd Thh:mm:ss.mmmQ不含空|
- 130* Hijri**** dd mon yyyy hh:mi:ss:mmmAM
- 131* Hijri**** dd/mm/yy hh:mi:ss:mmmAM

*    默认|style 0 ?100? ?109?3 ?113?0 ?120?1 ?121Q始l返回世U数?(yyyy)?br>** 当{换ؓ datetime时输入;当{换ؓ字符数据时输出?br>*** 专门用于 XML。对于从 datetime?smalldatetime ?character 数据的{换,输出格式如表中所C。对于从 float?strong>money ?smallmoney ?character 数据的{换,输出{同?style 2。对于从 real ?character 数据的{换,输出{同?style 1?br>****Hijri 是具有几U变化Ş式的日历pȝQMicrosoft® SQL Server™ 2000 使用其中的科威特法?/font>

 重要  默认情况下,SQL Server Ҏ截止q䆾 2049 解释两位数字的年份。即Q两位数字的q䆾 49 被解释ؓ 2049Q而两位数字的q䆾 50 被解释ؓ 1950。许多客L应用E序Q例如那些基?OLE 自动化对象的客户端应用程序)都?2030 作ؓ截止q䆾。SQL Server 提供一个配|选项Q?两位数字的截止年?Q,借以更改 SQL Server 所使用的截止年份ƈҎ期进行一致性处理。然而最安全的办法是指定四位数字q䆾?/font>

当从 smalldatetime 转换为字W数据时Q包含秒或毫U的样式在q些位置上显C零。当?datetime ?smalldatetime D行{换时Q可以通过使用适当?char ?varchar 数据cd长度来截断不需要的日期部分?/font>



]]>
Oracle函数大全http://www.tkk7.com/superwei/articles/99622.html辞?/dc:creator>辞?/author>Tue, 13 Feb 2007 02:46:00 GMThttp://www.tkk7.com/superwei/articles/99622.htmlhttp://www.tkk7.com/superwei/comments/99622.htmlhttp://www.tkk7.com/superwei/articles/99622.html#Feedback0http://www.tkk7.com/superwei/comments/commentRss/99622.htmlhttp://www.tkk7.com/superwei/services/trackbacks/99622.htmlSQL中的单记录函?
1.ASCII
q回与指定的字符对应的十q制?
SQL> select ascii(’A? A,ascii(’a? a,ascii(?? zero,ascii(?? space from dual;
A A ZERO SPACE
--------- --------- --------- ---------
65 97 48 32

2.CHR
l出整数,q回对应的字W?
SQL> select chr(54740) zhao,chr(65) chr65 from dual;
ZH C
-- -
?A
3.CONCAT
q接两个字符?
SQL> select concat(?10-??8888888?||’{23?高乾竞电?from dual;
高乾竞电?
----------------
010-88888888?3
4.INITCAP
q回字符串ƈ字W串的第一个字母变为大?
SQL> select initcap(’smith? upp from dual;
UPP
-----
Smith

5.INSTR(C1,C2,I,J)
在一个字W串中搜索指定的字符,q回发现指定的字W的位置;
C1 被搜索的字符?
C2 希望搜烦的字W串
I 搜烦的开始位|?默认?
J 出现的位|?默认?
SQL> select instr(’oracle traning?’ra?1,2) instring from dual;
INSTRING
---------
9

6.LENGTH
q回字符串的长度;
SQL> select name,length(name),addr,length(addr),sal,length(to_char(sal)) from gao.nchar_tst;
NAME LENGTH(NAME) ADDR LENGTH(ADDR) SAL LENGTH(TO_CHAR(SAL))
------ ------------ ---------------- ------------ --------- --------------------
高乾?3 北京市v锭区 6 9999.99 7

7.LOWER
q回字符?q将所有的字符写
SQL> select lower(’AaBbCcDd?AaBbCcDd from dual;
AABBCCDD
--------
aabbccdd

8.UPPER
q回字符?q将所有的字符大写
SQL> select upper(’AaBbCcDd? upper from dual;
UPPER
--------
AABBCCDD

9.RPAD和LPAD(_脓字符)
RPAD 在列的右边粘贴字W?
LPAD 在列的左边粘贴字W?
SQL> select lpad(rpad(’gao?10,??,17,??from dual;
LPAD(RPAD(’GAO?1
-----------------
*******gao*******
不够字符则用*来填?

10.LTRIM和RTRIM
LTRIM 删除左边出现的字W串
RTRIM 删除双出现的字W串
SQL> select ltrim(rtrim(?gao qian jing ???,?? from dual;
LTRIM(RTRIM(?
-------------
gao qian jing

11.SUBSTR(string,start,count)
取子字符?从start开?取count?
SQL> select substr(?3088888888?3,8) from dual;
SUBSTR(?
--------
08888888

12.REPLACE(’string?’s1?’s2?
string 希望被替换的字符或变?
s1 被替换的字符?
s2 要替换的字符?
SQL> select replace(’he love you?’he?’i? from dual;
REPLACE(’H
----------
i love you

13.SOUNDEX
q回一个与l定的字W串读音相同的字W串
SQL> create table table1(xm varchar(8));
SQL> insert into table1 values(’weather?;
SQL> insert into table1 values(’wether?;
SQL> insert into table1 values(’gao?;
SQL> select xm from table1 where soundex(xm)=soundex(’weather?;
XM
--------
weather
wether

14.TRIM(’s?from ’string?
LEADING 剪掉前面的字W?
TRAILING 剪掉后面的字W?
如果不指?默认为空格符
15.ABS
q回指定值的l对?
SQL> select abs(100),abs(-100) from dual;
ABS(100) ABS(-100)
--------- ---------
100 100

16.ACOS
l出反余弦的?
SQL> select acos(-1) from dual;
ACOS(-1)
---------
3.1415927

17.ASIN
l出反正弦的?
SQL> select asin(0.5) from dual;
ASIN(0.5)
---------
.52359878

18.ATAN
q回一个数字的反正切?
SQL> select atan(1) from dual;
ATAN(1)
---------
.78539816

19.CEIL
q回大于或等于给出数字的最整?
SQL> select ceil(3.1415927) from dual;
CEIL(3.1415927)
---------------
4

20.COS
q回一个给定数字的余u
SQL> select cos(-3.1415927) from dual;
COS(-3.1415927)
---------------
-1
21.COSH
q回一个数字反余u?
SQL> select cosh(20) from dual;
COSH(20)
---------
242582598

22.EXP
q回一个数字e的nơ方?
SQL> select exp(2),exp(1) from dual;
EXP(2) EXP(1)
--------- ---------
7.3890561 2.7182818

23.FLOOR
对给定的数字取整?
SQL> select floor(2345.67) from dual;
FLOOR(2345.67)
--------------
2345

24.LN
q回一个数字的Ҏ?
SQL> select ln(1),ln(2),ln(2.7182818) from dual;
LN(1) LN(2) LN(2.7182818)
--------- --------- -------------
0 .69314718 .99999999

25.LOG(n1,n2)
q回一个以n1为底n2的对?
SQL> select log(2,1),log(2,4) from dual;
LOG(2,1) LOG(2,4)
--------- ---------
0 2

26.MOD(n1,n2)
q回一个n1除以n2的余?
SQL> select mod(10,3),mod(3,3),mod(2,3) from dual;
MOD(10,3) MOD(3,3) MOD(2,3)
--------- --------- ---------
1 0 2

27.POWER
q回n1的n2ơ方?
SQL> select power(2,10),power(3,3) from dual;
POWER(2,10) POWER(3,3)
----------- ----------
1024 27

28.ROUND和TRUNC
按照指定的精度进行舍?
SQL> select round(55.5),round(-55.4),trunc(55.5),trunc(-55.5) from dual;
ROUND(55.5) ROUND(-55.4) TRUNC(55.5) TRUNC(-55.5)
----------- ------------ ----------- ------------
56 -55 55 -55

29.SIGN
取数字n的符?大于0q回1,于0q回-1,{于0q回0
SQL> select sign(123),sign(-100),sign(0) from dual;
SIGN(123) SIGN(-100) SIGN(0)
--------- ---------- ---------
1 -1 0

30.SIN
q回一个数字的正u?
SQL> select sin(1.57079) from dual;
SIN(1.57079)
------------
1

31.SIGH
q回双曲正u的?
SQL> select sin(20),sinh(20) from dual;
SIN(20) SINH(20)
--------- ---------
.91294525 242582598

32.SQRT
q回数字n的根
SQL> select sqrt(64),sqrt(10) from dual;
SQRT(64) SQRT(10)
--------- ---------
8 3.1622777

33.TAN
q回数字的正切?
SQL> select tan(20),tan(10) from dual;
TAN(20) TAN(10)
--------- ---------
2.2371609 .64836083

34.TANH
q回数字n的双曲正切?
SQL> select tanh(20),tan(20) from dual;
TANH(20) TAN(20)
--------- ---------
1 2.2371609

35.TRUNC
按照指定的精度截取一个数
SQL> select trunc(124.1666,-2) trunc1,trunc(124.16666,2) from dual;
TRUNC1 TRUNC(124.16666,2)
--------- ------------------
100 124.16

36.ADD_MONTHS
增加或减L?
SQL> select to_char(add_months(to_date(?99912?’yyyymm?,2),’yyyymm? from dual;
TO_CHA
------
200002
SQL> select to_char(add_months(to_date(?99912?’yyyymm?,-2),’yyyymm? from dual;
TO_CHA
------
199910

37.LAST_DAY
q回日期的最后一?
SQL> select to_char(sysdate,’yyyy.mm.dd?,to_char((sysdate)+1,’yyyy.mm.dd? from dual;
TO_CHAR(SY TO_CHAR((S
---------- ----------
2004.05.09 2004.05.10
SQL> select last_day(sysdate) from dual;
LAST_DAY(S
----------
31-5?-04

38.MONTHS_BETWEEN(date2,date1)
l出date2-date1的月?
SQL> select months_between(?9-12?1999??9-3?1999? mon_between from dual;
MON_BETWEEN
-----------
9
SQL>selectmonths_between(to_date(?000.05.20?’yyyy.mm.dd?,to_date(?005.05.20?’yyyy.mm.dd?) mon_betw from dual;
MON_BETW
---------
-60

39.NEW_TIME(date,’this?’that?
l出在this时区=other时区的日期和旉
SQL> select to_char(sysdate,’yyyy.mm.dd hh24:mi:ss? bj_time,to_char(new_time
2 (sysdate,’PDT?’GMT?,’yyyy.mm.dd hh24:mi:ss? los_angles from dual;
BJ_TIME LOS_ANGLES
------------------- -------------------
2004.05.09 11:05:32 2004.05.09 18:05:32

40.NEXT_DAY(date,’day?
l出日期date和星期x之后计算下一个星期的日期
SQL> select next_day(?8-5?2001?’星期五? next_day from dual;
NEXT_DAY
----------
25-5?-01
41.SYSDATE
用来得到pȝ的当前日?
SQL> select to_char(sysdate,’dd-mm-yyyy day? from dual;
TO_CHAR(SYSDATE,?
-----------------
09-05-2004 星期?
trunc(date,fmt)按照l出的要求将日期截断,如果fmt=’mi’表CZ留分,截断U?
SQL> select to_char(trunc(sysdate,’hh?,’yyyy.mm.dd hh24:mi:ss? hh,
2 to_char(trunc(sysdate,’mi?,’yyyy.mm.dd hh24:mi:ss? hhmm from dual;
HH HHMM
------------------- -------------------
2004.05.09 11:00:00 2004.05.09 11:17:00

42.CHARTOROWID
字W数据类型{换ؓROWIDcd
SQL> select rowid,rowidtochar(rowid),ename from scott.emp;
ROWID ROWIDTOCHAR(ROWID) ENAME
------------------ ------------------ ----------
AAAAfKAACAAAAEqAAA AAAAfKAACAAAAEqAAA SMITH
AAAAfKAACAAAAEqAAB AAAAfKAACAAAAEqAAB ALLEN
AAAAfKAACAAAAEqAAC AAAAfKAACAAAAEqAAC WARD
AAAAfKAACAAAAEqAAD AAAAfKAACAAAAEqAAD JONES

43.CONVERT(c,dset,sset)
源字符?sset从一个语a字符集{换到另一个目的dset字符?
SQL> select convert(’strutz?’we8hp?’f7dec? "conversion" from dual;
conver
------
strutz

44.HEXTORAW
一个十六进制构成的字符串{换ؓ二进?

45.RAWTOHEXT
一个二q制构成的字W串转换为十六进?

46.ROWIDTOCHAR
ROWID数据cd转换为字W类?

47.TO_CHAR(date,’format?
SQL> select to_char(sysdate,’yyyy/mm/dd hh24:mi:ss? from dual;
TO_CHAR(SYSDATE,’YY
-------------------
2004/05/09 21:14:41

48.TO_DATE(string,’format?
字W串转化为ORACLE中的一个日?

49.TO_MULTI_BYTE
字W串中的单字节字W{化ؓ多字节字W?
SQL> select to_multi_byte(’高? from dual;
TO
--
?

50.TO_NUMBER
给出的字符转换为数?
SQL> select to_number(?999? year from dual;
YEAR
---------
1999

51.BFILENAME(dir,file)
指定一个外部二q制文g
SQL>insert into file_tb1 values(bfilename(’lob_dir1?’image1.gif?);

52.CONVERT(’x?’desc?’source?
x字段或变量的源source转换为desc
SQL> select sid,serial#,username,decode(command,
2 0,’none?
3 2,’insert?
4 3,
5 ’select?
6 6,’update?
7 7,’delete?
8 8,’drop?
9 ’other? cmd from v$session where type!=’background?
SID SERIAL# USERNAME CMD
--------- --------- ------------------------------ ------
1 1 none
2 1 none
3 1 none
4 1 none
5 1 none
6 1 none
7 1275 none
8 1275 none
9 20 GAO select
10 40 GAO none

53.DUMP(s,fmt,start,length)
DUMP函数以fmt指定的内部数字格式返回一个VARCHAR2cd的?
SQL> col global_name for a30
SQL> col dump_string for a50
SQL> set lin 200
SQL> select global_name,dump(global_name,1017,8,5) dump_string from global_name;
GLOBAL_NAME DUMP_STRING
------------------------------ --------------------------------------------------
ORACLE.WORLD Typ=1 Len=12 CharacterSet=ZHS16GBK: W,O,R,L,D

54.EMPTY_BLOB()和EMPTY_CLOB()
q两个函数都是用来对大数据类型字D进行初始化操作的函?

55.GREATEST
q回一l表辑ּ中的最大?x较字W的~码大小.
SQL> select greatest(’AA?’AB?’AC? from dual;
GR
--
AC
SQL> select greatest(’啊?’安?’天? from dual;
GR
--
?

56.LEAST
q回一l表辑ּ中的最?
SQL> select least(’啊?’安?’天? from dual;
LE
--
?

57.UID
q回标识当前用户的唯一整数
SQL> show user
USER ?GAO"
SQL> select username,user_id from dba_users where user_id=uid;
USERNAME USER_ID
------------------------------ ---------
GAO 25

58.USER
q回当前用户的名?
SQL> select user from dual;
USER
------------------------------
GAO

59.USEREVN
q回当前用户环境的信?opt可以?
ENTRYID,SESSIONID,TERMINAL,ISDBA,LABLE,LANGUAGE,CLIENT_INFO,LANG,VSIZE
ISDBA 查看当前用户是否是DBA如果是则q回true
SQL> select userenv(’isdba? from dual;
USEREN
------
FALSE
SQL> select userenv(’isdba? from dual;
USEREN
------
TRUE
SESSION
q回会话标志
SQL> select userenv(’sessionid? from dual;
USERENV(’SESSIONID?
--------------------
152
ENTRYID
q回会话人口标志
SQL> select userenv(’entryid? from dual;
USERENV(’ENTRYID?
------------------
0
INSTANCE
q回当前INSTANCE的标?
SQL> select userenv(’instance? from dual;
USERENV(’INSTANCE?
-------------------
1
LANGUAGE
q回当前环境变量
SQL> select userenv(’language? from dual;
USERENV(’LANGUAGE?
----------------------------------------------------
SIMPLIFIED CHINESE_CHINA.ZHS16GBK
LANG
q回当前环境的语a的羃?
SQL> select userenv(’lang? from dual;
USERENV(’LANG?
----------------------------------------------------
ZHS
TERMINAL
q回用户的终端或机器的标?
SQL> select userenv(’terminal? from dual;
USERENV(’TERMINA
----------------
GAO
VSIZE(X)
q回X的大?字节)?
SQL> select vsize(user),user from dual;
VSIZE(USER) USER
----------- ------------------------------
6 SYSTEM
60.AVG(DISTINCT|ALL)
all表示Ҏ有的值求q_?distinct只对不同的值求q_?
SQLWKS> create table table3(xm varchar(8),sal number(7,2));
语句已处理?
SQLWKS> insert into table3 values(’gao?1111.11);
SQLWKS> insert into table3 values(’gao?1111.11);
SQLWKS> insert into table3 values(’zhu?5555.55);
SQLWKS> commit;
SQL> select avg(distinct sal) from gao.table3;
AVG(DISTINCTSAL)
----------------
3333.33
SQL> select avg(all sal) from gao.table3;
AVG(ALLSAL)
-----------
2592.59

61.MAX(DISTINCT|ALL)
求最大?ALL表示Ҏ有的值求最大?DISTINCT表示对不同的值求最大?相同的只取一?
SQL> select max(distinct sal) from scott.emp;
MAX(DISTINCTSAL)
----------------
5000

62.MIN(DISTINCT|ALL)
求最?ALL表示Ҏ有的值求最?DISTINCT表示对不同的值求最?相同的只取一?
SQL> select min(all sal) from gao.table3;
MIN(ALLSAL)
-----------
1111.11

63.STDDEV(distinct|all)
求标准差,ALL表示Ҏ有的值求标准?DISTINCT表示只对不同的值求标准?
SQL> select stddev(sal) from scott.emp;
STDDEV(SAL)
-----------
1182.5032
SQL> select stddev(distinct sal) from scott.emp;
STDDEV(DISTINCTSAL)
-------------------
1229.951

64.VARIANCE(DISTINCT|ALL)
求协方差
SQL> select variance(sal) from scott.emp;
VARIANCE(SAL)
-------------
1398313.9

65.GROUP BY
主要用来对一l数q行l计
SQL> select deptno,count(*),sum(sal) from scott.emp group by deptno;
DEPTNO COUNT(*) SUM(SAL)
--------- --------- ---------
10 3 8750
20 5 10875
30 6 9400

66.HAVING
对分l统计再加限制条?
SQL> select deptno,count(*),sum(sal) from scott.emp group by deptno having count(*)>=5;
DEPTNO COUNT(*) SUM(SAL)
--------- --------- ---------
20 5 10875
30 6 9400
SQL> select deptno,count(*),sum(sal) from scott.emp having count(*)>=5 group by deptno ;
DEPTNO COUNT(*) SUM(SAL)
--------- --------- ---------
20 5 10875
30 6 9400

67.ORDER BY
用于Ҏ询到的结果进行排序输?
SQL> select deptno,ename,sal from scott.emp order by deptno,sal desc;
DEPTNO ENAME SAL
--------- ---------- ---------
10 KING 5000
10 CLARK 2450
10 MILLER 1300
20 SCOTT 3000
20 FORD 3000
20 JONES 2975
20 ADAMS 1100
20 SMITH 800
30 BLAKE 2850
30 ALLEN 1600
30 TURNER 1500
30 WARD 1250
30 MARTIN 1250
30 JAMES 950



]]>
SQL Server ?sql常用语句速查手册 http://www.tkk7.com/superwei/articles/98994.html辞?/dc:creator>辞?/author>Fri, 09 Feb 2007 05:29:00 GMThttp://www.tkk7.com/superwei/articles/98994.htmlhttp://www.tkk7.com/superwei/comments/98994.htmlhttp://www.tkk7.com/superwei/articles/98994.html#Feedback0http://www.tkk7.com/superwei/comments/commentRss/98994.htmlhttp://www.tkk7.com/superwei/services/trackbacks/98994.html

SQL语句先前写的时候,很容易把一些特D的用法忘记Q特此整理了一下SQL语句操作Q方便写SQL时方便一点!


一、基

1、说明:创徏数据?br />CREATE DATABASE database-name
2、说明:删除数据?br />drop database dbname
3、说明:备䆾sql server
--- 创徏 备䆾数据?device
USE master
EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat'
--- 开?备䆾
BACKUP DATABASE pubs TO testBack
4、说明:创徏新表
create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)
Ҏ已有的表创徏新表Q?
AQcreate table tab_new like tab_old (使用旧表创徏新表)
BQcreate table tab_new as select col1,col2?from tab_old definition only
5、说明:删除新表
drop table tabname
6、说明:增加一个列
Alter table tabname add column col type
注:列增加后不能删除。DB2中列加上后数据类型也不能改变Q唯一能改变的是增加varcharcd的长度?br />7、说明:d主键Q?Alter table tabname add primary key(col)
说明Q删除主键: Alter table tabname drop primary key(col)
8、说明:创徏索引Qcreate [unique] index idxname on tabname(col?)
删除索引Qdrop index idxname
注:索引是不可更改的Q想更改必须删除重新建?br />9、说明:创徏视图Qcreate view viewname as select statement
删除视图Qdrop view viewname
10、说明:几个单的基本的sql语句
选择Qselect * from table1 where 范围
插入Qinsert into table1(field1,field2) values(value1,value2)
删除Qdelete from table1 where 范围
更新Qupdate table1 set field1=value1 where 范围
查找Qselect * from table1 where field1 like ?value1%?---like的语法很_֦Q查资料!
排序Qselect * from table1 order by field1,field2 [desc]
LQselect count as totalcount from table1
求和Qselect sum(field1) as sumvalue from table1
q_Qselect avg(field1) as avgvalue from table1
最大:select max(field1) as maxvalue from table1
最:select min(field1) as minvalue from table1
11、说明:几个高查询q算?br />AQ?UNION q算W?
UNION q算W通过l合其他两个l果表(例如 TABLE1 ?TABLE2Qƈ消去表中M重复行而派生出一个结果表。当 ALL ?UNION 一起用时Q即 UNION ALLQ,不消除重复行。两U情况下Q派生表的每一行不是来?TABLE1 是来自 TABLE2?
BQ?EXCEPT q算W?
EXCEPT q算W通过包括所有在 TABLE1 中但不在 TABLE2 中的行ƈ消除所有重复行而派生出一个结果表。当 ALL ?EXCEPT 一起用时 (EXCEPT ALL)Q不消除重复行?
CQ?INTERSECT q算W?br />INTERSECT q算W通过只包?TABLE1 ?TABLE2 中都有的行ƈ消除所有重复行而派生出一个结果表。当 ALL ?INTERSECT 一起用时 (INTERSECT ALL)Q不消除重复行?
注:使用q算词的几个查询l果行必L一致的?
12、说明:使用外连?
A、left outer joinQ?
左外q接Q左q接Q:l果集几包括q接表的匚w行,也包括左q接表的所有行?
SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
BQright outer join:
叛_q接(双?Q结果集既包括连接表的匹配连接行Q也包括双接表的所有行?
CQfull outer joinQ?
全外q接Q不仅包括符可接表的匹配行Q还包括两个q接表中的所有记录?/p>

二、提?/p>

1、说明:复制?只复制结?源表名:a 新表名:b) (Access可用)
法一Qselect * into b from a where 1<>1
法二Qselect top 0 * into b from a
2、说明:拯?拯数据,源表名:a 目标表名Qb) (Access可用)
insert into b(a, b, c) select d,e,f from b;

3、说明:跨数据库之间表的拯(具体数据使用l对路径) (Access可用)
insert into b(a, b, c) select d,e,f from b in ‘具体数据库?where 条g
例子Q?.from b in '"&Server.MapPath(".")&"\data.mdb" &"' where..

4、说明:子查?表名1Qa 表名2Qb)
select a,b,c from a where a IN (select d from b ) 或? select a,b,c from a where a IN (1,2,3)

5、说明:昄文章、提交h和最后回复时?br />select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b

6、说明:外连接查?表名1Qa 表名2Qb)
select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c

7、说明:在线视图查询(表名1Qa )
select * from (SELECT a,b,c FROM a) T where t.a > 1;

8、说明:between的用?between限制查询数据范围时包括了边界?not between不包?br />select * from table1 where time between time1 and time2
select a,b,c, from table1 where a not between 数? and 数?

9、说明:in 的用方?br />select * from table1 where a [not] in (‘??’??’??’??

10、说明:两张兌表,删除主表中已l在副表中没有的信息
delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )

11、说明:四表联查问题Q?br />select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where .....

12、说明:日程安排提前五分钟提?
SQL: select * from 日程安排 where datediff('minute',f开始时?getdate())>5

13、说明:一条sql 语句搞定数据库分?br />select top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段

14、说明:?0条记?br />select top 10 * form table1 where 范围

15、说明:选择在每一lb值相同的数据中对应的a最大的记录的所有信?cMq样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成l排?{等.)
select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)

16、说明:包括所有在 TableA 中但不在 TableB和TableC 中的行ƈ消除所有重复行而派生出一个结果表
(select a from tableA ) except (select a from tableB) except (select a from tableC)

17、说明:随机取出10条数?br />select top 10 * from tablename order by newid()

18、说明:随机选择记录
select newid()

19、说明:删除重复记录
Delete from tablename where id not in (select max(id) from tablename group by col1,col2,...)

20、说明:列出数据库里所有的表名
select name from sysobjects where type='U'

21、说明:列出表里的所有的
select name from syscolumns where id=object_id('TableName')

22、说明:列示type、vender、pcs字段Q以type字段排列Qcase可以方便地实现多重选择Q类似select 中的case?br />select type,sum(case vender when 'A' then pcs else 0 end),sum(case vender when 'C' then pcs else 0 end),sum(case vender when 'B' then pcs else 0 end) FROM tablename group by type
昄l果Q?br />type vender pcs
电脑 A 1
电脑 A 1
光盘 B 2
光盘 A 2
手机 B 3
手机 C 3

23、说明:初始化表table1

TRUNCATE TABLE table1

24、说明:选择?0?5的记?br />select top 5 * from (select top 15 * from table order by id asc) table_别名 order by id desc

三、技?/p>

1?=1Q?=2的用,在SQL语句l合时用的较?/p>

“where 1=1?是表C选择全部   “where 1=2”全部不选,
如:
if @strWhere !=''
begin
set @strSQL = 'select count(*) as Total from [' + @tblName + '] where ' + @strWhere
end
else
begin
set @strSQL = 'select count(*) as Total from [' + @tblName + ']'
end

我们可以直接写成
set @strSQL = 'select count(*) as Total from [' + @tblName + '] where 1=1 安定 '+ @strWhere

2、收~数据库
--重徏索引
DBCC REINDEX
DBCC INDEXDEFRAG
--收羃数据和日?br />DBCC SHRINKDB
DBCC SHRINKFILE

3、压~数据库
dbcc shrinkdatabase(dbname)

4、{UL据库l新用户以已存在用户权限
exec sp_change_users_login 'update_one','newname','oldname'
go

5、检查备份集
RESTORE VERIFYONLY from disk='E:\dvbbs.bak'

6、修复数据库
ALTER DATABASE [dvbbs] SET SINGLE_USER
GO
DBCC CHECKDB('dvbbs',repair_allow_data_loss) WITH TABLOCK
GO
ALTER DATABASE [dvbbs] SET MULTI_USER
GO

7、日志清?br />SET NOCOUNT ON
DECLARE @LogicalFileName sysname,
        @MaxMinutes INT,
        @NewSize INT


USE     tablename             -- 要操作的数据库名
SELECT  @LogicalFileName = 'tablename_log',  -- 日志文g?br />@MaxMinutes = 10,               -- Limit on time allowed to wrap log.
        @NewSize = 1                  -- 你想讑֮的日志文件的大小(M)

-- Setup / initialize
DECLARE @OriginalSize int
SELECT @OriginalSize = size
  FROM sysfiles
  WHERE name = @LogicalFileName
SELECT 'Original Size of ' + db_name() + ' LOG is ' +
        CONVERT(VARCHAR(30),@OriginalSize) + ' 8K pages or ' +
        CONVERT(VARCHAR(30),(@OriginalSize*8/1024)) + 'MB'
  FROM sysfiles
  WHERE name = @LogicalFileName
CREATE TABLE DummyTrans
  (DummyColumn char (8000) not null)


DECLARE @Counter   INT,
        @StartTime DATETIME,
        @TruncLog  VARCHAR(255)
SELECT  @StartTime = GETDATE(),
        @TruncLog = 'BACKUP LOG ' + db_name() + ' WITH TRUNCATE_ONLY'

DBCC SHRINKFILE (@LogicalFileName, @NewSize)
EXEC (@TruncLog)
-- Wrap the log if necessary.
WHILE     @MaxMinutes > DATEDIFF (mi, @StartTime, GETDATE()) -- time has not expired
      AND @OriginalSize = (SELECT size FROM sysfiles WHERE name = @LogicalFileName) 
      AND (@OriginalSize * 8 /1024) > @NewSize 
  BEGIN -- Outer loop.
    SELECT @Counter = 0
    WHILE  ((@Counter < @OriginalSize / 16) AND (@Counter < 50000))
      BEGIN -- update
        INSERT DummyTrans VALUES ('Fill Log') 
        DELETE DummyTrans
        SELECT @Counter = @Counter + 1
      END  
    EXEC (@TruncLog) 
  END  
SELECT 'Final Size of ' + db_name() + ' LOG is ' +
        CONVERT(VARCHAR(30),size) + ' 8K pages or ' +
        CONVERT(VARCHAR(30),(size*8/1024)) + 'MB'
  FROM sysfiles
  WHERE name = @LogicalFileName
DROP TABLE DummyTrans
SET NOCOUNT OFF

8、说明:更改某个?br />exec sp_changeobjectowner 'tablename','dbo'

9、存储更改全部表

CREATE PROCEDURE dbo.User_ChangeObjectOwnerBatch
 @OldOwner as NVARCHAR(128),
 @NewOwner as NVARCHAR(128)
AS

DECLARE @Name   as NVARCHAR(128)
DECLARE @Owner  as NVARCHAR(128)
DECLARE @OwnerName  as NVARCHAR(128)

DECLARE curObject CURSOR FOR
 select 'Name'   = name,
  'Owner'   = user_name(uid)
 from sysobjects
 where user_name(uid)=@OldOwner
 order by name

OPEN  curObject
FETCH NEXT FROM curObject INTO @Name, @Owner
WHILE(@@FETCH_STATUS=0)
BEGIN    
 if @Owner=@OldOwner
 begin
  set @OwnerName = @OldOwner + '.' + rtrim(@Name)
  exec sp_changeobjectowner @OwnerName, @NewOwner
 end
-- select @name,@NewOwner,@OldOwner

 FETCH NEXT FROM curObject INTO @Name, @Owner
END

close curObject
deallocate curObject
GO


10、SQL SERVER中直接@环写入数?br />declare @i int
set @i=1
while @i<30
begin
   insert into test (userid) values(@i)
   set @i=@i+1
end



]]>
SQL的用规?/title><link>http://www.tkk7.com/superwei/articles/98989.html</link><dc:creator>辞?/dc:creator><author>辞?/author><pubDate>Fri, 09 Feb 2007 05:23:00 GMT</pubDate><guid>http://www.tkk7.com/superwei/articles/98989.html</guid><wfw:comment>http://www.tkk7.com/superwei/comments/98989.html</wfw:comment><comments>http://www.tkk7.com/superwei/articles/98989.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/superwei/comments/commentRss/98989.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/superwei/services/trackbacks/98989.html</trackback:ping><description><![CDATA[SQL的用规范: <br />i. 量避免大事务操作,慎用holdlock子句Q提高系lƈ发能力?<br /><br />ii. 量避免反复讉K同一张或几张表,其是数据量较大的表Q可以考虑先根据条件提取数据到临时表中Q然后再做连接?<br /><br />iii. 量避免使用游标Q因为游标的效率较差Q如果游标操作的数据过1万行Q那么就应该改写Q如果用了游标Q就要尽量避免在游标循环中再q行表连接的操作?<br /><br />iv. 注意where字句写法Q必考虑语句序Q应该根据烦引顺序、范围大来定条g子句的前后顺序,可能的让字D顺序与索引序怸_范围从大到小?<br /><br />v. 不要在where子句中的?”左边进行函数、算术运或其他表达式运,否则pȝ可能无法正用烦引?<br /><br />vi. 量使用exists代替select count(1)来判断是否存在记录,count函数只有在统计表中所有行数时使用Q而且count(1)比count(*)更有效率?<br /><br />vii. 量使用?gt;=”,不要使用?gt;”?<br /><br />viii. 注意一些or子句和union子句之间的替?<br /><br />ix. 注意表之间连接的数据cdQ避免不同类型数据之间的q接?<br /><br />x. 注意存储q程中参数和数据cd的关pR?<br /><br />xi. 注意insert、update操作的数据量Q防止与其他应用冲突。如果数据量过200个数据页面(400kQ,那么pȝ会q行锁升U,锁会升成表U锁?<br /><br />b) 索引的用规范: <br /><br />i. 索引的创与应用结合考虑Q徏议大的OLTP表不要超q?个烦引?<br /><br />ii. 可能的使用索引字段作ؓ查询条gQ尤其是聚簇索引Q必要时可以通过index index_name来强制指定烦?<br /><br />iii. 避免对大表查询时q行table scanQ必要时考虑新徏索引?<br /><br />iv. 在用烦引字D作为条件时Q如果该索引是联合烦引,那么必须使用到该索引中的W一个字D作为条件时才能保证pȝ使用该烦引,否则该烦引将不会被用?<br /><br />v. 要注意烦引的l护Q周期性重建烦引,重新~译存储q程?<br /><br />c) tempdb的用规范: <br /><br />i. 量避免使用distinct、order by、group by、having、join、cumputeQ因些语句会加重tempdb的负担?<br /><br />ii. 避免频繁创徏和删除时表Q减系l表资源的消耗?<br /><br />iii. 在新Z时表Ӟ如果一ơ性插入数据量很大Q那么可以用select into代替create tableQ避免logQ提高速度Q如果数据量不大Qؓ了缓和系l表的资源,先create tableQ然后insert?<br /><br />iv. 如果临时表的数据量较大,需要徏立烦引,那么应该创Z时表和徏立烦引的q程攑֜单独一个子存储q程中,q样才能保证pȝ能够很好的用到该时表的烦引?<br /><br />v. 如果使用C临时表,在存储过E的最后务必将所有的临时表显式删除,先truncate tableQ然后drop tableQ这样可以避免系l表的较长时间锁定?<br /><br />vi. 慎用大的临时表与其他大表的连接查询和修改Q减低系l表负担Q因U操作会在一条语句中多次使用tempdb的系l表?<br /><br />d) 合理的算法用: <br /><br />Ҏ上面已提到的SQL优化技术和ASE Tuning手册中的SQL优化内容,l合实际应用,采用多种法q行比较,以获得消耗资源最、效率最高的Ҏ。具体可用ASE调优命oQset statistics io on, set statistics time on , set showplan on {?img src ="http://www.tkk7.com/superwei/aggbug/98989.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/superwei/" target="_blank">辞?/a> 2007-02-09 13:23 <a href="http://www.tkk7.com/superwei/articles/98989.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> 四种联系(join)的区别及用法 http://www.tkk7.com/superwei/articles/98969.html辞?/dc:creator>辞?/author>Fri, 09 Feb 2007 04:00:00 GMThttp://www.tkk7.com/superwei/articles/98969.htmlhttp://www.tkk7.com/superwei/comments/98969.htmlhttp://www.tkk7.com/superwei/articles/98969.html#Feedback0http://www.tkk7.com/superwei/comments/commentRss/98969.htmlhttp://www.tkk7.com/superwei/services/trackbacks/98969.html
  • 链接Q?
  • 作ؓ动词Q它表示两个或多个表的内容l合在一起ƈ产生一个结果集Q该l果集对每个表的列和行进行合q。表的联接一般都使用它们共有的数据。例如,您可以对有一个共?pub_id 列的 titles 表和 publishers 表联接,产生一个包含书名信息和出版商信息的l果集?/p>

    作ؓ名词Q表C对表进行联接的q程或结果,如在术语"内部联接"中表C对表联接的一U特D的Ҏ?/p>

    • 联接条gQjoin conditionQ?

    一个比较子句,它指定了表是如何通过它们的联接字D늛联系的。最普通的联接条g是相{(一个等联接Q,在等联接中联接字D늚值必ȝ同。例如,您可以通过?titles 表和 publishers 表的 pub_id 列中查找相匹配的D接这两个表。然而,M比较q算W都可以是比较条件的一部分?/p>

    • 内部联接Qinner joinQ?

    一个联接,在该联接中只有当联接字段的值满x些特定的准则时才两个表的记录进行结合ƈdC个查询结果中。例如,在查询设计器视图中,表之间的~省联接是一个内部联接,它只有当联接字段的值相{时才从两个表中选择记录?/p>

    • 外部联接Qouter joinQ?

    一个联接,该联接还包括那些和联接表中记录不相关的记录。您可以创徏一个外部联接的三种变Ş来指定所包括的不匚w行:左外部联接、右外部联接和完全外部联接?/p>

    • 左外部联接(left outer joinQ?

    一U外部联接类型,在该联接中包括第一个命名表Q左边的表,它出现在 JOIN 子句的最左边Q的所有行。右边表中没有匹配的行不出现。例如,您可以在 titles 表和 publishers 表之间创Z个左外部联接Q以包括所有的书名Q不Z名有无出版商的信息?/p>

    • 叛_部联接(right outer joinQ?

    一U外部联接,在该联接中包括第二个命名表(双的表Q出现在 JOIN 子句中的最双Q的所有行。不包括左边表中没有匚w的行。例如,titles 表和 publishers 表之间的一个右外部联接包括所有的出版商,甚至包括那些?titles 表中没有书名的出版商?/p>

    以上是MSDN中对链接的定义。现在我们就从这四种链接所使用的不同方法来看他们的l果有什么不同?/p>

    titles 表sh(书号)		ph(出版商编?232342		0010432		00382478123	005

    publishers ?br />ph(出版商编? mc(出版商名U?
    001 U虎
    002 rmh
    003 hazl

    现要把这两个表的内容合成如下的表l构Q?/p>

    sh(书号)    ph(出版商编?        mc(出版商名U?

    现在看看采用四种链接Ҏ的结果会有什么不同。先说说他们的命令:

    内联接:
    sele titles.sh,publishers.ph,publishers.mc ;
      from titles inner join publishers ;    &&内联接中的inner是可以省略的
        on titles.ph=publishers.ph

    外联接:
    sele titles.sh,publishers.ph,publishers.mc ;
      from titles outer join publishers ;
        on titles.ph=publishers.ph

    左联接:
    sele titles.sh,publishers.ph,publishers.mc ;
      from titles left join publishers ;
        on titles.ph=publishers.ph

    双接:
    sele titles.sh,publishers.ph,publishers.mc ;
      from titles right join publishers ;
        on titles.ph=publishers.ph

    大家可能看到Q除了在join之前的那个关键字不同之外Q其他地Ҏ一模一LQ链接条?即on那一部分)也是一L。结果:

    内链接:

    232342		001	U虎0432		003	hazl

    全链接:

    232342		001	001	U虎Null		Null	002	rmh0432		003	003	hazl82478123	005	Null	Null

    左链接:

    232342		001	001	U虎0432		003	003	hazl82478123	005	Null	Null

    右链接:

    232342		001	001	U虎Null		Null	002	rmh0432		003	003	hazl

    所以我们很ҎCQ?/p>

    1、左链接Q就是以join的左辚w个表??Q以titles.ph=publishers.ph为判断标准,不管双的表有没有对应的记录Q都要把左边表的记录攑֜l果中去Q但双表没有相应的记录那应该放个什么数D去?{案是就放个NullQ表C没有。在左链接中Q某记录在右边表Q却不在左边表,那是不放q去l果ȝQ原因是左边表才??Q要不要攄它决定:它有的,׃定放q去Q它没有的,׃要了?/p>

    2、右链接Q和左链接一P只不qؓ"?的一方调q来了,换成是由双???/p>

    3、内链接Q和左、右链接不同Q它一定要左、右两边都有的记录才会放q结果,如果有某个记录不存在于Q何一边,那这个记录是不会出现在结果中ȝ?/p>

    4、外链接Q跟内联接相Q反Q相当于左、右链接的合qӞ不管什么情况,只要某个记录出现在这两个表,׃定会出现在结果中去,然后象左、右链接的处理方法一P用Null来填充没有对应值的字段?/p>

    注:以上说的"??没有"Q意思是以titles.ph=publishers.ph为判断标准来下决定的。比如当前titles表的ph?002"Q而在publishers中,没有一个记录的ph的值是"002"的,所以就?002"q个值在titles有,在publisher中没有,q样titles.ph?002"的记录就会被选中Q最后放在结果中厅R?/strong>

    大家如果想一下,q个on的作用跟where、havingg有点cMQ都是v到过滤的作用Q根据条仉取所取的记录Q而根据命令的工作程Q这个on是比where、having都要早执行的Q而它里面的条件表辑ּ又不一定是titles.ph=publishers.ph的Ş式,q可以l扩充,变成一个很复杂的条件表辑ּQ从而完成一个很有效的、where和having都不能实现的qo功能。具体的比较L on、where、having的区?/a> 一节?/p>

    刚才丄例子Q表中的ph都是没有重复的。现在以内联接ؓ例,举个判断字段中内Ҏ重复的例子:

    Temp1		temp2Aa		aa1		11		22		23		2
    sele temp1.aa,temp2.aa ;  from temp1 join temp2 ;    on temp1.aa=temp2.aa

    q行l果是:

    1	11	12	22	22	2

    很明显,有些记录重复了几遍。temp1.aa中的虽然只有1?Q但temp2.aa??Q所以结果就会有1Q?Q??了。如果temp1.aa??的话Q那l果׃?Q?Q??了?/p>

    知道了这一点,在做多表链接查询的时候很有用。你要考虑W一、二个链接后的结果跟W三个表链接Ӟ会不会出现这U情况?如果有,那是不是你想要的Q如果有Q那怎么处理Q有些朋友说做这个命令的l果中有些记录会比正的l果大几倍,p看看是不是出Cq种重复的情况?/p>

    学会了链接,在开始做之前Q先要说一个很重要的问题:在视图设计器来看多个表的联接关系Q它们之间的链接是用一条线q接h的,看v来就象一串糖葫芦。如果一个表同时和三个表联接Q那看v来就象一支分叉的树枝了,那这U情늻果就不对了。大家可能不明白我在说什么,我D个例子大家就会明白了?/p>

    有一个品表、一个进货明l表、一个出货明l表Q现在的要求是要求品表中所有的产品的进、出情况Q也是把三个表象join命o那样合成一个表Q如果没有相应的q、出记录Q也照样列出来但不计较null倹{刚开始学的朋友很可就会这样做Q?/p>

    1?在设计器里添加这三个表;

    2?然后用品表中的产品~号分别与其它二个表左链接,q样产品表中有二个链接(也就是二条线?Q?/p>

    3?然后把三个表的字D都做ؓ输出字段?/p>

    但结果呢Q不寏V只有一个表的记录出现在l果中,即把四U链接类型都试一下,l果都是不对的?/p>

    Z么呢Q我估计是以下原因:如果产品表只与进货表链接的话Q系l根据品表和进货表的联接关p,以品表为左表,和进货这个右表组成一个时结果,然后又以临时表ؓ左表Q再Lq货表的双表。而进货表的右Ҏ有表Q这时系l就停止链接Q交lwhere去过滤了。但现在产品表同时跟二个表左联接Q系l会自动选其中一个先q行链接Q链接结果出来后Q这个时结果的双没有表了,pȝ停止链接动作了。剩下的表、退货表都还没链接,所以那个表{于没用?/p>

    解决的方法是Q进货表用进货表的品编号全链接产品表,然后产品表又用品表的品编号全链接表,q、货表的序可以调过来,但品表一定要在中_且两个链接类型都是全链接Q否则结果都不对。这L链接情况Q在设计器里按链接中的各个表的左右顺序排hQ很直观的:是一Ԍ没有分叉。这个方法的实现q程是Q?/p>

    q货表全链接产品表,即某种产品没有q货Q但得出来的l果也一hq个记录Q只是它的进货内Ҏnull倹{然后这个时结果又跟出货表全链接,q次的结果就前一步差不多Q有内容的记录就有出货数量,否则是null倹{因为没有分叉,所以全部表都链接进MQ结果也对?当然如果链接cd错了Q结果也是不对的)?/p>

    看了刚才那个问题之后Q还有一个问题也要说一下。在刚才那个例子中,如果产品表中某个产品~号出现了重复,有N个记录的~号相同Q而在q货表里q个~号的记录也出现M个,q样一来,l果有点不同了。首先在q货表跟产品表的全链接结果里Q这个编号就会出现NQMơ,׃是一ơ了。然后这个时表再去跟出货表全链接时Q即使这个编号在表里出现一ơ,但在最后的链接l果中,q个~号q是会出现NQMơ,那它的出货记录也重复了NQMơ了。如果现在要sum()记录的话Q那数量׃攑֤了NQM倍了Q进货记录也不准了。所以如果品表中的~号有重复的话,那结果就很可能会不对了?/p>

    但品表的编h有重复,那结果就一定会正确呢?也未必。大家试一下,假设q货表和产品表的~号"001"都是只出Cơ,但出货表中就出现了二ơ。那最后的l果?001"q是出现了二ơ,二次的品名U、进货数量都是相同的Q只是出货数量不同而已。如果这时sum()Q结果还是不寏V?/p>

    所以如果想在多表链接后q行sum()之类的汇L作,使用以上的方法是不行的。解x法是使用unionQ用它来进货的汇L况跟的汇L况合hQ从而避免互相干扰?/p>

    另注Q?个表之间的连?/p>

    egQ    ?select a.* b.field1,c.field2 from table a left outer jion table b on a,field1=b.field1 left outer join table c on a.field2=c.field2



    ]]>
    SQL*PLUS命o的用大?http://www.tkk7.com/superwei/articles/98963.html辞?/dc:creator>辞?/author>Fri, 09 Feb 2007 03:42:00 GMThttp://www.tkk7.com/superwei/articles/98963.htmlhttp://www.tkk7.com/superwei/comments/98963.htmlhttp://www.tkk7.com/superwei/articles/98963.html#Feedback0http://www.tkk7.com/superwei/comments/commentRss/98963.htmlhttp://www.tkk7.com/superwei/services/trackbacks/98963.html   
           Oracle的sql*plus是与oracleq行交互的客L工具。在sql*plus中,可以q行sql*plus命o与sql*plus语句?
       我们通常所说的DML、DDL、DCL语句都是sql*plus语句Q它们执行完后,都可以保存在一个被UCؓsql buffer的内存区域中Qƈ且只能保存一条最q执行的sql语句Q我们可以对保存在sql buffer中的sql 语句q行修改Q然后再ơ执行,sql*plus一般都与数据库打交道?
       除了sql*plus语句Q在sql*plus中执行的其它语句我们UC为sql*plus命o。它们执行完后,不保存在sql buffer的内存区域中Q它们一般用来对输出的结果进行格式化昄Q以便于制作报表?
       下面׃l一下一些常用的sql*plus命oQ?
     
    1. 执行一个SQL脚本文g
    SQL>start file_name
    SQL>@ file_name
    我们可以多条sql语句保存在一个文本文件中Q这样当要执行这个文件中的所有的sql语句Ӟ用上面的M命o卛_Q这cM于dos中的批处理?

    @与@@的区别是什么?
    @{于start命oQ用来运行一个sql脚本文g?br />@命o调用当前目录下的Q或指定全\径,或可以通过SQLPATH环境变量搜寻到的脚本文g。该命o使用是一般要指定要执行的文g的全路径Q否则从~省路径(可用SQLPATH变量指定)下读取指定的文g?br />@@用在sql脚本文g中,用来说明用@@执行的sql脚本文g与@@所在的文g在同一目录下,而不用指定要执行sql脚本文g的全路径Q也不是从SQLPATH环境变量指定的\径中Lsql脚本文gQ该命o一般用在脚本文件中?br />如:在c:\temp目录下有文gstart.sql和nest_start.sqlQstart.sql脚本文g的内容ؓQ?br />@@nest_start.sql     - - 相当于@ c:\temp\nest_start.sql
    则我们在sql*plus中,q样执行Q?br />SQL> @ c:\temp\start.sql


    2. 对当前的输入q行~辑
    SQL>edit
     
    3. 重新q行上一ơ运行的sql语句
    SQL>/
     
    4. 显C的内容输出到指定文?
    SQL> SPOOL file_name
       在屏q上的所有内定w包含在该文g中,包括你输入的sql语句?
     
    5. 关闭spool输出
    SQL> SPOOL OFF
       只有关闭spool输出Q才会在输出文g中看到输出的内容?
     
    6Q显CZ个表的结?
    SQL> desc table_name
     
    7. COL命oQ?
    主要格式化列的显CŞ式?
    该命令有许多选项Q具体如下:
    COL[UMN] [{ column|expr} [ option ...]]
    Option选项可以是如下的子句:
    ALI[AS] alias
    CLE[AR]
    FOLD_A[FTER]
    FOLD_B[EFORE]
    FOR[MAT] format
    HEA[DING] text
    JUS[TIFY] {L[EFT]|C[ENTER]|C[ENTRE]|R[IGHT]}
    LIKE { expr|alias}
    NEWL[INE]
    NEW_V[ALUE] variable
    NOPRI[NT]|PRI[NT]
    NUL[L] text
    OLD_V[ALUE] variable
    ON|OFF
    WRA[PPED]|WOR[D_WRAPPED]|TRU[NCATED]
     
    1). 改变~省的列标题
    COLUMN column_name HEADING column_heading
    For example:
    Sql>select * from dept;
         DEPTNO DNAME                        LOC
    ---------- ---------------------------- ---------
             10 ACCOUNTING                   NEW YORK
    sql>col  LOC heading location
    sql>select * from dept;
        DEPTNO DNAME                        location
    --------- ---------------------------- -----------
            10 ACCOUNTING                   NEW YORK
     
    2). 列名ENAME改ؓ新列名EMPLOYEE NAMEq将新列名放在两行上Q?
    Sql>select * from emp
    Department  name           Salary
    ---------- ---------- ----------
             10 aaa                11        
    SQL> COLUMN ENAME HEADING ’Employee|Name?
    Sql>select * from emp
                Employee
    Department  name           Salary
    ---------- ---------- ---------- 
             10 aaa                11
    note: the col heading turn into two lines from one line.
     
    3). 改变列的昄长度Q?
    FOR[MAT] format
    Sql>select empno,ename,job from emp;
          EMPNO ENAME      JOB       
    ---------- ----------     ---------
           7369 SMITH      CLERK     
           7499 ALLEN      SALESMAN  
    7521 WARD       SALESMAN  
    Sql> col ename format a40
          EMPNO ENAME                                    JOB
    ----------   ----------------------------------------         ---------
           7369 SMITH                                    CLERK
           7499 ALLEN                                    SALESMAN
           7521 WARD                                    SALESMAN
     
    4). 讄列标题的寚w方式
    JUS[TIFY] {L[EFT]|C[ENTER]|C[ENTRE]|R[IGHT]}
    SQL> col ename justify center
    SQL> /
          EMPNO           ENAME                   JOB
    ----------   ----------------------------------------       ---------
           7369 SMITH                                    CLERK
           7499 ALLEN                                    SALESMAN
    7521 WARD                                     SALESMAN
    对于NUMBER型的列,列标题缺省在双Q其它类型的列标题缺省在左边
     
    5). 不让一个列昄在屏q上
    NOPRI[NT]|PRI[NT]
    SQL> col job noprint
    SQL> /
          EMPNO           ENAME
    ----------     ----------------------------------------
           7369 SMITH
           7499 ALLEN
    7521 WARD
     
    6). 格式化NUMBERcd列的昄Q?
    SQL> COLUMN SAL FORMAT $99,990
    SQL> /
    Employee
    Department Name        Salary    Commission
    ---------- ---------- --------- ----------
    30          ALLEN        $1,600    300
     
    7). 昄列值时Q如果列gؓNULL|用textg替NULL?
    COMM NUL[L] text
    SQL>COL COMM NUL[L] text
     
    8). 讄一个列的回l方?
    WRA[PPED]|WOR[D_WRAPPED]|TRU[NCATED]
            COL1
    --------------------
    HOW ARE YOU?
     
    SQL>COL COL1 FORMAT A5
    SQL>COL COL1 WRAPPED
    COL1
    -----
    HOW A
    RE YO
    U?
     
    SQL> COL COL1 WORD_WRAPPED
    COL1
    -----
    HOW
    ARE
    YOU?
     
    SQL> COL COL1 WORD_WRAPPED
    COL1
    -----
    HOW A
     
    9). 昄列的当前的显C属性?
    SQL> COLUMN column_name
     
    10). 所有列的显C属性设为缺省?
    SQL> CLEAR COLUMNS
     
    8. 屏蔽掉一个列中显C的相同的?
    BREAK ON break_column
    SQL> BREAK ON DEPTNO
    SQL> SELECT DEPTNO, ENAME, SAL
    FROM EMP
      WHERE SAL &lt; 2500
      ORDER BY DEPTNO;
    DEPTNO      ENAME         SAL
    ---------- ----------- ---------
    10           CLARK        2450
    MILLER      1300
    20            SMITH       800
    ADAMS       1100
     
    9. 在上面屏蔽掉一个列中显C的相同的值的昄中,每当列值变化时在值变化之前插入n个空行?
    BREAK ON break_column SKIP n
     
    SQL> BREAK ON DEPTNO SKIP 1
    SQL> /
    DEPTNO ENAME SAL
    ---------- ----------- ---------
    10 CLARK 2450
    MILLER 1300
     
    20 SMITH 800
    ADAMS 1100
     
    10. 昄对BREAK的设|?
    SQL> BREAK
     
    11. 删除6?的设|?
    SQL> CLEAR BREAKS
     
    12. Set 命oQ?
    该命令包含许多子命oQ?
    SET system_variable value
    system_variable value 可以是如下的子句之一Q?
    APPI[NFO]{ON|OFF|text}
    ARRAY[SIZE] {15|n}
    AUTO[COMMIT]{ON|OFF|IMM[EDIATE]|n}
    AUTOP[RINT] {ON|OFF}
    AUTORECOVERY [ON|OFF]
    AUTOT[RACE] {ON|OFF|TRACE[ONLY]} [EXP[LAIN]] [STAT[ISTICS]]
    BLO[CKTERMINATOR] {.|c}
    CMDS[EP] {;|c|ON|OFF}
    COLSEP {_|text}
    COM[PATIBILITY]{V7|V8|NATIVE}
    CON[CAT] {.|c|ON|OFF}
    COPYC[OMMIT] {0|n}
    COPYTYPECHECK {ON|OFF}
    DEF[INE] {&|c|ON|OFF}
    DESCRIBE [DEPTH {1|n|ALL}][LINENUM {ON|OFF}][INDENT {ON|OFF}]
    ECHO {ON|OFF}
    EDITF[ILE] file_name[.ext]
    EMB[EDDED] {ON|OFF}
    ESC[APE] {\|c|ON|OFF}
    FEED[BACK] {6|n|ON|OFF}
    FLAGGER {OFF|ENTRY |INTERMED[IATE]|FULL}
    FLU[SH] {ON|OFF}
    HEA[DING] {ON|OFF}
    HEADS[EP] {||c|ON|OFF}
    INSTANCE [instance_path|LOCAL]
    LIN[ESIZE] {80|n}
    LOBOF[FSET] {n|1}
    LOGSOURCE [pathname]
    LONG {80|n}
    LONGC[HUNKSIZE] {80|n}
    MARK[UP] HTML [ON|OFF] [HEAD text] [BODY text] [ENTMAP {ON|OFF}] [SPOOL
    {ON|OFF}] [PRE[FORMAT] {ON|OFF}]
    NEWP[AGE] {1|n|NONE}
    NULL text
    NUMF[ORMAT] format
    NUM[WIDTH] {10|n}
    PAGES[IZE] {24|n}
    PAU[SE] {ON|OFF|text}
    RECSEP {WR[APPED]|EA[CH]|OFF}
    RECSEPCHAR {_|c}
    SERVEROUT[PUT] {ON|OFF} [SIZE n] [FOR[MAT] {WRA[PPED]|WOR[D_
    WRAPPED]|TRU[NCATED]}]
    SHIFT[INOUT] {VIS[IBLE]|INV[ISIBLE]}
    SHOW[MODE] {ON|OFF}
    SQLBL[ANKLINES] {ON|OFF}
    SQLC[ASE] {MIX[ED]|LO[WER]|UP[PER]}
    SQLCO[NTINUE] {> |text}
    SQLN[UMBER] {ON|OFF}
    SQLPRE[FIX] {#|c}
    SQLP[ROMPT] {SQL>|text}
    SQLT[ERMINATOR] {;|c|ON|OFF}
    SUF[FIX] {SQL|text}
    TAB {ON|OFF}
    TERM[OUT] {ON|OFF}
    TI[ME] {ON|OFF}
    TIMI[NG] {ON|OFF}
    TRIM[OUT] {ON|OFF}
    TRIMS[POOL] {ON|OFF}
    UND[ERLINE] {-|c|ON|OFF}
    VER[IFY] {ON|OFF}
    WRA[P] {ON|OFF}
     
    1). 讄当前session是否对修改的数据q行自动提交
    SQL>SET AUTO[COMMIT] {ON|OFF|IMM[EDIATE]| n}
     
    2)Q在用start命o执行一个sql脚本Ӟ是否昄脚本中正在执行的SQL语句
    SQL> SET ECHO {ON|OFF}
     
    3).是否昄当前sql语句查询或修改的行数
    SQL> SET FEED[BACK] {6|n|ON|OFF}
       默认只有l果大于6行时才显C结果的行数。如果set feedback 1 Q则不管查询到多行都返回。当为off Ӟ一律不昄查询的行?
     
    4).是否昄列标?
    SQL> SET HEA[DING] {ON|OFF}
    当set heading off Ӟ在每늚上面不显C列标题Q而是以空白行代替
     
    5).讄一行可以容U的字符?
    SQL> SET LIN[ESIZE] {80|n}
       如果一行的输出内容大于讄的一行可容纳的字W数Q则折行昄?
     
    6).讄与之间的分隔
    SQL> SET NEWP[AGE] {1|n|NONE}
    当set newpage 0 Ӟ会在每页的开头有一个小的黑Ҏ?
    当set newpage n Ӟ会在和之间隔着n个空行?
    当set newpage none Ӟ会在和之间没有Q何间隔?
     
    7).昄Ӟ用textg替NULL?
    SQL> SET NULL text
     
    8).讄一|多少行数
    SQL> SET PAGES[IZE] {24|n}
    如果设ؓ0Q则所有的输出内容Zƈ且不昄列标?
     
    9).是否昄用DBMS_OUTPUT.PUT_LINE包进行输出的信息?
    SQL> SET SERVEROUT[PUT] {ON|OFF} 
    在编写存储过E时Q我们有时会用dbms_output.put_line必要的信息输出Q以便对存储q程q行调试Q只有将serveroutput变量设ؓon后,信息才能昄在屏q上?
     
    10).当SQL语句的长度大于LINESIZEӞ是否在显C时截取SQL语句?
    SQL> SET WRA[P] {ON|OFF}
       当输出的行的长度大于讄的行的长度时Q用set linesize n命o讄Q,当set wrap onӞ输出行的多于的字W会另v一行显C,否则Q会输的多于字W切除,不予昄?
     
    11).是否在屏q上昄输出的内容,主要用与SPOOLl合使用?
    SQL> SET TERM[OUT] {ON|OFF}
       在用spool命o一个大表中的内容输出到一个文件中Ӟ内容输出在屏幕上会耗费大量的时_讄set termspool off后,则输出的内容只会保存在输出文件中Q不会显C在屏幕上,极大的提高了spool的速度?
     
    12).SPOOL输出中每行后面多余的I格L
    SQL> SET TRIMS[OUT] {ON|OFF} 
       
    13)昄每个sql语句p的执行时?
    set TIMING  {ON|OFF}

    14). 遇到I时不认ؓ语句已经l束Q从后箋行接着d?br />SET SQLBLANKLINES ON
    Sql*plus? 不允许sql语句中间有空? q在从其它地Ҏ贝脚本到sql*plus中执行时很麻? 比如下面的脚?
    select deptno, empno, ename
    from emp

    where empno = '7788';
    如果拯到sql*plus中执? ׃出现错误。这个命令可以解册问题

    15).讄DBMS_OUTPUT的输?br />SET SERVEROUTPUT ON BUFFER 20000
    用dbms_output.put_line('strin_content');可以在存储过E中输出信息Q对存储q程q行调试
    如果惌dbms_output.put_line('     abc');的输出显CZؓQ?br />SQL>     abcQ而不是SQL>abcQ则在SET SERVEROUTPUT ON后加format wrapped参数?/p>

    16). 输出的数据ؓhtml格式
    set markup html
    ?.1.7版本(也许?16? 不太定)以后, sql*plus中有一个set markup html的命? 可以sql*plus的输Zhtml格式展现.
    注意其中的spool on, 当在屏幕上输出的时? 我们看不Z不加spool on有什么区? 但是当我们用spool filename 输出到文件的时? 会看到spool文g中出C{tag.


    14Q修改sql buffer中的当前行中Q第一个出现的字符?
    C[HANGE] /old_value/new_value
    SQL> l
       1* select * from dept
    SQL> c/dept/emp
       1* select * from emp
     
    15Q编辑sql buffer中的sql语句
    EDI[T]
     
    16Q显Csql buffer中的sql语句Qlist n昄sql buffer中的Wn行,qɽWn行成为当前行
    L[IST] [n]
     
    17Q在sql buffer的当前行下面加一行或多行
    I[NPUT]
     
    18Q将指定的文本加到sql buffer的当前行后面
    A[PPEND]
    SQL> select deptno,
       2  dname
       3  from dept;
         DEPTNO DNAME
    ---------- --------------
             10 ACCOUNTING
             20 RESEARCH
             30 SALES
             40 OPERATIONS
     
    SQL> L 2
       2* dname
    SQL> a ,loc
       2* dname,loc
    SQL> L
       1  select deptno,
       2  dname,loc
       3* from dept
    SQL> /
     
         DEPTNO DNAME          LOC
    ---------- -------------- -------------
             10 ACCOUNTING     NEW YORK
             20 RESEARCH       DALLAS
             30 SALES          CHICAGO
             40 OPERATIONS     BOSTON
     
    19Q将sql buffer中的sql语句保存C个文件中
    SAVE file_name
     
    20Q将一个文件中的sql语句导入到sql buffer?
    GET file_name
     
    21Q再ơ执行刚才已l执行的sql语句
    RUN
    or
    /
     
    22Q执行一个存储过E?
    EXECUTE procedure_name
     
    23Q在sql*plus中连接到指定的数据库
    CONNECT user_name/passwd@db_alias
     
    24Q设|每个报表的剙标题
    TTITLE
     
    25Q设|每个报表的N标题
    BTITLE
     
    26Q写一个注?
    REMARK [text]
     
    27Q将指定的信息或一个空行输出到屏幕?
    PROMPT [text]
     
    28Q将执行的过E暂停,{待用户响应后l执?
    PAUSE [text]
     
    Sql>PAUSE Adjust paper and press RETURN to continue.
     
    29Q将一个数据库中的一些数据拷贝到另外一个数据库Q如一个表的数据拷贝到另一个数据库Q?
    COPY {FROM database | TO database | FROM database TO database}
    {APPEND|CREATE|INSERT|REPLACE} destination_table
    [(column, column, column, ...)] USING query
     
    sql>COPY FROM SCOTT/TIGER@HQ TO JOHN/CHROME@WEST 
    create emp_temp
    USING SELECT * FROM EMP
     
    30Q不退出sql*plusQ在sql*plus中执行一个操作系l命令:
    HOST
     
    Sql> host hostname
    该命令在windows下可能被支持?
     
    31Q在sql*plus中,切换到操作系l命令提C符下,q行操作pȝ命o后,可以再次切换回sql*plusQ?
    !
     
    sql>!
    $hostname
    $exit
    sql>
     
    该命令在windows下不被支持?
     
    32Q显Csql*plus命o的帮?
    HELP
    如何安装帮助文gQ?
    Sql>@ ?\sqlplus\admin\help\hlpbld.sql ?\sqlplus\admin\help\helpus.sql
    Sql>help index
     
    33Q显Csql*pluspȝ变量的值或sql*plus环境变量的?
    Syntax
    SHO[W] option
    where option represents one of the following terms or clauses:
    system_variable
    ALL
    BTI[TLE]
    ERR[ORS] [{FUNCTION|PROCEDURE|PACKAGE|PACKAGE BODY|
    TRIGGER|VIEW|TYPE|TYPE BODY} [schema.]name]
    LNO
    PARAMETERS [parameter_name]
    PNO
    REL[EASE]
    REPF[OOTER]
    REPH[EADER]
    SGA
    SPOO[L]
    SQLCODE
    TTI[TLE]
    USER
     
    1) . 昄当前环境变量的|
    Show all
     
    2) . 昄当前在创建函数、存储过E、触发器、包{对象的错误信息
    Show error
    当创Z个函数、存储过E等出错Ӟ变可以用该命令查看在那个地方出错及相应的出错信息Q进行修改后再次q行~译?
     
    3) . 昄初始化参数的|
    show PARAMETERS [parameter_name]
     
    4) . 昄数据库的版本Q?
    show REL[EASE]
     
    5) . 昄SGA的大?
    show SGA
     
    6). 昄当前的用户名
    show user

    34.查询一个用户下的对?br />SQL>select * from tab;
    SQL>select * from user_objects;

    35.查询一个用户下的所有的?br />SQL>select * from user_tables;

    36.查询一个用户下的所有的索引
    SQL>select * from user_indexes;


    37. 定义一个用户变?br />Ҏ有两个:
    a. define
    b. COL[UMN] [{column|expr} NEW_V[ALUE] variable [NOPRI[NT]|PRI[NT]]
                                OLD_V[ALUE] variable  [NOPRI[NT]|PRI[NT]]

    下面ҎU方式给予解释:
    a. Syntax
    DEF[INE] [variable]|[variable = text]
    定义一个用户变量ƈ且可以分配给它一个CHAR倹{?/p>

    assign the value MANAGER to the variable POS, type:
    SQL> DEFINE POS = MANAGER

    assign the CHAR value 20 to the variable DEPTNO, type:
    SQL> DEFINE DEPTNO = 20

    list the definition of DEPTNO, enter
    SQL> DEFINE DEPTNO
            ――――――――――――――?br />DEFINE DEPTNO = ?0?(CHAR)

    定义了用户变量POS后,可以在sql*plus中用&POS?amp;&POS来引用该变量的|sql*plus不会再提CZl变量输入倹{?/p>

    b. COL[UMN] [{column|expr} NEW_V[ALUE] variable [NOPRI[NT]|PRI[NT]]
    NEW_V[ALUE] variable
    指定一个变量容Ux询出的列倹{?br />?column col_name new_value var_name noprint
       select col_name from table_name where …?.
    下面查询出的col_name列的Dlvar_name变量.

    一个综合的例子:
    得到一个列值的两次查询之差(此例?0U之内共提交了多事?:
    column redo_writes new_value commit_count

    select sum(stat.value) redo_writes
    from v$sesstat stat, v$statname sn
    where stat.statistic# = sn.statistic#
    and sn.name = 'user commits';

    -- {待一会儿(此处?0U?;
    execute dbms_lock.sleep(10);

    set veri off
    select sum(stat.value) - &commit_count commits_added
    from v$sesstat stat, v$statname sn
    where stat.statistic# = sn.statistic#
    and sn.name = 'user commits';


    38. 定义一个绑定变?br />VAR[IABLE] [variable [NUMBER|CHAR|CHAR (n)|NCHAR|NCHAR (n) |VARCHAR2 (n)|NVARCHAR2 (n)|CLOB|NCLOB|REFCURSOR]]
    定义一个绑定变量,该变量可以在pl/sql中引用?br />可以用print命o昄该绑定变量的信息?br />如:
    column inst_num  heading "Inst Num"  new_value inst_num  format 99999;
    column inst_name heading "Instance"  new_value inst_name format a12;
    column db_name   heading "DB Name"   new_value db_name   format a12;
    column dbid      heading "DB Id"     new_value dbid      format 9999999999 just c;

    prompt
    prompt Current Instance
    prompt ~~~~~~~~~~~~~~~~

    select d.dbid            dbid
         , d.name            db_name
         , i.instance_number inst_num
         , i.instance_name   inst_name
      from v$database d,
           v$instance i;

    variable dbid       number;
    variable inst_num   number;
    begin
      :dbid      :=  &dbid;
      :inst_num  :=  &inst_num;
    end;
    /
    说明Q?br />在sql*plus中,该绑定变量可以作Z个存储过E的参数Q也可以在匿名PL/SQL块中直接引用。ؓ了显C用VARIABLE命o创徏的绑定变量的|可以用print命o

    注意Q?br />l定变量不同于变量:
    1Q      ?定义Ҏ不同
    2Q      ?引用Ҏ不同
    l定变量Q?variable_name
            变量Q?amp;variable_name or &&variable_name
    3.在sql*plus中,可以定义同名的绑定变量与用户变量Q但是引用的Ҏ不同?/p>

    39. &?amp;&的区?br />&用来创徏一个时变量,每当遇到q个临时变量Ӟ都会提示你输入一个倹{?br />&&用来创徏一个持久变量,像用用define命o或带new_vlaue字句的column命o创徏的持久变量一栗当?amp;&命o引用q个变量Ӟ不会每次遇到该变量就提示用户键入|而只是在W一ơ遇到时提示一ơ?/p>

    如,下面三行语句存Z个脚本文Ӟq行该脚本文Ӟ会提CZơ,让输入deptnoval的|
    select count(*) from emp where deptno = &deptnoval;
    select count(*) from emp where deptno = &deptnoval;
    select count(*) from emp where deptno = &deptnoval;

    下面三行语句存Z个脚本文Ӟq行该脚本文Ӟ则只会提CZơ,让输入deptnoval的|
    select count(*) from emp where deptno = &&deptnoval;
    select count(*) from emp where deptno = &&deptnoval;
    select count(*) from emp where deptno = &&deptnoval;

    40Q在输入sql语句的过E中临时先运行一个sql*plus命o(摘自http://www.itpub.com/)
    #
    有没有过q样的经? 在sql*plus中敲了很长的命o? H然发现想不h个列的名字了, 如果取消当前的命?待查询后再重? 那太痛苦? 当然你可以另开一个sql*plusH口q行查询, 但这里提供的Ҏ更简?

    比如? 你想查工资大?000的员工的信息, 输入了下面的语句:

    SQL> select deptno, empno, ename
    2 from emp
    3 where
    q时, 你发C想不h工资的列名是什么了.

    q种情况? 只要在下一行以#开? 可以执行一条sql*plus命o, 执行完后, 刚才的语句可以l输?/p>

    SQL>> select deptno, empno, ename
    2 from emp
    3 where
    6 #desc emp
    Name Null? Type
    ----------------------------------------- -------- --------------
    EMPNO NOT NULL NUMBER(4)
    ENAME VARCHAR2(10)
    JOB VARCHAR2(9)
    MGR NUMBER(4)
    HIREDATE DATE
    SAL NUMBER(7,2)
    COMM NUMBER(7,2)
    DEPTNO NUMBER(2)

    6 sal > 4000;

    DEPTNO EMPNO ENAME
    ---------- ---------- ----------
    10 7839 KING

    41. SQLPlus中的快速复制和_脓技?摘自http://www.cnoug.org/)
    1) 鼠标U至惌复制内容的开?
    2) 用右手食指按下鼠标左?
    3) 向想要复制内容的另一角拖动鼠标,与Word中选取内容的方法一?
    4) 内容选取完毕后(所选内容全部反显)Q鼠标左键按住不动,用右手中指按鼠标右键
    5) q时Q所选内容会自动复制到SQL*Plus环境的最后一?/p>



    ]]>
    oracle cursor 游标(转蝲)http://www.tkk7.com/superwei/articles/98821.html辞?/dc:creator>辞?/author>Thu, 08 Feb 2007 09:19:00 GMThttp://www.tkk7.com/superwei/articles/98821.htmlhttp://www.tkk7.com/superwei/comments/98821.htmlhttp://www.tkk7.com/superwei/articles/98821.html#Feedback0http://www.tkk7.com/superwei/comments/commentRss/98821.htmlhttp://www.tkk7.com/superwei/services/trackbacks/98821.html 

    游标 Q?span>

    用来查询数据库,获取记录集合Q结果集Q的指针Q可以让开发者一ơ访问一行结果集Q在每条l果集上作操作?span>


    分类 Q?/span>

    静态游标:
    分ؓ昑ּ游标和隐式游标?/span>

    REF游标Q?br />是一U引用类型,cM于指针?/span>

     

    昑ּ游标 Q?span>

     CURSOR 游标名? 参数 ) [q回值类型] IS
      Select 语句


    生命周期Q?/span>

    1.打开游标(OPEN)
    解析Q绑定。。。不会从数据库检索数?/span>

    2.从游标中获取记录(FETCH INTO)
    执行查询Q返回结果集。通常定义局域变量作Z游标获取数据的缓冲区?/span>

    3.关闭游标(CLOSE)
    完成游标处理Q用户不能从游标中获取行。还可以重新打开?/span>


    选项Q参数和q回cd


    set serveroutput on
    declare
     cursor emp_cur ( p_deptid in number) is 
    select * from employees where department_id = p_deptid;

    l_emp employees%rowtype;
    begin
     dbms_output.put_line('Getting employees from department 30');
    open emp_cur(30);
     loop
      fetch emp_cur into l_emp;
      exit when emp_cur%notfound;
      dbms_output.put_line('Employee id '|| l_emp.employee_id || ' is ');
      dbms_output.put_line(l_emp.first_name || ' ' || l_emp.last_name);
     end loop;
     close emp_cur;

     dbms_output.put_line('Getting employees from department 90');
    open emp_cur(90);
     loop
      fetch emp_cur into l_emp;
      exit when emp_cur%notfound;
      dbms_output.put_line('Employee id '|| l_emp.employee_id || ' is ');
      dbms_output.put_line(l_emp.first_name || ' ' || l_emp.last_name);
     end loop;
     close emp_cur;
    end;
    /

     

    隐式游标 Q?span>

    不用明确建立游标变量Q分两种Q?span>
    1.在PL/SQL中用DML语言Q用ORACLE提供的名为SQL的隐C游?br />2.CURSOR FOR LOOPQ用于for loop 语句


    1举例Q?/span>

    declare
    begin
     update departments set department_name=department_name;
     --where 1=2;
     
     dbms_output.put_line('update '|| sql%rowcount ||' records');
    end;
    /


    2举例Q?/span>

    declare
    begin
     for my_dept_rec in ( select department_name, department_id from departments)
     loop
      dbms_output.put_line(my_dept_rec.department_id || ' : ' || my_dept_rec.department_name);
     end loop;
    end;
    /


    3举例Q?/span>

    单独select 

    declare
     l_empno emp.EMPLOYEE_ID%type;
    -- l_ename emp.ename%type;
    begin
     select EMPLOYEE_ID    
      into l_empno
     from emp;
     --where rownum =1;
     dbms_output.put_line(l_empno);
    end;
    /
    使用INTO获取|只能q回一行?/span>

     

    游标属?/span> Q?span>

    %FOUNDQ变量最后从游标中获取记录的时候,在结果集中找C记录?br />%NOTFOUNDQ变量最后从游标中获取记录的时候,在结果集中没有找到记录?br />%ROWCOUNTQ当前时dl从游标中获取的记录数量?br />%ISOPENQ是否打开?/span>


    Declare
     Cursor emps is
     Select * from employees where rownum<6 order by 1;
     
     Emp employees%rowtype;
     Row number :=1;
    Begin
     Open emps;
     Fetch emps into emp;
     
     Loop
      If emps%found then
       Dbms_output.put_line('Looping over record '||row|| ' of ' || emps%rowcount);
       Fetch emps into emp;
       Row := row + 1;
      Elsif emps%notfound then
       Exit;  ---exit loop, not IF
      End if;
     End loop;
     
     If emps%isopen then
      Close emps;
     End if;
    End;
    /

     

    昑ּ和隐式游标的区别 Q?span>

    量使用隐式游标Q避免编写附加的游标控制代码Q声明,打开Q获取,关闭Q,也不需要声明变量来保存从游标中获取的数据?span>

     

    REF CURSOR游标 Q?span>

    动态游标,在运行的时候才能确定游标用的查询。分c:
    强类型(限制QREF CURSORQ规定返回类型?br />q型(非限ӞREF CURSORQ不规定q回cdQ可以获取Q何结果集?/span>


    TYPE ref_cursor_name IS REF CURSOR [RETURN return_type]


    Declare
     Type refcur_t is ref cursor;
     
     Type emp_refcur_t is ref cursor return employee%rowtype;
    Begin
     Null;
    End;
    /


    强类型D例:

    declare
     --声明记录cd
     type emp_job_rec is record(
      employee_id number,
      employee_name varchar2(50),
      job_title varchar2(30)
     );
     --声明REF CURSORQ返回gؓ该记录类?br /> type emp_job_refcur_type is ref cursor
      return emp_job_rec;
     --定义REF CURSOR游标的变?br /> emp_refcur emp_job_refcur_type;

     emp_job emp_job_rec;
    begin
     open emp_refcur for
      select e.employee_id,
        e.first_name || ' ' ||e.last_name "employee_name",
        j.job_title
      from employees e, jobs j
      where e.job_id = j.job_id and rownum < 11 order by 1;

     fetch emp_refcur into emp_job;
     while emp_refcur%found loop
      dbms_output.put_line(emp_job.employee_name || '''s job is ');
      dbms_output.put_line(emp_job.job_title);
      fetch emp_refcur into emp_job;
     end loop;
    end;



    ]]>
    վ֩ģ壺 þþ뾫Ʒպ| ഺɫУ԰С˵| ձ뿨23| ŮһëƬѹۿ| ƷƵ| Ʒѹۿþþ | avվѹۿ| һۿ| ɬɬɫۺ| ٸԼA| ɬɬƵ| ޹Ʒþ66| պһѲ| 99߾Ʒѹۿ| ߹ۿ| ޺ݺɫۺ| ϺƷAV߲| ëƬַ߹ۿĻ| ѵӰվ| ڵƵ߹ۿ | ˳Ƶۿ| լ666ѹۿ| 91޹˾Ʒ| žȾþƵ| ûվɫƵѹۿ| ۺϾþۺϼþ| ƷѾþþþþþþ | ޶Ʒav| AVպAAVӰ| Ļ벥| þþƷavĻ| һAVѲ| Ƶ88| ޳˸վ| aѹۿþav| ˳ɵӰվƷ| ޱavӲʵ| 99þþƷձһ| AVô뾫Ʒ| VƬ߲| 69˾ƷƵ|