??xml version="1.0" encoding="utf-8" standalone="yes"?>
函数是一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的函数? 1。关于要不要学习C++Q(l论Q要学,一定要学!Q?br />如今在网上很多ؓ要不要学C++争的不可开交,因ؓ现在JAVAQC#Q。NET都炒的很火,特别是JAVAQ大有炸q_山,停止地球转动之势。用林锐同志的话_其实JAVA只是C++外甥Q跑到舅舅n上撒了一泡尿而已。首先,我们从JAVA 的来历上来说QJAVA的设计初h用来l家用电器设计程序用的Q最初设计者想用C++Q但觉得C++太复杂,在C++的基上做了一些简化,设计ZJAVAQ它的设计思想是跨q_Q所以必d在运行^C安装虚拟机,然后把源E序~译成中间语a在运行。这是一个优点,但我们说L优点都是建立在缺点上的,JAVA的缺点就是运行速度慢,q对于某些系l来说是致命q。况且,JAVA中没有指针,对于制作pȝ软g来说Q这更是无法饶恕的。再来看C++。C++产生于美国贝实验室Q就是发明电话那个公司。设计初h用来改进C的开发效率,C是面向过E的语言Q开发效率底Q贝实验室有大量的CE序员,所以只要在开发效率上提高一点点Q就可以节约数目庞大的成本。C是什么东西?是用来代替汇~编写操作系l的语言Q用C++代替CQ可以得Z个结论:W一QC++必须h同C相当的执行速度Q第二,C++必须比Ch较高的开发效率。执行速度斚wQC++的设计者的思想是在改q开发效率的同时量不增加C++的系l开销Q当然有些地斚w增加开销不可Q也把开销控制在最程度内。具非权威研I报告,C++比C的执行开销多出不到10%。开发效率方面,C++引进了面向对象机Ӟ库机Ӟ最大程度上实现了代码重用,q是软g开发h员的音。C++在改qC的开发效率的同时Q对C的缺陷做了一些修补。C的优点在C++中都得到了很好的保留QC的缺点在C++中都有了改进Q有了更好的解决办法。而且Qؓ了现有的大量CE序l护QC++q全面兼容了C。纵观当今程序语a家族Q我觉得只有C可以C++相提q论Q门当户对,其它语言都无法和C++相提q论。无Z什么角度来_C++都算的上语言中的老大?br />如今Q网上有很多关于C++的争论,其实争论的h都是一些不知情的hQ绝大多数是学校里的学生Q我也曾l这栗在学校里的时候,不知道究竟应该学习什么,要是遇到好的老师q可以,遇到垃圾老师Q垃圑֭校那更p糕。如今,什么MCSEQCCNAQCIW{等认证漫天飞,把h搞的昏头昏脑Q其实这都是认证公司炒的。社会上需要的是有真才实学的hQ而不是需要证书?br />我从大二开始学习编E,一开始学习VBQ后来学习DELPHIQ再后来学习C#Q再后来学习C++Q绕了个大圈子,最后还是绕回来了。而且重新学习数据l构Q操作系l,学习软g工程Q学习大学本U的基本评Q重新读外国的程序设计名著,而这些以前在大学是不屑一儡。劝如今q在学校的师弟师妹们Q努力学习C++?/p>
2。ؓ什么要学习学习C++ 3。怎样学习C++Q?br />首先Q我们必L认,学习要讲I方法,有捷径。其ơ,我们q得承认Q学习要下苦功,要务实。上学的时候,书上有个故事Q是关于王o之学习书法的Q王献之问他父亲王o之,学习书法的秘诀是什么,他父亲把他带到后院,指着18口大水_你如果把q里的水都写完了Q就知道书法的秘诀在那里了。这个故事相信很多h都还记得。前几天看梁肇新Q豪杰公司老板Q的《高手箴a》,他说如果你如果愿意利?q时间来成ؓ高手Q那么你只要两三q就会成为高手,如果你想一q成为高手,那么?q也成不了高手。学习要切忌躁Q要脚踏实地。我曄很Qw,l果一直呆在菜鸟堆里,当半q前我静下心来学习C++Q才感觉有真正的q步。现在做WEB开发,虽然我从来不看WEB开发的书,但是我的同事遇到问题Ӟ我经常能一下说出问题的所在。因Z看问题的角度变了。所以,学习C++的第一个方法是Q切忌Qw。其实学M东西都一PƲ速则不达。从基本数据cd看vQ从基本程控制语句写v?br />其次Q教材很重要Q要看经典名著?br /> 1Q《C++入门l典》,原名《The C++ Language Begeining?作者Ivor Horton 此书显易懂极适合入门Q书中包括最基本的程序设计知识,例如基本数据cdQ流E控制语句,函数设计。即使没有Q何程序设计基的hQ看着也不觉得累。书中一些很有特色的事例Q能促进和加p者的理解。但此书的代码风格实在有些糟p?/p>
2Q《C++~程思想?原名《Thinking in C++?作者Bruce Eckell, 此书的名气就不在q里说了.此书最新版?W三?开头部分增加了几章讲C语言的部?然后把读者逐渐引向C++,在讨a的一个特性时,往往L先讲解在C中的解决Ҏ,然后讨论q中Ҏ的局限和不之处,再讨论C++中的解决Ҏ.据我的感?此书作者的初衷是引导CE序员走向C++,但后来发现大多数新生代程序员,非美国的E序员不一定懂C,于是在W三版中加入了介lC的部? 此书最大的特点? 作者善于透过语言现象,看看屏风后面I竟发生了什?例如,昄出生成的汇编语言).消化好这本书QC++水^上一个大台阶Q?/p>
3Q《C++高效~程》,原名《Effect C++》。此书重Ҏ讨C++的一些技术死角,我只看过其中很少的一些章节,在此不作q多评论Q?/p>
4Q《C++ Primer》,作者Stanley B.LippmanQ此书还没有读过Q接下来读这本书。我在网上找了一点对此书特点的描qͼ对C++基本概念和技术全面而且权威的阐qͼ对现代C++~程风格的强调,使本书成为C++初学者的最x南;对于中高U程序员Q本书也是不可或~的参考书。第4版不再强调低层编E技术,而把中心转向标准库的使用。书中很早就开始介l标准库Q示例也已经重新改写Q充分利用了标准库设施。我们也对语a主题叙述的先后次序进行了重新~排Q讲解更加畅Q?/p>
5Q《C++~程语言》,原名《C++ Program Language》,作者乃C++的发明者被誉ؓC++之父的Bjarne StroustrupQ此书我只读了一部分Q说实话Q有些难。此书的作者就是C++的创始hQ发明者,知识非常渊博Q其思想深度q远在前面几位之上。如果你想知道C++I竟能做什么,C++那些希奇古怪的Ҏؓ什么那栯计,那你去参考这本书。另外,阅读此书Ӟ你还会ؓ作者那U深邃的思想Q博大的胸怀感觉CU发自内的快乐,舒畅。书中还讲到了很多大型系l设计的Ҏ和技巧。MQ不L书,是作为程序员的一大遗憾。我先阅诅RC++~程思想》,再参考此书。因为《C++~程思想》的作者说Q他写这本书的目的就是ؓ了大家能够参考《C++~程语言》这本书Q?/p>
6Q《C++高质量编E》,作者林锐。此书不属于l典名著Q但我也比较推荐q本书。作者不象国内其他作者那栯腐功利,而是从一个程序员的角度,介绍他在以往开发过E中遇到的问题和U篏的经验,q本书很薄,但其中的思想Ҏ很有用。且语句诙谐q默Q阅读v来很LQ?/p>
M一本书Q都有他的可取之处;M一本书Q都无法解决在学习中遇到的所有问题;M一本书Q都无法替代人的智慧和经验。但是好的教材,可以起到好的指导效果Q可以学习走弯\。但我不怎么看比较薄Q?00以下)的书Q因为对于C++来说Q这L幅Ҏp不清楚,也不看国内作者的教材Q你发现大多是从上面所说的书中抄下来的?/p>
4。C++和VC的区?br />目前我们所说的C++Q通常意义上指标准C++Q就是美国C++标准委员会发布的C++。它定义了一些基本的语言规范语言Ҏ,定义了一个框Ӟq有一个标准库。虽然生于UNIX下,但它不属于某一个^収ͼ某一个厂商,某一个编译器。它是一U统Uͼ一U概cVC是微软公司在WINDOWSq_下的一U开发工P本质上和VBQC#没有什么区别,只是较之底层一些。VC支持标准C++Q但不百分之百支持。一般来_学习C++可以使用VC的编译环境,但是必须要用标准库。还有其他一些C++~译器例如C++ BUIDERQ就是Borland公司生的WINDOWS下的C++~译器,GCC是LINUX下的常用的C++~译器。估计在ҎZ也有相应的C++~译器,因ؓC++处理囑Şpȝ是其牚w?/p>
要学习C++Q就不要从VC学vQ学习VC无法学到真正的C++~程思想Q而你只是学会了用类库而已。C++的特性是什么?C++本质是什么?C++的精华是什么?我觉得ȝ成一句话Q利用面向对象的思想Q解军_型系l的开发问题?/p>
5。学习C++的重?br />如果你学习过C或者了解CQ那么在学习C++的时候更Ҏ受C的媄响,CQC是面向过E的语,C++是面向对象的语言。如果你学习qCQ那么学习C++的重Ҏ掌握C++的新Ҏ,C与C++的区别,C++的面向对象特性,试用C++的风格去~写E序Q用C++的技术去解决问题。或怽认ؓC很不错,但在C++可能有更好的解决办法Q?/p>
如果你学习过JAVAQC#或DELPHIQ那么你应该寚w向对象机制很熟悉。但是,C++中的面向对象机制和上q几U语a有所区别Q例如多重ѝ最好尝试在没有用户界面的环境下~写E序Q还有,指针是C++的精华之一Q所以必L握; 如果你没有编E基Q那q接从C++学vQ这样就没有其他语言的干扰和影响。祝ZQ一开始就接触了这样一U伟大的语言Q?/p>
我觉得,C++的重点可以用三个词来描述Q指针,面向对象Q标准库?/p>
最后,在这里同所有学习C++的程序员共勉Q不要担心学习C++会被淘汰Q我所在的单位q有大量的InformixE序员,而且日子q的很舒服。我时候学书法Q老师常对我说一句话是Q字写的好,哪怕拿一根筷子在嘴巴里咬几下Q都写的好看Q而不在于用什么笔。用C++之父Bjarne Stroustrup的话来说Q只要你在用电脑,你就直接或间接用了C++?/p>
让我们共同学习,共同q步Q相互交,怺促进?/p>
开发h员应该熟?NET FrameWork体系l构和基本原理,熟悉CLRQ公paq行Ӟ和MSIL(中间语言)Q熟?NET框架中的委托、线E、序列化、集合、垃圑֛收机制、反等内容?
Q世界上l没有一U暗器能比孔雀更厉害Q也l没有一U武器能比孔雀更丽……孔雀娇的w躯中隐藏着巨大的威?#8230;….NET框架的博大精深,正如同孔雀一L丽而深不可。)
二、面向对象Y件开发(七种武器之霸王枪Q?
开发h员应该熟悉面向对象Y件开?OOP)基本概念Q熟悉面向对象Y件开发中的类、ѝ封装、多态等概念Q具备良好的面向对象软g开发思想和设计原则?
Q霸王,力拔山兮气盖世。枪Q百兵之是为枪……霸王枪是世上最霔R的兵器之一……正如面向对象软g开发,它大通吃Q不论是采用何种软g开发框Ӟq是使用不同的开发语aQ面向对象Y件开发在其中畅通无阻,霸气十。)
三、C# (七种武器之离别钩)
开发h员应该熟l掌握C#q门面向对象~程语言Q虽?NET框架支持多种~程语言Q但C#无疑是最z、用者最q泛和功能最强大的一U?
Q离别钩是一件武器,无论钩住人的M部位Q都能造成d……但用它的初衷却是ؓ了能够与所q人相?#8230;…C#是一门年ȝ语言Q它的出玎ͼ让更多的开发者爱上了C#Q脱MVB和ASP的阵营,造成d。)
四、ASP.NETQ七U武器之玉刀Q?
开发h员应该理解ASP.NET的页面生命周期、熟悉配|文件的格式、熟悉ASP.NET的各U服务器控g和数据控件、了解ASP.NET中的各种对象Q了解ASP.NET2.0新特性?
Q刀是最Ҏ上手的武器,也是使用最q泛的武?#8230;…ASP.NET技术在|站开发当中的应用Q正如同刀一样地使用频繁Q更何况是一把华丽的玉刀。碧玉刀本n也是实力的象征,如同ASP.NET在WEB开发中的位|。)
五、数据库(七种武器之长生剑)
开发h员需了解各种L数据库,熟悉数据库的规范设计、精通SQL及存储过E、触发器的编写?
Q长生剑Q世上最锋利的剑Q剑气威力强大而又持箋不断、ľl不?#8230;…正如同数据库一P吸纳吞吐Q化大象于无形,强力支撑着软gpȝ。要惛_IT界获得长生,q你数据库的功底了。)
六、AJAX技?JAVASCRIPT和XML)(七种武器之多情环)
XML和JAVASCRIPT的跨q_Ҏ,在实际Y件开发中的运用越来越q泛Q由于现代Y件对用户界面和WEB前端的日益重视,集JAVASCRIPT和XML技术于大成的AJAX正在行Q特别是在基于WEB2.0的网站开发中?
Q多情环是一U奇特的武器。无论套住了什么,立刻q紧地~住Q绝不会再脱手,像多情的恋Z?#8230;…JAVASCRIPT和XML技术已l出现多q_此前一直不痛不痒,但由于集JAVASCRIPT和XML于大成的AJAX技术的出现及其在互联网上的不断应用Q又重新焕发出生命活力,像多情的环一P众多的开发者牢牢系住,?006q红透了整个IT界,2007qAJAX技术将l箋U火。)
七、Y件体pL?招_)
优秀的Y件离不开优秀的Y件体pL构,作ؓ开发h员,要想在IT行业更进一步,需要具备系l的、良好的软g体系架构思维Q从而从更高层次军_软g的整体系l框架?
Q拳头也是一U武器。而且是无可替代的武器。当分散的五指握成拳_它的力量又岂仅仅是原来的五?#8230;…优良的Y件体pL构是整个软g开发体pȝ核心Q就如同招_一P它是直接而致命的。但有一点,不是每个人的招_都可以用做武器的。)
l束语:无论多可怕的武器Q也比不上hcȝ信心。所以hcL厉害的武器。便是自q信心。相信你自己Q做最好的自己Q你׃成功Q?
]]>
]]>
1QC++的程序员wh普遍较高Q当Ӟ前提是你必须是高手。我所在的城市Q那些公司根本就招不到合格的C++E序员,一斚wC++E序员要求高Q学习C++的h来少了。当Ӟ怀着q个目的Q你或许永远无法成ؓC++高手Q但我把q个原因攑֜最前面Q可以给大家一个很明确的激励,当你接触C++后,发现从学习中获得乐趣比高的工资更有动力;
2QC++的优势是用来开发大型YӞ从中可以学到很多优秀的Y件设计思想。C++不是软g开发的首选工P一般说来,大多人更愿意学习和用VBQؓ什么,单。简单的另一个方面是功能的局限。微软公司恨不的所有h都学VBQ只有他一家会C++。容易上手,大家都喜Ƣ学Q喜Ƣ用Q很多h拿一?00늚书,看个两三个星期,p得自己是个程序员了,可以开发Y件了Q而且觉得做出来的东西很不错。当软g规模大到一定程度的时候,其他语言p来越无法NQ这时C++的优势就体现出来了。你说做个成l管理系l,Z查询pȝQ用VBQDELPHIQC#QJAVA都行Q但是例如银行,电信Q保险,操作pȝQ数据仓库,囑Ş处理Q编译系l,较底层的软gӞ其他工具几乎是无法完成的。就说C++的指针,JAVA没有Q在遇到数据量交大的数据排序Q搜索,动态内存分配时Q它没有办法了。所以说Q学习C++Q不仅仅是学到的一U语aQ还学习了优U的Y件设计思想?br />3Q学习C++可以学习到计机底层的理论,即不是用C++开发,对计机q行机制的理解,对徏制稳定的pȝQ对q用其他语言Q也是一U促q。这一点,我是在学习过E中体会到的Q所以,要说Z大家可以接受的理由来较难Q大家以后学习就知道了?/p>
其次Q教材很重要Q要看经典名著,而且如果p好,最好看原版英文教材?br />l典之所以成为经典,是因为经历了考验沉淀下来的东ѝ去q?月䆾Q当我打{向C++的时候,曑我一位同事咨询,他向我推荐了《C++~程思想》,q说叫我一定要诅R当我读完前面三到四章的时候,发觉自己找C感觉。接下来Q我一口气d了整本书Q当然其中很多东西还是无法真正理解,q是一本很深邃的书。废话少_我现在把我自qq的C++参考书c列出来Q?/p>
我今q?9岁了Q?25岁研I生毕业Q工?4q_回头看看Q应该说C不少的弯?
Q有一?
l验和教训。现在开一个小公司Q赚的钱刚够dp口的。看看这些刚毕业的学生,对前
景也很迷茫,x砖引玉,谈谈自己的看法,局限于理工U的学生Q我ҎU的不懂Qn
边的朋友也没有这一cd的?
91q研I生毕业Q那时出路就?U:留在北京的国营单位,搞一个北京户口,q是最
好的选择。到后来??q内Q户口落定了Q又分成4条出路:
1?上国内的大企业,如:华ؓ
2?自己做公司,做品开发;
3?上外企,比如Q爱立信、诺Z
4?自己做公司,做买卖;
5?UL加拿?
我想Q首先要看自己适合做什么?做技术还是做买卖?
做技术,需要你Ҏ术感兴趣。我掰着C一遍,我们研究生班?0来号人,实际?
Q适合做技术的Q大概只??个hQ这几个人,1个现在还在华为,3个移民加拿大了,
现在q?个hLq可以,在华为的同学也移民加拿大了,他在华ؓ呆了6q_在华为奖?
工资加v来大?0万吧Q还有华为的股票Q再q几q_华ؓ的股一上市Q也能g100?
200万。要是一毕业去华ؓQ那现在q对不是这个数字了?
要是做技术,最好的是上大公司Q国内的大型企业Q象华ؓ中兴肯定是首选,能学
到很多东ѝ华然篏Q但是,q轻Z能怕篏Q要是到老了Q还需要去打拼Q那才是
真的累啊?
在外企,我想他们主要是技术支持和销售,但是技术是学不到的Q当然不能一概?
论,我指的是象爱立信和诺ZQ真正的研发不会在中国做的,学到的也不如在华为多Q?
其它的中兴我不是很了解,我想应该也不错啊?
一个h都有一技之长Q有傍n之技Q那是最好的Q走到哪里,都能有一口饭吃,q吃的不
错,q是传统的观炏V?
M技术都是要在某个行业去应用Q这个行业市大当然越好;要在一个领域之?
Q做深做_,成ؓl对的专Ӟq是走技术道路的人的选择。不要蟩来蟩去,在中国,?
的行业你要做精׃Q都可以产生很大的利润?
研究生刚毕业的时候,做品开发的有不hQ都是自己拍拍脑子,觉得q个产品?
市场Q就自己出来做。现在看来,我的q些同学Q做产品开发的成功的没有一例,Z?
Q资源不?
1Q?资金Q刚毕业的学生啊Q就是没钱;没钱Q也意味着你开发的东西都是品;
而且只能哥几个自׃Q研发、生产、销售都是一个h或者几个h自己来,没有U篏Q什
么都是重新来q?
2Q?QQ何一个行业,要想q去Q需要有很深的h脉,否则Q谁会用你的东西?
Q谁敢用你的东西啊?
我看到的Q我q个班上开发品的Q自p在坚持的Q只剩下一个h了,说实在的Q?
到现在,没有自己的汽车,也没有自q房子Q的挺惨的。现在出国的不说了,在外?
、在华ؓQ至都是几十万的年薪了Q还有各U福利,是产品开发成功了Q又能如何?
也就是这样了Q但是以前那些年Q都没有金钱的积累,{于白干?
我n边的一个自动化pȝ研究生班的同学,能靠自己开发品活得还可以的,也只?
2个h。说明这条\不是那么好走的啊?
其次是上外企。我?个同学,一个上了爱立信Q一个先到爱立信后到诺基亚,都
的不错。到诺基亚的后来利用在诺Zl识的h脉(是哪些电信的头头脑脑)Q自己开
了公司,也赚了不的钱?
外企最大的好处是除了能学到比较规范的理外,q能l你的职业生涯镀金。到?
一个外企外Q再到同行业的外企我惛_很容易了。而且外企的收入高啊?
自己做公司,做买卖,一开始有3?个h走这条\Q但是真正发财的只有一个hQ其
他h后来上外企了。做买卖Q还是要有一定的天赋Q还有机遇。要有对金钱的赤裸裸的欲
望,要有商业上的头脑。后来我们同学在一赯Q说Q我们即使给自己q个机遇Q也未必
能做的好。何况当旉个同学看好的产品Q做一个台湾品的代理Q,我们大家都没有看
好,说明Q真理还是掌握在数人手里?
到后来,同学们纷UL民移民加拿大?
UL加拿大对搞技术的人来_q是一个不错的选择Q但是要早Q练了几q的技?
Q就赶紧出去Q大概是?996q走了不?0个,现在都还可以Q买了房子和车了。要是晚
了,语言再学也难了,而且在国内都Lq可以了Q也没有必要出M?
我自己呢Q先是在国营的研I所混了4q_后来C家公司干?q_2002q出来自己做?
司,现在也就是了一个温饱吧Q算是有房有车,有点U蓄Q但是不多,q有一个可q
奛_。回首这10来年Q有一些经验和教训?
1Q?要有一个职业生涯的规划。首先需要定位自己做什么合适,是做买卖q是做技?
Q一条\走到黑;当然Q做了技术,后来改行也行Q?
2Q?做技术,是要做_ց深,成ؓq个行业的这个技术的专家Q最好就是去国内?
大公司,才能全面学到东西Q能够给你培训的ZQ如果大公司q不去,先到公司练技
术,找机会再到大公司去镀金,学高q技术。千万不要自己做产品Q要做也是对q个?
业熟悉了Q再d?
3Q?U极争取Z。积极争取学习和q步的机会。比如,做技术,需要多ȝQ多
学习Q来提高自己的水q뀂一门技术,只要有机会去学习Q都能学的会Q要是没有机会,
天才也没有办法学到这个技术。柳传志pQ杨元庆是“哭着喊着要进步”,实际上,
是争取自己的机会;当然Q这U强烈的q步Ʋ望Q也是领导看重的地方。每一步都走在
前面Q积?0q_你就有了比其他h更多的机会了?
4Q?U篏个h的信誉。从你的职业生的第一天,p按照诚信的原则办事。要做到
Q当Z提v你的名字的时候,_q哥们还不错Q做事还行?
5Q?注意利用资源。如果你有有q亲戚、成功的长辈或者朋友,可以充分利用q些
ZQ得到更加顺利的发展前景?
6Q?注意财富的不断积累。h生要惛_到自由,财富是很关键的。否则,永远Ch?
息,永远看h脸色。h都是势利眹{今后的家庭、职业生涯,金钱的积累很重要Q没有钱
Q永q不能开张自q事业Q得到更多的ZQ胦富要做到逐年U篏Q你才能家庭生活q?
。没有钱是不可能有幸的家庭的?
7Q?注意的积累。最l,事业要靠在社会上的h脉的资源。要注意认识在你q个
行业的hQ结交他们,最l他们会成ؓ你事业上的助力?
8Q?L贵h相助。要扑֤老板来帮助你Q得到大老板的赏识。想想看Q大蛋糕Q切
一点就够了Q小蛋糕Q都l你也吃不饱啊?
9Q?多听听成功的前辈和成功的朋友的意见。注意少听家里长辈的意见Q尤其是都已
l退休的长辈Q他们对C会的认识还停留在很久以前,而这个社会已l发生很大的变化?
。最重要的是Q长辈有时候会强求你做一些事情,但是Q最l的l果他们是不负责的。只
有你才能对自p责?
]]>
岭澳核电有限公司
黄福?
---- 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数据库开发经验ȝ
微YQ这头已被法官和黑客们折腑־既疲惫又恼怒的狮子Q发誓要保住它头上的王冠。于是拼全力,拿出了看家的本事—?NET战略。而作?.NET的核心开发语aQC#顺理成章地出了水面?/font>
有选择有痛苦Q程序员Q你选择跟在谁的后面Q?/font>
要找出答案就不得不来作一番比较和预测Q?/font>
先除M切非技术方面的因素不议QC# 无疑是自盘古开天以来这个hcd球上最好的~程语言Q它几乎集中了所有关于Y件开发和软g工程研究的最新成果。面向对象、组件技术、类型安全、版本控制、跨q_异常处理、自动内存管理、代码安全管理……你不可能在另外的一U语a中找到所有这些特性。也许的也许Q这Ӟ你想CJAVAQ然而,C# 实是走得更q?br />
回顾历史Q非技术的因素好像往往更能军_一个品的未来Q尤其在计算Y件的历史上?/font>
技术卓的产品Q如OS/2、Mac OS、UNIX{,都|在了Windows那漂亮的脸蛋儿下。而这一ơ,微Y的角色好像从一个赤手空拳的革命者变成了仗势Zh的老地主,如果真是要变天,那C# q孩子岂不是投错了胎Q也可能情Şq如此p糕Q毕竟瘦ȝ骆驼比马大,而且C# 已经提交l了一个标准化l织Q一旦成了国际标准,说不准真有哪个大侠(也有可能是微软自己)l移植到Linux 和别的^C?/font>
要是那样的话QJAVA弟可就惨了。因为JAVA的用户主要是|络服务的开发者和嵌入式设备Y件的开发者,嵌入式设备Y件不是C# 的用武之圎ͼ而在|络服务斚wQC# 的即时编译和本地代码CacheҎ比JAVA虚拟机更hl对的性能优势。何况C# 一旦成Z个像C++ 一L公共的标准,软g开发商既可以省去JAVA的许可证费用Q也不必担心成ؓ微Y的奴Ӟ那些反微软的人士和主张厂商独立的人士可能也不会有什么意见。这可能正是微Y所期待的?/font>
再看QC# 和传l通用快速开发工具—VB、DELPHI{的较量Q又是地地道道的白刃战。可能到时最惨的E序员就是VBE序员,在微软,VB像MQ的克林顿Q不但失M所有的光辉Q而且׃~n。想惛_QVB6写的目必须用{换工兯{换成Z.NET的代码才能在VB7中调入,几乎面目全非。由于VB7遵@?NET而徏立的通用语言规范QCLSQ,几乎把所有原来只在C++、JAVA{语a中可以运用的Ҏ统l加了进来,只是语法和原来兼宏V如果你是第一ơ在VB7中看到自q旧VB6目转换之后的代码,一定要当心你的心脏Q所以,努力吧,别告诉我你将此退休。DELPHI的状况也好不到哪里去Q原来的看家本领是做起应用来又快又好Q可现在看看最新的VS.NET Beta 1, 你会感到如此熟悉Q众多的属性列表、组件……,唉,只有感叹的䆾了! 最后,我们l品品,其实在编E语a中真正的怸多年来一直就是C++Q所有的操作pȝ和绝大多数的商品软g都是用C++作ؓ主要开发语a的。JAVA的程序员l大多数也是C++的爱好者,PHP的成功里面也有类似C++的语法的功劳。在操作pȝ、设备驱动程序、视频游戏等领域QC++在很长的旉内仍占据主要地位,而在数量最大的应用软g的开发上QC# 很可能取代C++的位|?/font>
首先QC# 和JAVA一P直就是照搬了C++的部分语法,因此Q对于数量众多的C++E序员学习v来很Ҏ上手Q另外,对于新手来说Q比C++要简单一些。其ơ,Windows是目前占垄断C的^収ͼ而开发Windows应用Q当然微软的声音是不能忽略的。最重要的是Q相对于C++Q用C# 开发应用Y件可以大大羃短开发周期,同时可以利用原来除用L面代码之外的C++代码?/font>
人无完hQ编E语a它也是如此,C# 也有q?/font>
首先Q在大量的现有Windowsq_上,C# 的程序还不能q行Q因为C# E序需?.NETq行库作为基Q?.NETq行库将作ؓC代的WindowsQWhistlerQ的一部分发行Q?或以Service Pack的Ş式提交给Windows Me ?Windows 2000用户。所以在q期QC# 会主要在服务器上得到应用。其ơ,C# 能够使用的组件或库还只有 .NET q行库等很少的选择Q没有丰富的W三方Y件库可用Q这需要有一个过E,同时各Y件开发商的支持也很重要。第三,JAVA的成功因素里有一些是反微软阵营的ҎQ虽然“只写一ơ,到处q行”只是一句口P但毕竟已l是一U成熟的技术。而C# 的鼓吹者目前只有名C佳的微YQ且只能q行在Windows上。实际上q两U语a都不是不可替代的Q理智的_对Y件开发商而言Q什么用的最熟什么就是最好的工具。尤其对C++的用者,C# 没有带来MC西,因ؓ.NETq行库在C++中也可以使用Q没有要换的l对的理由?/font>
据以上分析,我们可以理所当然地得出结论:q几q_C# 不可避免地崛vQ在Windowsq_上成Z角,而JAVA在UNIX、Linux{^C成ؓ怸QC++ l在pȝ软g领域大展拌。非常有意思的是,q些语言的语法极其接q,因ؓJAVA和C# 都是由C++发展而来的。其他的开发工具当然还会在相当长的旉里l他们的旅程Q不q在市场份额上,不可避免地受到冲击?/font>
企业计算领域对h才的需求显然永q是数量最大的因ؓq是计算机应用最多的领域。搞q方面的好处?
(1)人才需求量极大从事企业计算的公司在IT企业中占了大多数。除非在专业上一无特长一般在q一领域总能扑ֈ工作?
(2)q方面的入门门槛相对较低(如果你的软g功底不是很深可考虑q一领域)
(3)q方面的大公司较多大公司要赚大钱所以多精力花在企业计业务上Q如与正规高校Y件学院同学目前实习的CitiCorp、HP、IBM、SAP、NEC{公叔R属这一领域的公司。如果将来想到大公司找一份相对稳定的工作Q从事这斚wZ要大很多?
但从事这一领域的缺点也是明昄:
׃q方面的入门门槛相对较低Q虽然这斚w的h才需求量是最大的Q但来竞争Ҏ会较多。您会发玎ͼ即他原不是学IT专业的hQ也总H击几个月后Q做得照样像模像栗特别是当您q纪渐大后,您可能会发现Q后面的q轻人可能很Ҏq上你的水^。如果您来到国外去工作Q你可能会发C事这领域的h更多且高手如云。当Ӟ若您在这一领域l过多年企业l验Q达到较高境?如能设计软g架构)Q则wh永远是高的。国内在q方面h才领域的主要问题是,有经验的高手太少Q皮毛了解的人太多?
从事企业计算领域Q最重要的技能型技术课E是
(1) J2EE架构与程序设?/p>
(2) 大型数据库系l?如Oracle)
(3) ZUML的系l分析与设计?br />如果说还有什么重要的技能,q可XML与Web Service技术包含进来,若您在这几个领域掌握较好Q则不愁找不到工作。其中尤其以J2EE最为重要,目前J2EE已成Z业计Y件开发的最主要q_Q也是正规高校Y件学院的最重要评之一?/p>
管该课E只能作为选修课,我们希望正规高校软g学院同学无论来想从事何U方向,都应学一下J2EE评Q至可为将来找工作备一手关键功夫。包括想从事嵌入式或其它领域的同学,也是很有必要学一下J2EE的,毕竟J2EE是目前最重要的^C一Q即使您来不想从事企业计算领域Q了解一下J2EE也是必要的,像一门常识课E一栗?/p>
其它与企业计关p较密切的技能还包括: Dot Net架构与程序设计、Y件测试技术、Y仉|管理,该领域较高层ơ的技能包括数据仓库技术、构件与中间件技术、设计模式等。像通信协议分析与网l程序设计,Unixpȝ理{也属有些关pȝ评?2U本学期开讄企业计算评不多Q主要是J2EE、Oracle/MSSQL、UML{企业计领域的最关键技能型技术课E都已学完了?/p>
您应在空余时间将J2EEQDB、UML{技术再深入地钻研下去,一定要在某个领域有深入的掌握。只是跟着听课Q即使学了再多课E也是没用处的,自己ȝ下去才是最重要的。只一个J2EE便是博大_深的,_你啃下去的,ȝ下去Q您会发Cq要学的相关知识q有很多(包括EJB、XML、Web Service、Design Pattern{??
虽然从事企业计算的h才很多,但以下企业计领域无论国内外都属E~Zh?
(1) 掌握大型ERPpȝQ主要是SAPpȝQ包括SAP Basis(pȝ理)或SAP ABAP(~程)或SAP功能模块实施(特别是胦务模块FI的实?。SAPNwh是最高的Q而且非常难找。其它大型ERPpȝQ掌握PeopleSoft、Oracle Finacial、J.D.Edward、Siebel{大型ERP软gpȝ的h也很值钱。这斚w的h之所以n价奇高,主要是因些Y件很专业Q特别大Q很难有D版可学习Q只有特大企?如世?00强,90以上使用SAP)才用得vQ而且必须有实际工作经验才能掌握。如果是一个个Zh都很Ҏ有机会接触的软gQ那么这斚w的h通常׃会稀~。如果大家将来有Z接触学习q些大型ERP软gpȝ的机会,毫不犹U地抓住,那将捧上一辈的金饭?/p>
在国外,会SAP的h特别值钱。物以稀Q这永远是颠扑不破的真理。SAP的hg仅是因ؓ他是一个ERP软gQ?而是其中体现的现代企业管理理?如根据订货需求自动安排原料采购和生计划{?。一?00强公司绝不会像国内很多企业那P用J2EE从头设计企业的ERPpȝ(卛_是怎样的h力投入,而且设计出来的系l怎么可能是完善的)Q一定都会用SAPq样成熟的ERP软g。用不vSAP的公司可能会用J2EE设计ERPpȝ?
(2) 掌握IBM大型机技术的人,如S/390LQMVS操作pȝQJCL作业控制语言QCOBOLE序设计语言QDB2关系数据库或IMS层次数据库,CISC中间件交易控制系l等IBM大型Z用技术。国内五大银行,以及国外l大多数银行的后台系l用的都是以上q_。IBM大型机号U永不宕且q_相对闭(q样最安全)Q所以这些要求在24*7环境中连l运行的关键应用(术语叫mission critical applications)都采用IBM大型机?/p>
q方面的人才之所以稀~,是因Z大型机的人都是老h(90q代以前搞IT的h)Q全世界新毕业的IT毕业生不可能再去学IBM大型?q是一U相对“古老“的技?没有Ch补上而银行的pȝ必须l持下去而且银行q要不断开发新业务(如新的存Ƒ֓U?虽然对IBM大型Zh才的l对需求量不很大但相对恒定银行到哪里找q方面的Ch很难扑ֈ. 若好找花旗Y件也不会花那么大的代价去培训我们的实习同学了(d培训20多个人听说公司就׃数十万元培训?. 如果您将来到国外扑ַ作会IBM大型机可能是最好找工作的领域之一了而且保证扄都是大银行等好工作我以前教过的计机专业90-94U的一些同学凡是毕业后从事大型机开发的现多在国外一些很好的公司工作(有几位同学在各国各公司蟩来蟩ȝ直如履^?.
其实我觉得我们最q福的同学就是在花旗软g做IBM大型机银行Y件的同学q样的机会太隑־?正规高校软g学院00U?2班一位同学当初放弃保研看准在花旗软g做大型机q且非常努力q未毕业公司便派她到国外参加一个项目的开发成了项目骨q我觉得她当初选择是完全正的Q?1U一位女同学刚刚也自愿放弃了保研Z去花旗做大型机,我们愿她将来也能有好的前景。其实像花旗软gd安排q励员工读在职研究生,q样开明的公司目前q不多的Q在职读研也是一U不错的选择Q又不会失去自己喜欢的实习工作机会,能兼?M的最l目地还是ؓ了工? 如果您将来在国外扑ַ作根本没人管您是什么文凭国外企业绝不会花冤枉钱只会招有领域工作l验能立即上手的人用最的钱在限定的时间完成项? 而在国内因ؓ人力成本较低公司招聘一很多高学历的人才管可能Ҏ用不到这么高的学历但国内的h力太便宜了ؓ什么不高消费一下h才呢q样公司的门面还要好看些?
(3) 其它如掌握数据仓库技术的人在国内也很? 目前最L的数据仓库^台应是ORACLE的数据仓库工? 在国外会一些特D数据仓库的人如NCR/TEREDATA的h非常难找.
q轻人充满热情喜Ƣ追逐一些热门技术,q当然正的毕竟学习SAP和大型机的机会毕竟不多毕业时先能扑ֈ一份工作是重要? 但我怿随着q纪的增长大家将来慢慢都会思考的掌握一竞争对手较的l技的重要性将来如果自己到国外工作什么技术最好找工作(Ҏ软g的h到国外工作或UL是最Ҏ的也许您现在不想但我怿工作多年以后很大一部分同学可能惛_国外闯荡一?你要考虑你今后一生的\什么样的绝技是最E_最L最高收入的. 搞Y件的人当q纪大些时您可能更向住像搞医学h的那栯更多靠经验吃饭而不L天像q轻人那样不得不去追逐不断出现的软g新技术这个时候也许您也许会发现如果您在SAP或大型机{方面有些绝技您会有很大优势因些较偏的领域其技术变化是相对很缓慢的.
我还记得?002q时我曾在业余时间与一位d国h合作面试一些IT人才到d国去那时h各公司发来的需求有很多是SAP和IBM大型机的我们在众多应聘者中最后也未找C个在q方面有l验甚至是有一点经验的. 相反掌握行技术的人因太多而不很值钱.
扑ַ作时不仅要盯着国内市场q要有一U放眼全球的眼光Q对搞Y件的人您来完全可能到其它国家去工作. 其是在Ƨ美、日本、新加坡{国Ӟ对SAP(包括IBM大型?人才的需求是很大的。毕竟比同学见得多些提醒同学来多留意有学习q些l技的机会一旦有Z当仁不让. 国内的h才市场可讉Kwww.51job.comQ国外的IT人才需求可讉Kwww.hotjobs.com?a >www.workopolis.com?a >www.monster.com{著名网站。应l常讉Kq些|站Q以了解市场对h才的具体需求,早做准备?www.uiok.net
以上对企业计领域的观点供大家参?虽然观点未必正确但确是直a不讳. M每个人的脑袋都长在自p子上每个人都应有自己的判?
q要注意我以上纯_Ҏ从将来就业的角度谈问? 如果您将来准备到国外M则应重视基础译փCAssemblyOOPDiscrete MathData StructureOpeating SystemDatabase PrincipleNetworkSoftware EngineeringCompilerDigital CircuitComputer GraphicsComputer Component and Architecture{基译֜国外大学IT专业中一般都能找到相同课E若国内学过到国外读书时一般可甌免修一部分. 但我也想提醒同学如果您将来毕业时万一甌国外大学不成不得不去扑ַ作时Q若只将_֊花在q些IT专业学生都会的基课上(传统IT教育模式) 未掌握一些像J2EE{技能型技术是不容易找C份工作的我们已有同学有这L教训。从扑ַ作的角度Ԍ企业兛_的不是您学过什么课E,而是兛_您能做什么,有什么技能,能做什么项目?/p>
二、关于嵌入式pȝ方向
嵌入式系l无疑是当前最热门最有发展前途的IT应用领域之一。嵌入式pȝ用在一些特定专用设备上Q通常q些讑֤的硬件资?如处理器、存储器{?非常有限Qƈ且对成本很敏感,有时对实时响应要求很高等。特别是随着消费家电的智能化Q嵌入式更显重要。像我们q_常见到的手机、PDA、电子字典、可视电话、VCD/DVD/MP3 Player、数字相?DC)、数字摄像机(DV)、U-Disk、机盒(Set Top Box)、高清电?HDTV)、游戏机、智能玩兗交换机、\由器、数控设备或仪表、汽车电子、家电刂葡低场⒁搅埔瞧鳌⒑教旌娇丈璞傅鹊榷际堑湫偷那度胧较低?
嵌入式系l是软硬l合的东西,搞嵌入式开发的人有两类?
一cL学电子工E、通信工程{偏g专业n的hQ他们主要是搞硬件设计,有时要开发一些与g关系最密切的最底层软gQ如BootLoader、Board Support Package(像PC的BIOS一P往下驱动硬Ӟ往上支持操作系l?Q最初的硬仉动程序等。他们的优势是对g原理非常清楚Q不x他们更擅长定义各U硬件接口,但对复杂软gpȝ往往力不从心(例如嵌入式操作系l原理和复杂应用软g{??
另一cL学Y件、计机专业n的hQ主要从事嵌入式操作pȝ和应用Y件的开发。如果我们学软g的h对硬件原理和接口有较好的掌握Q我们完全也可写BSP和硬仉动程序。嵌入式g设计完后Q各U功能就全靠软g来实CQ嵌入式讑֤的增值很大程度上取决于嵌入式软gQ这占了嵌入式系l的最主要工作(目前有很多公司将g设计包给了专门的g公司Q稍复杂的硬仉交给台湾或国外公司设计,国内的硬件设计力量很弱,很多嵌入式公司自己只负责开发YӞ因ؓ公司都知道,嵌入式品的差异很大E度在Y件上Q在软g斚w是最有“花头“可做的)Q所以我们搞软g的h完全不用担心我们在嵌入式市场上的用武之地Q越是智能设备越是复杂系l,软gv关键作用Q而且q是目前的趋ѝ?
从事嵌入式Y件开发的好处?
(1) 目前国内外这斚w的h都很E~。一斚wQ是因ؓq一领域入门门槛较高Q不仅要懂较底层软g(例如操作pȝU、驱动程序软g)Q对软g专业水^要求较高(嵌入式系l对软g设计的时间和I间效率要求较高)Q而且必须懂得g的工作原理,所以非专业IT人员很难切入q一领域另一斚wQ是因ؓq一领域较新Q目前发展太快,很多软硬件技术出现时间不长或正在出现(如ARM处理器、嵌入式操作pȝ、MPEG技术、无UK信协议{?Q掌握这些新技术的人当然很找。嵌入式人才E~,wh自然高Q越有经验h格就高。其实嵌入式人才E根本原因可能是大多Ch无条件接触这需要相应的嵌入式开发板和Y件另外需要有l验的hq行指导开发流E?
(2) 与企业计等应用软g不同Q嵌入式领域人才的工作强度通常低一?但收入不?。搞企业应用软g的IT企业Q这个用Lpȝ搞完了,又得L下一个用LQ而且每个用户的需求和完成旉都得按客戯求改变,往往疲于奔命Q重复劳动。相比而言Q搞嵌入式系l的公司Q都有自q产品计划Q按自己的节奏行事。所开发的产品通常是通用的,不会因客L不同而修攏V一个品型号开发完了,往往有较长一D늩闲时?或只是对软gq行一些小修补)Q有旉q行充电和休整。另外,从事嵌入式Y件的每个人工作范围相对狭H,所涉及的专业技术范围就是那?ARM、RTOS、MPEG?02.11{?Q时间长了这些东西会搞有l验Q卖卖老本Q几句指g够让那些初入道者琢半q的。若搞应用YӞ可能下一个客戯换成一个完全不同的软g开发^収ͼ那就苦了?
(3) 哪天若想创业Q搞自已的品,那么嵌入式是一个不错的LQ这可不像应用Y仉样容易被盗版。土木学院有一个叫启明星的公司开发出一个好象叫“工Ee”的掌上PDAQ施工技术h员用该PDA可当行土木概预算和其它土木计,据说销路特好。我认识的某大学老师Q他开发的饭馆用的点菜PDA(WinCEq_Q可无线q网和上|?Q据他说销路不错,饭馆点点PDA让客L菜,多显z֤档次。当q有一l同学在学WindowsE序设计评时用VC设计了一个功能很强的点菜pȝ做ؓ评目Q当时真惛_议他们将q个软g做成PDAQ估计会有些销?上v火R站南q场的Macdonald便用很漂亮的PDAl用L食品Q像摸像L)。这些PDA的硬件设计一般都是请其它公司l订?q叫“脓牌?OEM)Q都是通用的硬Ӟ我们只管设计软g变成自q产品了?
从事嵌入式Y件开发的~点?
(1) 入门L较高Q所用到的技术往往都有一定难度,若Yg基础不好Q特别是操作pȝUY件功底不深,则可能不适于此行?
(2) q方面的企业数量要远于企业计算cM业。特别是从事嵌入式的企业数量较?企业要搞自q产品创业)Q知名大公司较少(搞嵌入式的大公司主要有Intel、Motorola、TI、Philip、Samsung、Sony、Futjtum、Bell-Alcatel、意法半g、Microtek、研华、华为、中兴通信、上q电{制造类企业)。这些企业的习惯思维方式是到电子、通信{偏专业找人。由于正规高校Y件学院以前毕业生以企业计ؓ主,所以正规高校Y件学院与q些企业联系相对较少。正规高校Y件学院正U极努力Q目前已与其中部分公司徏立了联系Q争取今后能有正规高校Y件学院同学到q些企业中实习或׃?
(3) 有少数公司经常要士以上的h搞嵌入式Q主要是Z嵌入式的隑ֺ。但大多数公怹q无此要求,只要有经验即可?
正规高校软g学院同学若学习嵌入式Q显然应偏重于嵌入式软gQ特别是嵌入式操作系l方面,应是我们的强V对于搞嵌入式Y件的人,最重要的技术显然是(实际上很多公司的招聘q告上就是这样写?:
(1) 掌握L嵌入式微处理器的l构与原?
(2) 必须掌握一个嵌入式操作pȝ
(3) 必须熟悉嵌入式Y件开发流Eƈ臛_做过一个嵌入式软g目?
正规高校软g学院在嵌入式软g斚w最重要的课E包?
(1) 嵌入式微处理器结构与应用:q是一门嵌入式g基础评Q正规高校Y件学院用q门译֏代了传统的“微机原理与接口”课E?目前国内已有部分高校IT专业q样做了Q因x86微机原理与接口很难找到实际用处,只ؓ教学而已)。我们说q,嵌入式是软硬件结合的技术,搞嵌入式软g的h应对ARM处理器工作原理和接口技术有充分了解Q包括ARM的汇~指令系l?/p>
若不了解处理器原理,怎么能控制硬件工作,怎么能写省内存又q行高速的最优代?嵌入式Y件设计特别讲I时I效?Q怎么能写出驱动程?驱动E序都是与硬件打交道?很多公司招聘嵌入式Y件h员时都要求熟悉ARM处理器,来若同学到公司中从事嵌入式软g开发,公司都会l你一本该讑֤的硬件规D明书 (xxx Specification)Q您必须能看懂其中的内存分布和端口用等最基本的说?像x86汇编一?Q否则怎么设计软g。有些同学觉得嵌入式处理器课E较枯燥Q这主要是硬件课E都较抽象的原因Q等我们的嵌入式实验?0月䆾建好后,您做了一些实验后׃觉得看得见摸得着。还有同学对ARM汇编不感兴趣Q以为嵌入式开发用C语言p够了。其实不应仅是将汇编语言当成一个程序设计语aQ学汇编主要是ؓ了掌握处理器工作原理的。一个不熟悉汇编语言的hQ怎么能在该处理器写出最优的C语言代码?/p>
在嵌入式开发的一些关键部分,有时q必d汇编Q如Bootloader{?可能q包括BSP)。特别是在对速度有极高要求的场合(如DSP处理器的高速图像采集和囑փ解压~?Q目前主要还要靠汇编写程?我看到过很多公司是这样做?。当您在一个嵌入式公司工作Ӟ在查看描q原理的手册Ӟ可能很多都是用汇~描q的(我就遇到q?Q这是因为很多硬件设计h员只会写或者喜Ƣ用汇编描述Q此时您必ȝ懂汇~程序,否则软硬件h员可能就无法交流。很多嵌入式职位招聘旉要求熟悉汇编?
(2) 嵌入式操作系l类评
除了WinCE的实时性稍差外Q大多数嵌入式操作系l的实时性都很强所以也可称为实时操作系lReal Time Operating System.从事嵌入式的须掌握一个嵌入式操作pȝ(当然掌握两个更好)q在嵌入式的所有技术中是最为关键的了。目前最重要的RTOS主要包括:
W一cR传l的l典RTOS:最主要的便?Vxworks 操作pȝQ以及其Tornado开发^台。Vxworks因出现稍早,实时性很?据说可在1ms内响应外部事件请?Qƈ且内核可极微(据说最可8K)Q可靠性较高等Q所以在北美QVxworks占据了嵌入式pȝ的多半疆山。特别是在通信讑֤{实时性要求较高的pȝ中,几乎非Vxworks莫属。Vxworks的很多概念和技术都和Linux很类|主要是C语言开发。像Bell-alcatel、Lucent、华为等通信企业在开发品时QVxworks用得很多。但Vxworks因h格很高,所以一些小公司或小产品中往往用不赗目前很多公叔R在往嵌入式Linux?听说华ؓ目前正在q样?。但无论如何QVxworks在一D长旉内仍是不可动摇的。与VxworkscM的稍有名的实时操作系l还有pSOS、QNX、Nucleus{RTOS?
W二cR嵌入式 Linux 操作pȝ:Linux的前途除作ؓ服务器操作系l外Q最成功的便是在嵌入式领域的应用Q原因当然是免费、开源、支持Y件多、呼拥者众Q这样嵌入式产品成本会低。Linux本n不是一个ؓ嵌入式设计的操作pȝQ不是微内核的,q且实时性不强。目前应用在嵌入式领域的Linuxpȝ主要有两c?一cL专ؓ嵌入式设计的已被裁减q的LinuxpȝQ最常用的是uClinux(不带MMU功能)Q目前占较大应用份额Q可在ARM7上跑另一cL跑在ARM 9上的Q一般是Linux 2.4.18内核UL在其上,可用更多的Linux功能(当然uClinux更可跑在ARM 9??/p>
很多人预,嵌入式Linux预计占嵌入式操作系l的50以上份额Q非帔R要。缺Ҏ熟悉Linux的h太少Q开发难度稍大。另外,目前我们能发现很多教材和很多大学都以ucOS/II为教学用实时操作pȝQ这主要是由于ucOS/II较简单,且开源,非常适合入门者学习实时操作系l原理,但由于ucOS/II功能有限Q实用用得较,所以正规高校Y件学院不其作ؓ教学重点Q要学习应学直接实用的Q比?uClinux很实用。况且熟悉了Linux开发,不仅在嵌入式领域有用Q对开发Linux应用软gQ对加深操作pȝ的认识也有帮助,可谓一丑֤得。据我所知,目前Intel、Philip都在大搞ARMLINUX的嵌入式开发,Fujitum则是在自q处理器上大搞Linux开发。目前在嵌入式Linux领域Q以下几个方面的人特别难找,一是能LinuxUL到某个新型号的开发版上二是能写Linux驱动E序的h三是熟悉Linux内核裁减和优化的人。正规高校Y件学院在该嵌入式Linux斚w的课E系列是:本科生操作系l必修课Q然后是LinuxE序设计选修课,最后是嵌入式Linuxpȝ选修课。正规高校Y件学院在Linux斚w目前已有较强力量Q魏老师和张老师熟悉Linux开发,金老师和唐老师熟悉Linuxpȝ理?
W三cR?Windows CE 嵌入式操作系l?Microsoft也看准了嵌入式的巨大市场QMS永远是最厉害的,WinCE出来只有几年旉Q但目前已占据了很大市场份额Q特别是在PDA、手机、显CZA表等界面要求较高或者要求快速开发的场合QWinCE目前已很行(据说有一家卖工控机的公司板子卖得太好Q以x不及为客戯减WinCE)。WinCE目前主要?.2?.NET)Q开发^C要ؓWinCE Platform BuilderQ有时也用EVC环境开发一些较上层的应用,׃WinCE开发都是大家熟悉的VC环境Q所以正规高校Y件学院学qWindowsE序设计评的同学都不会有多大难度,q也是WinCEҎ被h们接受的原因Q开发环境方便快速,微Y的强大技术支持,WinCE开发难度远低于嵌入式Linux?/p>
对于急于完成Q不x嵌入式Linux冒险的开发场合,WinCE是最合适了(扑ֵ入式Linux的h可没那么好找?Q毕竟公怸能像学生学习那样试试看,保证开发成功更重要。根据不同的侧重?QWinCEq有两个Ҏ版本Q一个是MS PocketPC操作pȝ专用于PDA?掌上电脑)Q另一个是MS SmartPhone操作pȝ用于手机?带PDA功能的手?Q两者也都属于WinCEq_?/p>
在PDA和手机市ZQ除WinCE外,著名的PDA嵌入式操作系l还有Palm OS(因出现很早,很有?、Symbian {,但在WinCE的强劲冲MQPalm和Symbian来日q能有多长正规高校Y件学院可能是全国高校中唯一一家开设专门的“Windows CE嵌入式操作系l“课E的学校Q这主要是基于以下原?正规高校软g学院本n前面便有WindowsE序设计评Q同学学qVC后再学WinCE非常方便自然Q通过学习WinCE同样也可了解嵌入式Y件的一般开发过E,对Linux有惧怕心理的同学也很合适?/p>
很显Ӟ嵌入式Linux永远不可能替代WinCEQ而且来谁占份额大还很难Ԍ毕竟很多人更愿意接受MS的^収ͼ像各国政府都在大力推LINUX已好长时_但您能看到几个在PCZ真正使用LINUX的用h我观察目前在嵌入式^CLINUX是叫得最响但q是WinCE实际用得更多.嵌入式LINUX可能更多地是一些有长远产品计划的公ؓ降低成本而进行长q考虑 二是微Y亚洲研究院对正规高校软g学院WinCE评的支持计划,我们也很希望来正规高校软g学院能有同学通过微Y的面试去实习。WinCE和多媒体(如MPEG技?是微软亚z工E院目前做得较多的项目领域之一他们很需要精通WinCE的h?
ȝ关于嵌入式操作系l类评Q若您觉得自己功底较׃能钻研下去,则可d嵌入式Linux若您觉得自己VC功底较好且想短^快地学嵌入式开发,则正规高校Y件学院的WinCE评是最好的选择?
(3) 嵌入式开发的其它相关软g评
搞嵌入式若能熟悉嵌入式应用的一些主要领域,q样的h更受企业Ƣ迎。主要的相关领域包括:
A、数字图像压~技?q是嵌入式最重要最热门的应用领域之一Q主要是应掌握MPEG~解码算法和技术,如DVD、MP3、PDA、高_视、机盒{都涉及MPEG高速解码问题。ؓ此,正规高校软g学院已预订了一位能开设数字图像处理课E的博士?
B、通信协议及编E技?q包括传l的TCP/IP协议和热门的无线通信协议。首先,大多数嵌入式讑֤都要q入局域网或InternetQ所以首先应掌握TCP/IP协议及其~程Q这是需首要掌握的基本技术其ơ,无线通信是目前的大趋势,所以掌握无UK信协议及编E也是是很重要的。无l通信协议包括无线局域网通信协议802.11pdQBluetoothQ以及移动通信(如GPRS、GSM、CDMA{??
C、网l与信息安全技?如加密技术,数字证书CA{。正规高校Y件学院有q方面的选修课?
D、DSP技?DSP是Digital Signal Process数字信号处理的意思,DSP处理器通过g实现数字信号处理法Q如高速数据采集、压~、解压羃、通信{。数字信号处理是电子、通信{硬件专业的评Q对于搞软g的h若能了解一下最好。目前DSP人才较缺。如果有信号与系l、数字信号处理等评基础Q对于学习MPEG~解码原理会有很大帮助?
(4) 嵌入式开发的相关g基础
对于软g工程专业的学生,从事嵌入式Y件开发,像数字电路、计机l成原理、嵌入式微处理器l构{硬件课E是较重要的。另外,汇编语言、C/C、数据结构和法、特别是操作pȝ{Y件基课也是十分重要的。我们的主要目地是能看懂g工作原理Q但重点应是在嵌入式软gQ特别操作系l软gQ那是我们的优ѝ?
我们的研I生里有些是学电子、通信cM业过来的Q有较好的模拟电路和单片机基Q学嵌入式非常合适。嵌入式本n是从单片机发展q来的,只是单片Z带OSQ而现在很多嵌入式应用来复杂,以至不得不引入嵌入式操作pȝ。另外,求更高速的信号处理速度Q现在在一些速度要求较高的场合,有不公司是一些DSP法Q如MPEG压羃解压~算法等用硬件来实现Q这涉及到HDL数字电\设计技术及其FPGA/IP核实现技术,q方面的人目前市Z也很~?
(5) 题外?
另外Q能写驱动程序的人目前是非常紧缺?驱动E序也可归于嵌入式范?Q包括桌面Windows中的DDK开发环境和WDM驱动E序。公司每时每刻都要推出新产品Q每一个新产品出来了,要能被操作系l所使用Q是必须写驱动程序的。写驱动E序必L握操作系l?如Windows或Linux)的内部工作原理,q涉及到量g知识Q难度较大,所以这斚w的h很难找。想成ؓ高手的同学,也可从驱动程序方面获得突破?/p>
我可说一下自ql历Q三q前我曾短暂地在一家公司写qWinCE驱动E序(正是因ؓ知道q方面的人紧~,所以才要做q方面的?Q尽那以前从未做过驱动E序Q应聘那个职位时正是看准了公司是很难招聘到这斚w的hQ既焉找不ChQ驱动还得有人做Q这正是可能有机会切入这一领域的大好机会。面试时大讲自己写过多少万行汇编E序Q对计算机工作原理如何清楚,历中又写着我曾阅读完两本关于Windows Driver Model的两本英文原版书Q写q几个小型的驱动E序l习E序(其实Ҏ没写q,我们的同学将来千万不要像我这P早练׃q硬功夫Q就不至于落到我这{地步,׃用像我那样去“欺骗”公怺Q我q是一个典型的反面教材)Q居然一切都PASS(当然最重要的是W试和面试问题还说得q去)Q这只能说明q一领域找h的困隄度。公司本未指望扑ֈ搞过驱动的hQ找个有相关基础的hq不错了。做了以后,发现也ƈ不是怎样隄。其实搞驱动E序的工作是很舒服的Q搞完一个版本就会空一D|_只有{公司新的芯片推出或新的OS出现后,才需要再d发新一版驱动,那时有将q一个月旉I闲着在等WinCE .NET Beta版推出,准备驱动程序升U到CE .NET上,现在在Y件学院工作整日忙Q无限怀念那D|闲时光?
很y合,最q本人无意中再次体会C嵌入式的qh之处。上周我那用?q的手机l于不能WORK了。此ơ更斎ͼ除要求有手机常见功能外,最好有MP3功能(现在很多p听力都有MP3文g)Q最好有英汉词典Q最好还能读WORD文档。最后选了个满以上条件的最便宜的手机DOPOD 515(斩了?.2KQ但xq也自己对嵌入式事业的支持Q这样便也想开?Q算得上最低档的智能手Z。回来一查,手机的about昄Q本手机Processor是ARMQ其OS是MS Smartphone(即WinCE .NET 4.2)Q这么y合,直可做ؓ学习嵌入式课E的产品案例?{我们的WinCE评开得有声有色后Q希望能从微软研I搞些Smartphone来开发开?。有OS的手机果然了得,金山词霸、WORD、EXCEL、REGEDIT{居焉有smartphone版的QPC上的MP3、DOC{居然在download旉可被自动转换成smartphone格式Q真是爽。完全可用Windows CE自己开发一些需要的E序download到自q手机上。现在市面销售PDA手机火爆QMSL财源滚滚。但我已发现国的ARMLINUX手机出现在市面上Qh格只1.2K?
在GOOGLE|上能搜索太多的关于嵌入式系l的讨论了,我刚发现一个http:www.embyte.com 非常不错Q有很多有经验者谈自己的体会投入到其中的论坛中Q你会切w感到嵌入式学习的热潮?
要么走ARMWinCEQ要么走ARMLINUXQ要么走ARMVXWORKS。每个搞嵌入式的人都可选一条\Q条条大路通罗马?/p>
三、关于游戏Y件方?
游戏Y件h才称为数字媒体Y件h才可能更好听些,包括游戏软g{划(最~游戏策划的?、游戏Y件美术设计、游戏Y件程序设计等多方面的人才Q对软g学院Q游戏Y件程序设计当然是最合适的了?
游戏软g人才的确目前很缺Q听说很多游戏Y件公司苦于没Ch才补充,特别是没有高手补充,不得不相互挖人才Q以臛_游戏软g人才wh抬高。网上说日本教育部刚刚批准成立了日本W一家专门培dq制游戏软g人才的本U大学。其实国内很多大学,特别是Y件学院都有搞游戏软g人才的设惻I但目前很有做成的,主要原因是找不到能上游戏软g评教师Q听说有个学校只能花很大的h׃Korea找老师来上课,果真~到此等地步
已有很多青少q沉湎于|游而颓废的实例Q好在还不至于上升到刉精鸦片的高度Q所以开发游戏Y件的Z不必每日惭悔(但开发儿童益智类游戏软g的h是不需惭悔?Q如果想惌是ؓ发展民族软g产业做A献,那反倒是一件有意义的事情了。不q听一家游戏Y件公司的老板Ԍ搞游戏Y件开发是非常辛苦的?
若想自己创业Q搞搞游戏Y件是不错的主意。现在网上网站或公司都在收购游戏软g(特别是手机游戏YӞ因ؓ手机游戏用户可选从|站上download到手ZQ不像网渔R么复?Q按downloadơ数分成或一ơ性收购的都有。我们的同学在校期间是否也可发点胦搞得好,说不定可卖到国外|站Q直接挣$$$呢?
大致游戏分成以下几类:
(1) PCcL戏,包括单机和网游。这cL戏开发^台基本上都是ZVC和DitrectX(如DirectShowQDirectDrawQD3D{,DirectX资料可直接到MS|站上查)。DirectX和OpenGL是两个主要的囑Ş标准QOpenGL跨^?Unix/Windows上都可跑)Q尽很多搞研究的h对OpenGL赞不l口Q将DirectX骂得一文不|但事实是Q在Windowsq_上,DirectX是最快最方便的,所以在Windowsq_上的游戏q是DirectX当家?
(2) 手机游戏:目前手机游戏主要开发^台有两类:
W一cL机游戏是 J2ME q_(Java 2 Micro Edition)QJ2ME本是为嵌入式q_设计的JavaQ但׃Java生来需要Java虚拟?JVM)来解释,所以在嵌入式品很用J2ME(太慢太耗内?。但在手机游戏中J2ME倒有用武之地Q我惌可能主要是Java可跨OSq_的原因,因ؓ手机的OS是千奇百怪的。我对J2ME完全外行Q但上次听Square Enix 公司的h_J2ME与我们同学学q的J2EEq是有较大差别的。据我所知,目前手机中用的较多的是KJava语言QKJava是运行在一U叫K Java Virtual Machine的解释器?K JVM是SUN早期为演CJ2ME在嵌入式pȝ应用而开发的一个虚拟机)Q所以将在K JVM上运行的J2ME叫KJava。尽SUN说今后不保证支持K JVMQ将开发新的更高性能的J2ME虚拟机取而代之,但由于KJava出现较早Q很多早期的手机游戏软g都将K JVM假想成J2ME虚拟机的标准了,所以目前有大量的KJava手机游戏软g存在Q而且q在用KJaval箋开发。特别是日本的手机游戏Y件由于开发较?像叫什么docomi的日本最大的电信q营商手机游戏搞得很?Q多是基于KJava的。所以目前市Z在招聘手机游戏Y件h才时Q很多要求掌握KJava。有关J2ME请到Sun的网站上找资料?
另一cL机游戏是 BREW q_QBREW是美国高通公?QualcommQCDMA核心技术都是该公司开发的Q有无数Ud通信技术专?发明的,据说可编译成二进制代码,那当然快了。主要的开发语a是C/C。但q于被指责ؓ较封闭的压力Q目前Qualcomm已推出BREWq_上的J2ME虚拟?但可惛_那将是怎样慢的速度)。Qualcomm搞定了很多手机制造商{֮BREW授权许可协议Q最狠的是Qualcomm与中国联通绑在一起大堆基于BREW的手机游戏,所以有些公司招聘时要求掌握BREW也就不奇怪了?
d00U?2班毕业答辩时Q有一位同学讲的是在公司做的KJava游戏(那是一家日本游戏Y件公?Q还一位同学讲的是另一家公司做的BREW游戏Q看来不同的公司有不同的选择。将来谁会更火,我估计随着手机g资源的不断提高,不会在乎一个JVM的开销QJ2ME应更有前途,毕竟它是更开攄?
(3) 专用游戏?如电视游戏,XBOXQPS2{?
从著名游戏公司发来的对网游和手机游戏的h才需求,很有代表性。从中我们可看出Q游戏公司对人才的需求主要是以下技?
(1) 计算机图形学Q特别是3D~程与算法,包括DirectX ?OpenGL。开发^台是 VC/DIRECTX ?KJAVA?
(2) 公司_手机游戏因手源有限,必须对图像进行压~,所以若有一些图像压~算法知识比较好。像若能有MPEG压羃法较好Q手Z采用的是比MPEG压羃得更狠的一些特D算法,但触cL通?
(3) TCP/IP Socket~程是搞|游开发的人必L握的?
(4) 人工知识:复杂游戏可能需要一些AI法?
(5) |络与信息安全知? |游要防外挂?
一般游戏公司的|游服务器是Z Linux q_的,所以还提出了对游戏服务器端软g工程师的技术需?_NMSSQL、ORACLE、MYSQL{数据库Q精通Linux ProgrammingQ特别是Socket~程)。还有对l护游戏、网站h才需?ASP.NET和数据库)。注意一条,最好有自己的游戏Y件作品,若您应聘时能带一?DirectX 作品Q那有多强的竞争力Q所以最重要的是现在p行动Q实践,实践Q再实践?/p>
Oracle分两大块Q一块是开发,一块是理。开发主要是写写存储q程、触发器什么的Q还有就是用Oracle的Develop工具做form。有点类gE序员,需要有较强的逻辑思维和创造能力,个h觉得会比较辛苦,是青春饭Q管理则需要对Oracle数据库的原理有深ȝ认识Q有全局操纵的能力和紧密的思维Q责任较大,因ؓ一个小的失误就会down掉整个数据库Q相对前者来_后者更看重l验?
因ؓ数据库管理的责Q重大Q很公司愿意请一个刚刚接触Oracle的hȝ理数据库。对于刚刚毕业的q轻人来_可以先选择做开发,有一定经验后转型Q去做数据库的管理。当Ӟq个q是要看Z的实际情冉|定?/p>
二、学习方?/strong>
我的Ҏ很简单,是Q看书、思考、写W记、做实验、再思考、再写笔记?/p>
看完理论的东西,自己静下心来xQ多问自己几个ؓ什么,然后把所学和所想的知识点做个笔讎ͼ在想不通或有疑问的时候,做做实验,x怎么会这P同样的,把实验的l果C来。思考和做实验是Z深入的了解这个知识点。而做W记的过E,也是理清自己思\的过E?
学习的过E是使一个问题由模糊到清晎ͼ再由清晰到模p的q程。而每ơ的改变都代表着你又学到了一个新的知识点?
学习的过E也是从点到U,从线到网Q从|到面的q程。当点变成线的时候,你会有总豁然开朗的感觉。当|到面的时候,你就是高手了?/p>
很多|友Q特别是初学的hQ一到问题拿到论坛上来问Q在问前Q你有没有查q书Q自己有没有研究q,有没有搜索一下论坛?q就叫思维惰性。由别h来回{你的问题,会让你在短时间内不费劲地弄懂q个知识点,然而通过自己的努力去研究它,不但会更深入的了解这个知识点Q更重要的是在研I的q程会提高你解决问题和分析问题的能力。ȝ来说Q没有钻研的学习态度Q不学什么东西,都不会成功的?
当然Q初学的人很多时候是因ؓ遇到问题Ӟ无从下手Q也不知道去哪里找资料,才会到论坛上提问题的。但我认为,在提问的时候,是不是可以问别h是如何分析这个问题?从哪里可以找到相关的资料Q而不是这个问题的{案是什么?授h以鱼不如授h以渔?/p>
下面我讲下我处理问题的过E?/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>
遇到问题了。如果是概念上的问题Q第一旉可以找tahiti.oracle.comQ这里会l你最详细的解释。如果在q行的过E中Z什么错误。可以去metalink看看。如果是想知道事务的处理的经验之谈。可以去asktom。当然。这里只是相对而言?/p>
三、Oracle的体p?/strong> 1、物理结构(由控制文件、数据文件、重做日志文件、参数文件、归档文件、密码文件组成) 控制文gQ包含维护和验证数据库完整性的必要信息、例如,控制文g用于识别数据文g和重做日志文Ӟ一个数据库臛_需要一个控制文? 数据文gQ存储数据的文g. 重做日志文gQ含Ҏ据库所做的更改记录Q这样万一出现故障可以启用数据恢复。一个数据库臛_需要两个重做日志文? 参数文gQ定义Oracle例程的特性,例如它包含调整SGA中一些内存结构大的参数. 归档文gQ是重做日志文g的脱机副本,q些副本可能对于从介质失败中q行恢复很必要? 密码文gQ认证哪些用h权限启动和关闭Oracle例程. 表空_是数据库中的基本逻辑l构Q一pd数据文g的集合?br /> D:是对象在数据库中占用的空? SGAQ是用于存储数据库信息的内存区,该信息ؓ数据库进E所׃n。它包含Oracle 服务器的数据和控制信?它是在Oracle服务器所ȝ的计机的实际内存中得以分配Q如果实际内存不够再往虚拟内存中写? PGAQ包含单个服务器q程或单个后台进E的数据和控制信息,与几个进E共享的SGA 正相反PGA 是只被一个进E用的区域QPGA 在创E时分配在终止进E时回收. 4、后台进E(数据写进E、日志写q程、系l监控、进E监控、检查点q程、归档进E、服务进E、用戯E) 数据写进E:负责更改的数据从数据库~冲区高速缓存写入数据文? 5、Oracle例程QOracle例程由SGA内存l构和用于管理数据库的后台进E组成。例E一ơ只能打开和用一个数据库? 6、SCN(System ChangeNumber)Q系l改变号Q一个由pȝ内部l护的序列号。当pȝ需要更新的时候自动增加,他是pȝ中维持数据的一致性和序恢复的重要标志?/p> 四、深入学? 理Q可以考OCP证书Q对Oracle先有一个系l的学习Q然后看Oracle Concepts、Oracle online document,对oracle的原理会有更深入的了解,同时可以开始进行一些专题的研究如:RMAN、RAS、STATSPACT、DATAGUARD、TUNING、BACKUP&RECOVER{等?/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 />
Oracle的体pd庞大Q要学习它,首先要了解Oracle的框架。在q里Q简要的讲一下Oracle的架构,让初学者对Oracle有一个整体的认识?/p>
2、逻辑l构Q表I间、段、区、块Q?/p>
区:是ؓ数据一ơ性预留的一个较大的存储I间.
块:ORACLE最基本的存储单位,在徏立数据库的时候指?
3、内存分配(SGA和PGAQ?/p>
日志写进E:重做日志缓冲区中的更改写入在线重做日志文g
pȝ监控Q检查数据库的一致性如有必要还会在数据库打开时启动数据库的恢?br /> q程监控Q负责在一个Oracle q程p|时清理资?
查点q程Q负责在每当~冲区高速缓存中的更Ҏ久地记录在数据库中时,更新控制文g和数据文件中的数据库状态信息?
归档q程Q在每次日志切换时把已满的日志组q行备䆾或归?
服务q程Q用戯E服务?
用户q程Q在客户端,负责用LSQL语句传递给服务q程Qƈ从服务器D|回查询数据?
]]>
FILE *fpQ?br />fp=("file a","r"); |
FILE *fphzk fphzk=("c:\\hzk16',"rb") |
if((fp=fopen("c:\\hzk16","rb")==NULL) { printf("\nerror on open c:\\hzk16 file!"); getch(); exit(1); } |
#include<stdio.h> main() { FILE *fp; char ch; if((fp=fopen("e10_1.c","rt"))==NULL) { printf("Cannot open file strike any key exit!"); getch(); exit(1); } ch=fgetc(fp); while (ch!=EOF) { putchar(ch); ch=fgetc(fp); } fclose(fp); } |
#include<stdio.h> main() { FILE *fp; char ch; if((fp=fopen("string","wt+"))==NULL) { printf("Cannot open file strike any key exit!"); getch(); exit(1); } printf("input a string:\n"); ch=getchar(); while (ch!='\n') { fputc(ch,fp); ch=getchar(); } rewind(fp); ch=fgetc(fp); while(ch!=EOF) { putchar(ch); ch=fgetc(fp); } printf("\n"); fclose(fp); } |
#include<stdio.h> main(int argc,char *argv[]) { FILE *fp1,*fp2; char ch; if(argc==1) { printf("have not enter file name strike any key exit"); getch(); exit(0); } if((fp1=fopen(argv[1],"rt"))==NULL) { printf("Cannot open %s\n",argv[1]); getch(); exit(1); } if(argc==2) fp2=stdout; else if((fp2=fopen(argv[2],"wt+"))==NULL) { printf("Cannot open %s\n",argv[1]); getch(); exit(1); } while((ch=fgetc(fp1))!=EOF) fputc(ch,fp2); fclose(fp1); fclose(fp2); } |
#include<stdio.h> main() { FILE *fp; char str[11]; if((fp=fopen("e10_1.c","rt"))==NULL) { printf("Cannot open file strike any key exit!"); getch(); exit(1); } fgets(str,11,fp); printf("%s",str); fclose(fp); } |
#include<stdio.h> main() { FILE *fp; char ch,st[20]; if((fp=fopen("string","at+"))==NULL) { printf("Cannot open file strike any key exit!"); getch(); exit(1); } printf("input a string:\n"); scanf("%s",st); fputs(st,fp); rewind(fp); ch=fgetc(fp); while(ch!=EOF) { putchar(ch); ch=fgetc(fp); } printf("\n"); fclose(fp); } |
#include<stdio.h> struct stu { char name[10]; int num; int age; char addr[15]; }boya[2],boyb[2],*pp,*qq; main() { FILE *fp; char ch; int i; pp=boya; qq=boyb; if((fp=fopen("stu_list","wb+"))==NULL) { printf("Cannot open file strike any key exit!"); getch(); exit(1); } printf("\ninput data\n"); for(i=0;i<2;i++,pp++) scanf("%s%d%d%s",pp->name,&pp->num,&pp->age,pp->addr); pp=boya; fwrite(pp,sizeof(struct stu),2,fp); rewind(fp); fread(qq,sizeof(struct stu),2,fp); printf("\n\nname\tnumber age addr\n"); for(i=0;i<2;i++,qq++) printf("%s\t%5d%7d%s\n",qq->name,qq->num,qq->age,qq->addr); fclose(fp); } |
#include<stdio.h> struct stu { char name[10]; int num; int age; char addr[15]; }boya[2],boyb[2],*pp,*qq; main() { FILE *fp; char ch; int i; pp=boya; qq=boyb; if((fp=fopen("stu_list","wb+"))==NULL) { printf("Cannot open file strike any key exit!"); getch(); exit(1); } printf("\ninput data\n"); for(i=0;i<2;i++,pp++) scanf("%s%d%d%s",pp->name,&pp->num,&pp->age,pp->addr); pp=boya; for(i=0;i<2;i++,pp++) fprintf(fp,"%s %d %d %s\n",pp->name,pp->num,pp->age,pp-> addr); rewind(fp); for(i=0;i<2;i++,qq++) fscanf(fp,"%s %d %d %s\n",qq->name,&qq->num,&qq->age,qq->addr); printf("\n\nname\tnumber age addr\n"); qq=boyb; for(i=0;i<2;i++,qq++) printf("%s\t%5d %7d %s\n",qq->name,qq->num, qq->age, qq->addr); fclose(fp); } |
#include<stdio.h> struct stu { char name[10]; int num; int age; char addr[15]; }boy,*qq; main() { FILE *fp; char ch; int i=1; qq=&boy; if((fp=fopen("stu_list","rb"))==NULL) { printf("Cannot open file strike any key exit!"); getch(); exit(1); } rewind(fp); fseek(fp,i*sizeof(struct stu),0); fread(qq,sizeof(struct stu),1,fp); printf("\n\nname\tnumber age addr\n"); printf("%s\t%5d %7d %s\n",qq->name,qq->num,qq->age, qq->addr); } |