??xml version="1.0" encoding="utf-8" standalone="yes"?>一级做a爰片久久毛片免费陪,三级三级久久三级久久,久久国产精品波多野结衣AV http://www.shnenglu.com/threesh/category/2974.htmlzh-cnTue, 27 May 2008 16:26:35 GMTTue, 27 May 2008 16:26:35 GMT60PL/SQL单行函数和组函数详解http://www.shnenglu.com/threesh/archive/2007/03/26/20595.htmlCpp FansCpp FansMon, 26 Mar 2007 03:04:00 GMThttp://www.shnenglu.com/threesh/archive/2007/03/26/20595.htmlhttp://www.shnenglu.com/threesh/comments/20595.htmlhttp://www.shnenglu.com/threesh/archive/2007/03/26/20595.html#Feedback0http://www.shnenglu.com/threesh/comments/commentRss/20595.htmlhttp://www.shnenglu.com/threesh/services/trackbacks/20595.html

 函数是一U有零个或多个参数ƈ且有一个返回值的E序。在SQL中Oracle内徏了一pd函数Q这些函数都可被UCؓSQL或PL/SQL语句Q函C要分Z大类Q?/p>

   单行函数

   l函?/p>

  本文讨论如何利用单行函C及用规则?/p>

  SQL中的单行函数

  SQL和PL/SQL中自带很多类型的函数Q有字符、数字、日期、{换、和混合型等多种函数用于处理单行数据Q因此这些都可被l称为单行函数。这些函数均可用于SELECT,WHERE、ORDER BY{子句中Q例如下面的例子中就包含了TO_CHAR,UPPER,SOUNDEX{单行函数?/p>

SELECT ename,TO_CHAR(hiredate,'day,DD-Mon-YYYY')FROM empWhere UPPER(ename) Like 'AL%'ORDER BY SOUNDEX(ename)

  单行函数也可以在其他语句中用,如update的SET子句QINSERT的VALUES子句QDELET的WHERE子句,认证考试特别注意在SELECT语句中用这些函敎ͼ所以我们的注意力也集中在SELECT语句中?/p>

  NULL和单行函?/p>

  在如何理解NULL上开始是很困隄Q就是一个很有经验的Z然对此感到困惑。NULLDCZ个未知数据或者一个空|术操作W的M一个操作数为NULL|l果均ؓ提个NULL?q个规则也适合很多函数Q只有CONCAT,DECODE,DUMP,NVL,REPLACE在调用了 NULL参数时能够返回非NULL倹{在q些中NVL函数时最重要的,因ؓ他能直接处理NULL|NVL有两个参敎ͼNVL(x1,x2),x1和x2 都式表达式,当x1为null时返回X2,否则q回x1?/p>

  下面我们看看emp数据表它包含了薪水、奖金两,需要计ȝ补偿

column name emp_id salary bonuskey type pk nulls/unique nn,u nnfk table datatype number number numberlength 11.2 11.2

  不是单的薪水和奖金加v来就可以了,如果某一行是null值那么结果就是nullQ比如下面的例子Q?/p>

update empset salary=(salary+bonus)*1.1

  q个语句中,雇员的工资和奖金都将更新Z个新的|但是如果没有奖金Q即 salary + null,那么׃得出错误的结论,q个时候就要用nvl函数来排除null值的影响?/p>

所以正的语句是:

update empset salary=(salary+nvl(bonus,0)*1.1

单行字符串函?/p>

  单行字符串函数用于操作字W串数据Q他们大多数有一个或多个参数Q其中绝大多数返回字W串

  ASCII()

  c1是一字符Ԍq回c1W一个字母的ASCII码,他的逆函数是CHR()

SELECT ASCII('A') BIG_A,ASCII('z') BIG_z FROM empBIG_A BIG_z65 122

  CHR(QiQ?[NCHAR_CS]

  i是一个数字,函数q回十进制表C的字符

select CHR(65),CHR(122),CHR(223) FROM empCHR65 CHR122 CHR223A z B

  CONCAT(,)

  c1,c2均ؓ字符Ԍ函数c2q接到c1的后面,如果c1为null,返回c2.如果c2为null,则返回c1Q如果c1、c2都ؓnullQ则q回null。他和操作符||q回的结果相?/p>

select concat('slobo ','Svoboda') username from dualusernameslobo Syoboda

  INITCAP()

  c1Z字符丌Ӏ函数将每个单词的第一个字母大写其它字母小写返回。单词由I格Q控制字W,标点W号限制?/p>

select INITCAP('veni,vedi,vici') Ceasar from dualCeasarVeni,Vedi,Vici

  INSTR(,[,QiQ[,]])

  c1,c2均ؓ字符Ԍi,j为整数。函数返回c2在c1中第jơ出现的位置Q搜索从c1的第i个字W开始。当没有发现需要的字符时返?,如果i敎ͼ那么搜烦从叛_左进行,但是位置的计还是从左到叻Ii和j的缺省gؓ1.

select INSTR('Mississippi','i',3,3) from dualINSTR('MISSISSIPPI','I',3,3)11select INSTR('Mississippi','i',-2,3) from dualINSTR('MISSISSIPPI','I',3,3)2

  INSTRB(,[,i[,j])

  与INSTRQ)函数一P只是他返回的是字节,对于单字节INSTRB(){于INSTR()

  LENGTH()

  c1为字W串Q返回c1的长度,如果c1为nullQ那么将q回null倹{?/p>

select LENGTH('Ipso Facto') ergo from dualergo10

  LENGTHb()

  与LENGTH()一Pq回字节?/p>

  lower()

  q回c的小写字W,l常出现在where子串?/p>

select LOWER(colorname) from itemdetail WHERE LOWER(colorname) LIKE '%white%'COLORNAMEWinterwhite

  LPAD(,QiQ[,])

  c1,c2均ؓ字符Ԍi为整数。在c1的左侧用c2字符串补长度i,可多ơ重复,如果i于c1的长度,那么只返回i那么长的c1字符Q其他的被截去。c2的缺省gؓ单空|参见RPAD?/p>

select LPAD(answer,7,'') padded,answer unpadded from question;PADDED UNPADDED Yes YesNO NOMaybe maybe

  LTRIM(,)

  把c1中最左边的字W去掉,使其W一个字W不在c2中,如果没有c2Q那么c1׃会改变?/p>

select LTRIM('Mississippi','Mis') from dualLTRppi

  RPAD(,QiQ[,])

  在c1的右侧用c2字符串补长度i,可多ơ重复,如果i于c1的长度,那么只返回i那么长的c1字符Q其他的被截去。c2的缺省gؓ单空?其他与LPAD怼

  RTRIM(,)

  把c1中最双的字W去掉,使其W后一个字W不在c2中,如果没有c2Q那么c1׃会改变?/p>

  REPLACE(,[,])

  c1,c2,c3都是字符Ԍ函数用c3代替出现在c1中的c2后返回?/p>

select REPLACE('uptown','up','down') from dualREPLACEdowntown

  STBSTR(,QiQ[,])

  c1Z字符Ԍi,j为整敎ͼ从c1的第i位开始返回长度ؓj的子字符Ԍ如果j为空Q则直到串的N?/p>

select SUBSTR('Message',1,4) from dualSUBSMess

  SUBSTRB(,QiQ[,])

  与SUBSTR大致相同Q只是I,J是以字节计算?/p>

  SOUNDEX()

  q回与c1发音怼的词

select SOUNDEX('dawes') Dawes SOUNDEX('daws') Daws, SOUNDEX('dawson') from dualDawes Daws DawsonD200 D200 D250

  TRANSLATE(,,)

  c1中与c2相同的字W以c3代替

select TRANSLATE('fumble','uf','ar') test from dualTEXTramble

  TRIM([[]] from c3)

  c3串中的第一个,最后一个,或者都删除?/p>

select TRIM(' space padded ') trim from dual TRIMspace padded

  UPPER()

  q回c1的大写,常出现where子串?/p>

select name from dual where UPPER(name) LIKE 'KI%'NAMEKING

单行数字函数

  单行数字函数操作数字数据Q执行数学和术q算。所有函数都有数字参数ƈq回数字倹{所有三角函数的操作数和值都是弧度而不是角度,oracle没有提供内徏的弧度和角度的{换函数?/p>

  ABS()

  q回n的绝对?/p>

  ACOS()

  反余玄函敎ͼq回-1?之间的数。n表示弧度

select ACOS(-1) pi,ACOS(1) ZERO FROM dualPI ZERO3.14159265 0

  ASIN()

  反正玄函敎ͼq回-1?Qn表示弧度

  ATAN()

  反正切函敎ͼq回n的反正切|n表示弧度?/p>

  CEIL()

  q回大于或等于n的最整数?/p>

  COS()

  q回n的余玄|n为弧?/p>

  COSH()

  q回n的双曲余玄|n 为数字?/p>

select COSH(<1.4>) FROM dualCOSH(1.4)2.15089847

  EXP()

  q回e的nơ幂Qe=2.71828183.

  FLOOR()

  q回于{于N的最大整数?/p>

  LN()

  q回N的自然对敎ͼN必须大于0

  LOG(,)

  q回以n1为底n2的对?/p>

  MOD()

  q回n1除以n2的余敎ͼ

  POWER(,)

  q回n1的n2ơ方

  ROUND(,)

  q回舍入数点右边n2位的n1的|n2的缺省gؓ0Q这回将数Ҏ接近的整敎ͼ如果n2数就舍入到小数点左边相应的位上,n2必须是整数?/p>

select ROUND(12345,-2),ROUND(12345.54321,2) FROM dualROUND(12345,-2) ROUND(12345.54321,2)12300 12345.54

  SIGN()

  如果n敎ͼq回-1,如果n为正敎ͼq回1Q如果n=0q回0.

  SINQ?

  q回n的正玄?n为弧度?/p>

  SINH()

  q回n的双曲正玄?n为弧度?/p>

  SQRT()

  q回n的^Ҏ,n为弧?/p>

  TANQ?

  q回n的正切?n为弧?/p>

  TANH()

  q回n的双曲正切?n为弧?/p>

  TRUNC(,)

  q回截尾到n2位小数的n1的|n2~省讄?Q当n2为缺省设|时会将n1截尾为整敎ͼ如果n2|截֜数点左边相应的位上?/p>

  单行日期函数

  单行日期函数操作DATA数据cdQ绝大多数都有DATA数据cd的参敎ͼl大多数q回的也是DATA数据cd的倹{?/p>

  ADD_MONTHS(,QiQ?

  q回日期d加上i个月后的l果。i可以使Q意整数。如果i是一个小敎ͼ那么数据库将隐式的他转换成整敎ͼ会截去数点后面的部分?/p>

  LAST_DAY()

  函数q回包含日期d的月份的最后一?/p>

  MONTHS_BETWEEN(,)

  q回d1和d2之间月的数目,如果d1和d2的日的日期都相同Q或者都使该月的最后一天,那么返回一个整敎ͼ否则会返回的l果包含一个分数?/p>

  NEW_TIME(,,)

  d1是一个日期数据类型,当时区tz1中的日期和时间是dӞq回时区tz2中的日期和时间。tz1和tz2时字W串?/p>

  NEXT_DAY(,)

  q回日期d后由dowl出的条件的W一天,dow使用当前会话中给出的语言指定了一周中的某一天,q回的时间分量与d的时间分量相同?/p>

select NEXT_DAY('01-Jan-2000','Monday') "1st Monday",NEXT_DAY('01-Nov-2004','Tuesday')+7 "2nd Tuesday") from dual;1st Monday 2nd Tuesday03-Jan-2000 09-Nov-2004

  ROUND([,])

  日期d按照fmt指定的格式舍入,fmt为字W串?/p>

  SYADATE

  函数没有参数Q返回当前日期和旉?/p>

  TRUNC([,])

  q回由fmt指定的单位的日期d.

单行转换函数

  单行转换函数用于操作多数据类型,在数据类型之间进行{换?/p>

  CHARTORWID()

  c 使一个字W串Q函数将c转换为RWID数据cd?/p>

SELECT test_id from test_case where rowid=CHARTORWID('AAAA0SAACAAAALiAAA')

  CONVERT(,[,])

  c֭W串Qdset、sset是两个字W集Q函数将字符串c由sset字符集{换ؓdset字符集,sset的缺省设|ؓ数据库的字符集?/p>

  HEXTORAW()

  x?6q制的字W串Q函数将16q制的x转换为RAW数据cd?/p>

  RAWTOHEX()

  x是RAW数据cd字符Ԍ函数RAW数据c{换ؓ16q制的数据类型?/p>

  ROWIDTOCHAR()

  函数ROWID数据cd转换为CHAR数据cd?/p>

  TO_CHAR([[,)

  x是一个data或number数据cdQ函数将x转换成fmt指定格式的char数据cdQ如果x为日期nlsparm=NLS_DATE_LANGUAGE 控制q回的月份和日䆾所使用的语a。如果x为数字nlsparm=NLS_NUMERIC_CHARACTERS 用来指定数位和千分位的分隔W,以及货币W号?/p>

NLS_NUMERIC_CHARACTERS ="dg", NLS_CURRENCY="string"

  TO_DATE([,[,Q?/p>

  c表示字符Ԍfmt表示一U特D格式的字符丌Ӏ返回按照fmt格式昄的c,nlsparm表示使用的语a。函数将字符串c转换成date数据cd?/p>

  TO_MULTI_BYTE()

  c表示一个字W串Q函数将c的担子截字符转换成多字节字符?/p>

  TO_NUMBER([,[,)

  c表示字符Ԍfmt表示一个特D格式的字符Ԍ函数q回值按照fmt指定的格式显C。nlsparm表示语言Q函数将q回c代表的数字?/p>

  TO_SINGLE_BYTE()

  字W串c中得多字节字W{化成{h的单字节字符。该函数仅当数据库字W集同时包含单字节和多字节字W时才?/p>

  其它单行函数

  BFILENAME(

,)

  dir是一个directorycd的对象,fileZ文g名。函数返回一个空的BFILE位置值指C符Q函数用于初始化BFILE变量或者是BFILE列?/p>

  DECODE(,,[,,,[])

  x是一个表辑ּQm1是一个匹配表辑ּQx与m1比较Q如果m1{于xQ那么返回r1,否则,x与m2比较Q依ơ类推m3,m4,m5....直到有返回结果?/p>

  DUMP(,[,[,[,]]])

  x是一个表辑ּ或字W,fmt表示8q制?0q制?6q制、或则单字符。函数返回包含了有关x的内部表CZ息的VARCHAR2cd的倹{如果指定了n1,n2那么从n1开始的长度为n2的字节将被返回?/p>

  EMPTY_BLOB()

  该函数没有参敎ͼ函数q回 一个空的BLOB位置指示W。函数用于初始化一个BLOB变量或BLOB列?/p>

  EMPTY_CLOB()

  该函数没有参敎ͼ函数q回 一个空的CLOB位置指示W。函数用于初始化一个CLOB变量或CLOB列?/p>

  GREATEST()

  exp_list是一列表辑ּQ返回其中最大的表达式,每个表达式都被隐含的转换W一个表辑ּ的数据类型,如果W一个表辑ּ是字W串数据cd中的M一个,那么q回的结果是varchar2数据cdQ同时用的比较是非填充I格cd的比较?/p>

  LEAST()

  exp_list是一列表辑ּQ返回其中最的表达式,每个表达式都被隐含的转换W一个表辑ּ的数据类型,如果W一个表辑ּ是字W串数据cd中的M一个,返回的l果是varchar2数据cdQ同时用的比较是非填充I格cd的比较?/p>

  UID

  该函数没有参敎ͼq回唯一标示当前数据库用L整数?/p>

  USER

  q回当前用户的用户名

  USERENV()

  Zoptq回包含当前会话信息。opt的可选gؓQ?/p>

  ISDBA    会话中SYSDBA脚色响应Q返回TRUE

  SESSIONID  q回审计会话标示WENTRYID   q回可用的审计项标示W?/p>

  INSTANCE  在会话连接后Q返回实例标C符。该值只用于q行Parallel 服务器ƈ且有 多个实例的情况下使用?/p>

  LANGUAGE  q回语言、地域、数据库讄的字W集?/p>

  LANG    q回语言名称的ISO~写?/p>

  TERMINAL  为当前会话用的l端或计机q回操作pȝ的标C符?/p>

  VSIZE()

  x是一个表辑ּ。返回x内部表示的字节数?/p>

SQL中的l函?/p>

  l函C叫集合函敎ͼq回Z多个行的单一l果Q行的准数量无法确定,除非查询被执行ƈ且所有的l果都被包含在内。与单行函数不同的是Q在解析时所有的行都是已知的。由于这U差别ɾl函C单行函数有在要求和行Z有微的差异.

  l(多行Q函?/p>

  与单行函数相比,oracle提供了丰富的Zl的Q多行的函数。这些函数可以在select或select的having子句中用,当用于select子串时常帔R和GROUP BY一起用?/p>

  AVG([{DISYINCT|ALL}])

  q回数值的q_倹{缺省设|ؓALL.

SELECT AVG(sal),AVG(ALL sal),AVG(DISTINCT sal) FROM scott.empAVG(SAL) AVG(ALL SAL) AVG(DISTINCT SAL)1877.94118 1877.94118 1916.071413

  COUNT({*|DISTINCT|ALL} )

  q回查询中行的数目,~省讄是ALL,*表示q回所有的行?/p>

  MAX([{DISTINCT|ALL}])

  q回选择列表目的最大|如果x是字W串数据cdQ他q回一个VARCHAR2数据cdQ如果X是一个DATA数据cdQ返回一个日期,如果X是numeric数据cdQ返回一个数字。注意distinct和all不v作用Q应为最大gq两U设|是相同的?/p>

  MIN([{DISTINCT|ALL}])

  q回选择列表目的最倹{?/p>

  STDDEV([{DISTINCT|ALL}])

  q回选者的列表目的标准差Q所谓标准差是方差的qx栏V?/p>

  SUM([{DISTINCT|ALL}])

  q回选择列表目的数值的d?/p>

  VARIANCE([{DISTINCT|ALL}])

  q回选择列表目的统计方差?/p>

  用GROUP BYl数据分l?/p>

  正如题目暗示的那L函数是操作那些已经分好l的数据Q我们告诉数据库用GROUP BY怎样l数据分l或者分c,当我们在SELECT语句的SELECT子句中用组函数Ӟ我们必须把ؓ分组或非常数列放|在GROUP BY子句中,如果没有用group byq行专门处理Q那么缺省的分类是将整个l果设ؓ一cR?/p>

select stat,counter(*) zip_count from zip_codes GROUP BY state;ST ZIP_COUNT-- ---------AK 360AL 1212AR 1309AZ 768CA 3982

  在这个例子中Q我们用state字段分类Q如果我们要结果按照zip_codes排序,可以用ORDER BY语句QORDER BY子句可以使用列或l函数?/p>

select stat,counter(*) zip_count from zip_codes GROUP BY state ORDER BY COUNT(*) DESC;ST COUNT(*)-- --------NY 4312PA 4297TX 4123CA 3982

  用HAVING子句限制分组数据

  现在你已l知道了在查询的SELECT语句和ORDER BY子句中用主函数Q组函数只能用于两个子串中,l函C能用于WHERE子串中,例如下面的查询是错误的:

错误SELECT sales_clerk,SUN(sale_amount) FROM gross_sales WHERE sales_dept='OUTSIDE' AND SUM(sale_amount)>10000 GROUP BY sales_clerk

  q个语句中数据库不知道SUM()是什么,当我们需要指C数据库对行分组Q然后限制分l后的行的输出时Q正的Ҏ是用HAVING语句Q?/p>

SELECT sales_clerk,SUN(sale_amount) FROM gross_sales WHERE sales_dept='OUTSIDE' GROUP BY sales_clerkHAVING SUM(sale_amount)>10000;

  嵌套函数

  函数可以嵌套。一个函数的输出可以是另一个函数的输入。操作数有一个可l承的执行过E。但函数的优先权只是Z位置Q函数遵循由内到外,由左到右的原则。嵌套技术一般用于象DECODEq样的能被用于逻辑判断语句IF....THEN...ELSE的函数?



Cpp Fans 2007-03-26 11:04 发表评论
]]>
[转蝲]ORACLE数据库开发经?http://www.shnenglu.com/threesh/archive/2006/12/04/15974.htmlCpp FansCpp FansMon, 04 Dec 2006 07:09:00 GMThttp://www.shnenglu.com/threesh/archive/2006/12/04/15974.htmlhttp://www.shnenglu.com/threesh/comments/15974.htmlhttp://www.shnenglu.com/threesh/archive/2006/12/04/15974.html#Feedback0http://www.shnenglu.com/threesh/comments/commentRss/15974.htmlhttp://www.shnenglu.com/threesh/services/trackbacks/15974.html http://www2.ccw.com.cn/tips/9911/110402_04.asp

岭澳核电有限公司
黄福?
---- ORACLE数据库作为大型数据库理pȝQ近q来一直占有世界上高端数据库的最大䆾额,其强大而完善的数据库管理功能,以及ORACLE公司推陈出新的不断努力,一直成为IT业界瞩目的焦炏V岭x늫的数据库q_采用了ORACLE7.3作ؓ后端q_Q前端选择了ORACLE公司的DEVELOPER 2000 及DESIGNER 2000作ؓ开发工P采用了目前流行的CLIENT/SERVER模式。本人在ORACLEpȝ的开发中Q就ORACLE的整套开发工hZ些自q体会Q供同行参考?

---- 一. ORACLE SQL PLUS 使用技?

---- ①查N复记?

SELECT DRAWING,DSNO FROM EM5_PIPE_PREFAB
WHERE ROWID!=(SELECT MAX(ROWID) FROM EM5
_PIPE_PREFAB D
WHERE EM5_PIPE_PREFAB.DRAWING=D.DRAWING AND
EM5_PIPE_PREFAB.DSNO=D.DSNO);
---- 执行上述SQL语句后就可以昄所有DRAWING和DSNO相同且重复的记录?
---- 删除重复记录:

DELETE FROM EM5_PIPE_PREFAB
WHERE ROWID!=(SELECT MAX(ROWID) FROM EM5
_PIPE_PREFAB D
WHERE EM5_PIPE_PREFAB.DRAWING=D.DRAWING AND
EM5_PIPE_PREFAB.DSNO=D.DSNO);
---- 执行上述SQL语句后就可以刪除所有DRAWING和DSNO相同且重复的记录?
---- ?快速编译所有视?

---- 当在把数据库倒入到新的服务器上后(数据库重?Q需要将视图重新~译一遍,因ؓ该表I间视图到其它表I间的表的连接会出现问题Q可以利用PL/SQL的语aҎ,快速编译?

SQL >SPOOL ON.SQL
SQL >SELECT ‘ALTER VIEW ‘||TNAME||?br />COMPILE;?FROM TAB;
SQL >SPOOL OFF
然后执行ON.SQL卛_?br />SQL >@ON.SQL
当然Q授权和创徏同义词也可以快速进行,如:
SQL >SELECT ‘GRANT SELECT ON ?br />||TNAME||?TO USERNAME;?FROM TAB;
SQL >SELECT ‘CREATE SYNONYM
‘||TNAME||?FOR USERNAME.’||TNAME||??FROM TAB;

?用外联接提高表连接的查询速度
在作表连?常用于视?Ӟ怋用以下方法来查询数据:
SELECT PAY_NO, PROJECT_NAME
FROM A
WHERE A.PAY_NO NOT IN (SELECT PAY_
NO FROM B WHERE VALUE >=120000);
---- 但是若表A?0000条记录,表B?0000条记录,则要用掉30分钟才能查完Q主要因为NOT IN要进行一条一条的比较Q共需?0000*10000ơ比较后Q才能得到结果。该用外联接后,可以~短?分左右的旉:
SELECT PAY_NO,PROJECT_NAME
FROM A,B
WHERE A.PAY_NO=B.PAY_NO(+)
AND B.PAY_NO IS NULL
AND B.VALUE >=12000;
---- ?怎样d文本型操作系l文?
---- 在PL/SQL 3.3以上的版本中QUTL_FILE包允许用户通过PL/SQLd操作pȝ文g。如下:

DECALRE
FILE_HANDLE UTL_FILE.FILE_TYPE;
BEGIN
FILE_HANDLE:=UTL_FILE.FOPEN(
‘C:\?’TEST.TXT?’A?;
UTL_FILE.PUT_LINE(FILE_HANDLE,?br />HELLO,IT’S A TEST TXT FILE?;
UTL_FILE.FCLOSE(FILE_HANDLE);
END;
---- 相关UTL_FILE数据库包详细信息可以参见相关资料?br />

---- ?怎样在数据库触发器中使用列的新g旧?

---- 在数据库触发器中几乎L要用触发器的列|如果某条语句需要某列修改前的|使用:OLD可以了Q用某列修改后的新|?NEW可以了。如:OLD.DEPT_NO,:NEW.DEPT_NO?

---- ?ORACLE DEVELOPER 2000使用技巧:

---- ?改变FORM(FMX模块)q行时的Runform4.5的题?

---- DEVELOPER2000中FMX默认题头为:Developer/2000 Forms Runtime for Windows 95 / NT 你可以改己定义的标题,

---- 1. 在FormU触发器中添加触发WHEN-NEW-FORM-INSTANCE

---- 2. 在此触发器中写如下代码:

set_window_property(FORMS_MDI_WINDOW,TITLE,'POINT
SYSTEM Ƣ迎使用');
---- ?如何隐藏菜单中的window选项:
---- 在创q菜单Ӟ最后选项Lwindow,下面介绍如何L?

---- 1. 创徏一个Menu

---- 2. 在Menu中徏立一个Item,命名为WINDOW?

---- 3. 讄该Item属性如?

----

Menu Item Type:Magic
Command Type:Null
Magic Item:Window
Lable:为空

---- ?怎样创徏动态下拉列表List
---- Developer 2000 中的列表是通过讄相关属性而完成数据项的列表设|的Q但那只是静态的Q有时你惌某项成ؓ动态的列表Q随输入数据的改变而改变,需要动手去~个程序。下面详l介l怎样d:

---- 有块EBOP_CABLE_ACCOUNTQ下有SPECIFICATION数据,当一q入该模块时Q就SPECIFICATION在数据库中存储的值动态显C出来,先在Form4.5中徏立一个PRCEDUREQ命名ؓDYN_LIST:

PROCEDURE DYN_LIST IS
CURSOR C1 IS
SELECT DISTINCT(SPECIFICATION)
FROM EBOP_CABLE_ACCOUNT;
CNT NUMBER;
i NUMBER;
TNAME EBOP_CABLE_
ACCOUNT.SPECIFICATION%TYPE;
BEGIN
CLEAR_LIST('EBOP_CABLE_
ACCOUNT.SPECIFICATION');
SELECT COUNT(DISTINCT
(SPECIFICATION)) INTO CNT FROM EBOP
_CABLE_ACCOUNT;
open C1;
FOR i IN 1..CNT LOOP
FETCH C1 INTO TNAME;
EXIT WHEN C1%NOTFOUND
OR C1%NOTFOUND IS NULL;
ADD_LIST_ELEMENT
('EBOP_CABLE_ACCOUNT
.SPECIFICATION',i,TNAME,TNAME);
END LOOP;
DELETE_LIST_ELEMENT
('EBOP_CABLE_ACCOUNT.SPECIFICATION',CNT+1);
CLOSE C1;
END;
然后在FORM的WHEN-NEW
-FORM-INSTANCE触发子中加入一行:
DYN_LIST;
---- q样一q入该FMXQ就会动态刷新该列表。除此之外,SPECIFICATION数据Ҏ为列表项?
---- ?当显C多条记录且数据特别多Ӟ如何l织录入及显C界?

---- 如上图所C,PRN代码及设备代码在d1(CONTENT?上,其它数据在d2(STACK?上,所有数据项Z个表的列或一个块的数据项。在拉动水^滚动条时或用TAB或敲回R键时Q将看到全部数据V这U排布方法适用于数据项特别多又xC多条记录时用。主要制作顺序ؓQ先建立两个dQ画?(CONTENT?Q画?(STACK?Q然后徏立块Q选画布时用画?Q这h有项都显C在d1上,然后选中除PRN代码及设备代码之外的所有数据项Q选TOOLS菜单下的PROPERTIES选项Q将q些数据的CANVAS属性选ؓd2(STACK?Q然后调整整体位|就可以了?

---- ?如何在FORM的受限触发子中提交保存数?

---- 在FORM中很多触发子是不能用COMMIT WORK语句的,当你在该触发子中使用了UPDATEQDELETE{操作ƈ想立卛_盘时Q就需要COMMIT WORK语句了。首先在服务器端建立DB_SQL_COMMITq个q程(采用ORACLE7.3数据?Q?

PROCEDURE DB_SQL_COMMIT IS
source_cursor integer;
ignore integer;
V7 NUMBER :=2;
BEGIN
source_cursor:=dbms_sql.open_cursor;
dbms_sql.parse(source_cursor,'COMMIT WORK',V7);
ignore:=dbms_sql.execute(source_cursor);
DBMS_SQL.CLOSE_CURSOR(source_cursor);
END;
---- 然后在FORM中该触发子中调用q程DB_SQL_COMMIT;可以了Q当然你可以Ҏ自己需要将该过E加入参敎ͼq样通过参数可以得到执行DML语句的权限?br />
 ?如何在FORM中实现某数据自动按记录序号加一操作

---- 讑֝名ؓVO,要操作的数据ؓVO_ID,在该块中建立块触发子WHEN-CREATE- RECORDQ加入如下代码:

:VO_ID:=:System.Trigger_Record;
---- q样每当生成新记录时VO_ID׃自动加一了?
---- ?如何在一个FORM中调用另一个FORMQ或在一个块中调用另一个块时显C特定的记录有时用户会要求在调用另一个FORMӞ只显C相关的记录QD例如下,在一个FORM的块中有一个按钮,在按钮触发子中加入如下代码:

DECLARE
PM
PARAMLIST;
BEGIN
PM:=GET_PARAMETER_LIST('PM');
IF NOT ID_NULL(PM) THEN
DESTROY_PARAMETER_LIST('PM');
END IF;
PM:=CREATE_PARAMETER_LIST('PM');
......................
ADD_PARAMETER(PM,'THE_WHERE',
TEXT_PARAMETER,'EM_NAME=''EM4''
AND EM_PROJECT_NAME=''支架预制''');
OPEN_FORM('PAYMENT',ACTIVATE,SESSION,PM);
ENDQ?br />---- 其中EM_NAMEQEM_PROJECT_NAME为本FORM某块的数据项QPAYMENT调用的FORM模块。这样通过传递参数列表就可以得到惌的结果。在FORM PAYMENT.FMB中,建立一参数THE_WHEREQCHAR型,?000Q然后在PAYMENT.FMB中徏立FORMU触发子WHEN-NEW-FORM-INSTANCEQ在该触发子中加入以下语句:
IF :PARAMETER.THE_WHERE IS NOT NULL THEN
SET_BLOCK_PROPERTY('PAYMENT',
DEFAULT_WHERE,:PARAMETER.THE_WHERE);
END IF;
---- 其中PAYMENT昄的块Q这样通过参数传递就得到惌的某些特定条件的数据了?
---- ?在FORM中当有主从块Ӟq箋输入记录如何避免被不断的提示保存Q?

---- 每输入一条主记录和若q条该主记录的从记录后,此时再导航到d输下一条记录,FORM׃提示你是否要保存记录Q而你q不希望FORM提示Q让它自动保存,此时你可以到Program Units中找到过EPROCEDURE Clear_All_Master_DetailsQ然后在q个q程中找到语?

Clear_Block(ASK_COMMIT);
---- 其改ؓClear_Block(DO_COMMIT);可以了?
---- ?在Report开始时选择排序?

---- 在报表开始的Parameter Form中选择报表按哪个数据项排序Q?

---- 1. 先在USER PARAMETER 中创建SORT参数Qؓ字符型,?0?

---- 2. 初始值选’责L?然后这四个D入到DATA SELECTION中,形成列表?

---- 3. 然后处理QUERY中的SQL语句:

select CHARGER,FCO_NO,EM_NAME,FCO
_NO,DESCRIPTION, FCR_POINT
from FCR_MAIN
ORDER BY DECODE(:SORT,'责Q?,CHARGER,'FCO?,
FCO_NO,'FCR?,FCR_NO,'FCR?,EM_NAME)

---- ?在Developer 2000中如何读写操作系l文?
---- 在用Developer 2000的开发工具开发应用程序时Q经常碰到需要读写外部文件的问题Q可以用ORACLE 带的包TEXT_IO来完成这w求。例?

DECLARE
IN_FILE TEXT_IO.FILE_TYPE;
OUT_FILE TEXT_IO.FILE_TYPE;
LINE_BUFER VARCHAR2(80);
/*若不用IN_FILE,可以各字段联接在一赯值给此变?/
BEGIN
IN_FILE:=TEXT_IO.FOPEN
(‘C:\TEMP\TEST1.TXT?’r?;
OUT_FILE:=TEXT_IO.FOPEN
(‘C:\TEMP\TEST2.TXT?’w+?;
LOOP
TEXT_IO.GET_LINE(IN_FILE,LINE_BUFER);
TEXT_IO.PUT(LINE_BUFER);
TEXT_IO.NEW_LINE;
TEXT_IO.PUT_LINE(OUT_FILE,LINE_BUFER);
END LOOP;
EXCEPTION
WHEN no_data_found THEN
TEXT_IO.PUT_LINE(‘CLOSING THE FILE ,PLEASE WAITING....?;
TEXT_IO.FCLOSE(IN_FILE);
TEXT_IO.FCLOSE(OUT_FILE);
END;
---- ?数据库管?

---- ?在删除一个表中的全部数据ӞM用TRUNCATE TABLE 表名;因ؓ用DROP TABLEQDELETE * FROM 表名ӞTABLESPACE表空间该表的占用I间q未释放Q反复几ơDROPQDELETE操作后,该TABLESPACE上百兆的I间p耗光了?

---- ?数据库文件的UdҎ

---- 当想数据库文gUd到另外一个目录下Ӟ可以用ALTER DATABASE命o来移?比ALTER TABLESPACE适用性强)Q?

---- 1. 使用SERVER MANAGER关闭实例.

SVRMGR > connect internal;
SVRMGR > shutdown;
SVRMGR >exit;
---- 2. 使用操作pȝ命o来移动数据库文g位置(假设q里操作pȝ为SOLARIS 2.6). 在UNIX中用 mv命o可以把文件移动到新的位置Q?

#mv /ora13/orarun/document.dbf /ora12/orarun
---- 3. 装蝲数据库ƈ用alter database命o来改变数据库中的文g?
SVRMGR > connect internal;
SVRMGR > startup mount RUN73;
SVRMGR > alter database rename file
> ? ora13/orarun/document.dbf?br />> ? ora12/orarun/document.dbf?
---- 4. 启动实例.

SVRMGR > alter database open;
---- (huangfutong@china.com)

---- ORACLE数据库开发经验ȝ



Cpp Fans 2006-12-04 15:09 发表评论
]]>
[转]Oracle的入门心?/title><link>http://www.shnenglu.com/threesh/archive/2006/11/07/14766.html</link><dc:creator>Cpp Fans</dc:creator><author>Cpp Fans</author><pubDate>Tue, 07 Nov 2006 01:59:00 GMT</pubDate><guid>http://www.shnenglu.com/threesh/archive/2006/11/07/14766.html</guid><wfw:comment>http://www.shnenglu.com/threesh/comments/14766.html</wfw:comment><comments>http://www.shnenglu.com/threesh/archive/2006/11/07/14766.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/threesh/comments/commentRss/14766.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/threesh/services/trackbacks/14766.html</trackback:ping><description><![CDATA[        Oracle的体pd庞大了,对于初学者来_隑օ会有些无从下手的感觉Q什么都惛_Q结果什么都学不好,所以把学习l验׃n一下,希望让刚刚入门的人对Oracle有一个M的认识,走一些弯路? <p><strong>        一、定?/strong></p><p>        Oracle分两大块Q一块是开发,一块是理。开发主要是写写存储q程、触发器什么的Q还有就是用Oracle的Develop工具做form。有点类gE序员,需要有较强的逻辑思维和创造能力,个h觉得会比较辛苦,是青春饭Q管理则需要对Oracle数据库的原理有深ȝ认识Q有全局操纵的能力和紧密的思维Q责任较大,因ؓ一个小的失误就会down掉整个数据库Q相对前者来_后者更看重l验?</p><p>        因ؓ数据库管理的责Q重大Q很公司愿意请一个刚刚接触Oracle的hȝ理数据库。对于刚刚毕业的q轻人来_可以先选择做开发,有一定经验后转型Q去做数据库的管理。当Ӟq个q是要看Z的实际情冉|定?/p><p><strong>       二、学习方?/strong></p><p>       我的Ҏ很简单,是Q看书、思考、写W记、做实验、再思考、再写笔记?/p><p>        看完理论的东西,自己静下心来xQ多问自己几个ؓ什么,然后把所学和所想的知识点做个笔讎ͼ在想不通或有疑问的时候,做做实验,x怎么会这P同样的,把实验的l果C来。思考和做实验是Z深入的了解这个知识点。而做W记的过E,也是理清自己思\的过E?</p><p>        学习的过E是使一个问题由模糊到清晎ͼ再由清晰到模p的q程。而每ơ的改变都代表着你又学到了一个新的知识点?</p><p>        学习的过E也是从点到U,从线到网Q从|到面的q程。当点变成线的时候,你会有总豁然开朗的感觉。当|到面的时候,你就是高手了?/p><p>         很多|友Q特别是初学的hQ一到问题拿到论坛上来问Q在问前Q你有没有查q书Q自己有没有研究q,有没有搜索一下论坛?q就叫思维惰性。由别h来回{你的问题,会让你在短时间内不费劲地弄懂q个知识点,然而通过自己的努力去研究它,不但会更深入的了解这个知识点Q更重要的是在研I的q程会提高你解决问题和分析问题的能力。ȝ来说Q没有钻研的学习态度Q不学什么东西,都不会成功的?</p><p>        当然Q初学的人很多时候是因ؓ遇到问题Ӟ无从下手Q也不知道去哪里找资料,才会到论坛上提问题的。但我认为,在提问的时候,是不是可以问别h是如何分析这个问题?从哪里可以找到相关的资料Q而不是这个问题的{案是什么?授h以鱼不如授h以渔?/p><p>        下面我讲下我处理问题的过E?/p><p>        首先要知道Oracle的官方网站:www.oracle.com q里有Oracle的各U版本的数据库、应用工具和权威的官Ҏ档。其ơ,q要知道http://metalink.oracle.com/q里是买了Oracle服务或是oracle的合作伙伴才可以q去的,里面有很多权威的解决Ҏ和补丁。然后就是一些著名网站:asktom.oracle.com www.orafaq.net, www.dbazine.com。这里有很多l验之谈?/p><p>        遇到问题了。如果是概念上的问题Q第一旉可以找tahiti.oracle.comQ这里会l你最详细的解释。如果在q行的过E中Z什么错误。可以去metalink看看。如果是想知道事务的处理的经验之谈。可以去asktom。当然。这里只是相对而言?/p><p><strong>       三、Oracle的体p?/strong><br />        Oracle的体pd庞大Q要学习它,首先要了解Oracle的框架。在q里Q简要的讲一下Oracle的架构,让初学者对Oracle有一个整体的认识?/p><p>     1、物理结构(由控制文件、数据文件、重做日志文件、参数文件、归档文件、密码文件组成) </p><p>        控制文gQ包含维护和验证数据库完整性的必要信息、例如,控制文g用于识别数据文g和重做日志文Ӟ一个数据库臛_需要一个控制文?</p><p>        数据文gQ存储数据的文g.</p><p>        重做日志文gQ含Ҏ据库所做的更改记录Q这样万一出现故障可以启用数据恢复。一个数据库臛_需要两个重做日志文?</p><p>        参数文gQ定义Oracle例程的特性,例如它包含调整SGA中一些内存结构大的参数.</p><p>        归档文gQ是重做日志文g的脱机副本,q些副本可能对于从介质失败中q行恢复很必要?</p><p>       密码文gQ认证哪些用h权限启动和关闭Oracle例程.</p><p><br />        2、逻辑l构Q表I间、段、区、块Q?/p><p>        表空_是数据库中的基本逻辑l构Q一pd数据文g的集合?br />        D:是对象在数据库中占用的空?<br />        区:是ؓ数据一ơ性预留的一个较大的存储I间.<br />        块:ORACLE最基本的存储单位,在徏立数据库的时候指?</p><p><br />       3、内存分配(SGA和PGAQ?/p><p>        SGAQ是用于存储数据库信息的内存区,该信息ؓ数据库进E所׃n。它包含Oracle 服务器的数据和控制信?它是在Oracle服务器所ȝ的计机的实际内存中得以分配Q如果实际内存不够再往虚拟内存中写?</p><p>        PGAQ包含单个服务器q程或单个后台进E的数据和控制信息,与几个进E共享的SGA 正相反PGA 是只被一个进E用的区域QPGA 在创E时分配在终止进E时回收.</p><p>        4、后台进E(数据写进E、日志写q程、系l监控、进E监控、检查点q程、归档进E、服务进E、用戯E)</p><p>        数据写进E:负责更改的数据从数据库~冲区高速缓存写入数据文?<br />        日志写进E:重做日志缓冲区中的更改写入在线重做日志文g <br />        pȝ监控Q检查数据库的一致性如有必要还会在数据库打开时启动数据库的恢?br />        q程监控Q负责在一个Oracle q程p|时清理资?<br />        查点q程Q负责在每当~冲区高速缓存中的更Ҏ久地记录在数据库中时,更新控制文g和数据文件中的数据库状态信息?<br />       归档q程Q在每次日志切换时把已满的日志组q行备䆾或归?<br />       服务q程Q用戯E服务?<br />       用户q程Q在客户端,负责用LSQL语句传递给服务q程Qƈ从服务器D|回查询数据?</p><p>        5、Oracle例程QOracle例程由SGA内存l构和用于管理数据库的后台进E组成。例E一ơ只能打开和用一个数据库?</p><p>        6、SCN(System ChangeNumber)Q系l改变号Q一个由pȝ内部l护的序列号。当pȝ需要更新的时候自动增加,他是pȝ中维持数据的一致性和序恢复的重要标志?/p><p><strong>       四、深入学?</strong></p><p>        理Q可以考OCP证书Q对Oracle先有一个系l的学习Q然后看Oracle Concepts、Oracle online document,对oracle的原理会有更深入的了解,同时可以开始进行一些专题的研究如:RMAN、RAS、STATSPACT、DATAGUARD、TUNING、BACKUP&RECOVER{等?/p><p>        开发:对于惛_Oracle开发的Q在了解完Oracle基本的体pȝ构之后,可以重点xPL/SQL及Oracle的开发工兯一部分。PL/SQL主要是包括怎么写SQL语句Q怎么使用Oracle本n的函敎ͼ怎么写存储过E、存储函数、触发器{?Oracle的开发工具主要就是Oracle自己的Developer SuiteQOracle Forms Developer and Reports Developerq些Q,学会如何熟练使用q些工具?br /></p><p><br /></p><img src ="http://www.shnenglu.com/threesh/aggbug/14766.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/threesh/" target="_blank">Cpp Fans</a> 2006-11-07 09:59 <a href="http://www.shnenglu.com/threesh/archive/2006/11/07/14766.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>лǵվܻԴȤ</p> <a href="http://www.shnenglu.com/" title="精品视频久久久久">精品视频久久久久</a> <div class="friend-links"> </div> </div> </footer> <a href="http://www.jxfic.org.cn" target="_blank">þAV</a>| <a href="http://www.kkha.cn" target="_blank">999þþѾƷ</a>| <a href="http://www.hnxxzw.cn" target="_blank">һձþþ</a>| <a href="http://www.bobofans.cn" target="_blank">þþƷ޾Ʒɫ</a>| <a href="http://www.talkvo.cn" target="_blank">ɫۺϺϾþۺӿ </a>| <a href="http://www.wenmeiclass.cn" target="_blank">þۺϾþۺϾþ</a>| <a href="http://www.qianzifu.net.cn" target="_blank">þøݾƷԴվ</a>| <a href="http://www.hgrnoko.cn" target="_blank">պþþþĻ</a>| <a href="http://www.todouba.cn" target="_blank">þۺ88</a>| <a href="http://www.shoucang88.com.cn" target="_blank">Ʒþþþþþö</a>| <a href="http://www.j8hq8.cn" target="_blank">޹뾫ƷŮ˾þþò</a>| <a href="http://www.jihejingjia.cn" target="_blank">þëƬѿһ</a>| <a href="http://www.zfrnhbv.com.cn" target="_blank">AþþƷ</a>| <a href="http://www.tjjobs.com.cn" target="_blank">þۺɫһ</a>| <a href="http://www.myloveshop.com.cn" target="_blank">޹Ʒþ</a>| <a href="http://www.h2ofood.cn" target="_blank">aëƬþ</a>| <a href="http://www.scmyff.cn" target="_blank">뾫Ʒþþɫ</a>| <a href="http://www.znkt.net.cn" target="_blank">Ʒþ</a>| <a href="http://www.klhome.com.cn" target="_blank">ھƷþþþӰԺһ </a>| <a href="http://www.2tou.cn" target="_blank">þþþҹҹҹƷ</a>| <a href="http://www.51hitjj.cn" target="_blank">þþƷŷպ99</a>| <a href="http://www.guwanwei.cn" target="_blank">޹˾þһҳ</a>| <a href="http://www.rosettagetty.com.cn" target="_blank">þֻоƷҳ</a>| <a href="http://www.witvb.cn" target="_blank">Ʒþþþþһ</a>| <a href="http://www.hiinterface.cn" target="_blank">þseƷһƷ</a>| <a href="http://www.lvtonggaoerfu.cn" target="_blank">99þþƷһëƬ </a>| <a href="http://www.12045.com.cn" target="_blank">Ļþ</a>| <a href="http://www.benok.cn" target="_blank">޾Ʒþþþþ</a>| <a href="http://www.yule999.cn" target="_blank">þþƷþ</a>| <a href="http://www.rfgjqh.cn" target="_blank">ĻþþƷˮ</a>| <a href="http://www.12530downs.com.cn" target="_blank">Ʒþþþѿ</a>| <a href="http://www.ichz.cn" target="_blank">Ļ˾Ʒþò</a>| <a href="http://www.7cdy.cn" target="_blank">þþþƷձһ </a>| <a href="http://www.gh688.cn" target="_blank">ŷƷۺϾþ</a>| <a href="http://www.geishi.cn" target="_blank">þۺۺϾþۺ</a>| <a href="http://www.kmkiddieedu.cn" target="_blank">99þþƷž޾Ʒ</a>| <a href="http://www.jn879.cn" target="_blank">ҹƷþþþþ99</a>| <a href="http://www.shipin168.cn" target="_blank">ɫþˬˬƬaV</a>| <a href="http://www.hwtk.net.cn" target="_blank">þˬˬƬAV</a>| <a href="http://www.77ns.cn" target="_blank">޹˾þۺ</a>| <a href="http://www.i9tao8.cn" target="_blank">ľƷþþþùַ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>