??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲成a人片在线观看国产,亚洲AV成人一区二区三区AV,亚洲中文精品久久久久久不卡http://www.tkk7.com/msmary/category/26457.html书山有\勤ؓ径,学v无苦作?/description>zh-cnSat, 26 Nov 2011 15:13:37 GMTSat, 26 Nov 2011 15:13:37 GMT60优化查询SQL语句http://www.tkk7.com/msmary/articles/330160.html谭明谭明Sun, 29 Aug 2010 04:51:00 GMThttp://www.tkk7.com/msmary/articles/330160.htmlhttp://www.tkk7.com/msmary/comments/330160.htmlhttp://www.tkk7.com/msmary/articles/330160.html#Feedback0http://www.tkk7.com/msmary/comments/commentRss/330160.htmlhttp://www.tkk7.com/msmary/services/trackbacks/330160.html1.已知employee表数据如?
     EMPNO      EMPNAME    DEPT
        Z3                 张三             销售部
        L4                 李四             销售部
        W5                王五             技术部
        Z6                 赵六             技术部
    要得到如下结?
        NUM       EMPNO      EMPNAME     DEPT

             1          Z3                 张三             销售部
             2          L4                 李四             销售部
             1         W5                王五             技术部
             2          Z6                 赵六             技术部
    其SQL如下:
         select row_number() over(partition by dept order by empno) as num,empno,empname,dept from employee;

2.一成W表中Q求出只要有一门及以上的课E不及格的同?br />      select sno,sname from grades group by sno having min(score) < 60;

谭明 2010-08-29 12:51 发表评论
]]>
Oracle Instead of Trigger的用?/title><link>http://www.tkk7.com/msmary/articles/298265.html</link><dc:creator>谭明</dc:creator><author>谭明</author><pubDate>Wed, 14 Oct 2009 09:51:00 GMT</pubDate><guid>http://www.tkk7.com/msmary/articles/298265.html</guid><wfw:comment>http://www.tkk7.com/msmary/comments/298265.html</wfw:comment><comments>http://www.tkk7.com/msmary/articles/298265.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.tkk7.com/msmary/comments/commentRss/298265.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/msmary/services/trackbacks/298265.html</trackback:ping><description><![CDATA[<p>1. instead of trigger 是基于视囑־立的,不能建在表上,Z么要建在视图?一般的视图如果其数据来源一个表q且包含该表的主?可以对视图q行DML操作.另外一U情冉|从多个表查询出来?q样我们׃能对视图q行操作?也就是只能查?instead of trigger可以解决建在多表上视囄更新操作.<br /> 2.下面我们来实例操作:<br /> a.先徏?单点׃个分别是学生?评?学生选课?br /> CREATE TABLE STUDENT<br /> (<br />    CODE  VARCHAR2(5),<br />    LNAME VARCHAR2(200)<br /> )<br /> CREATE TABLE COURSE<br /> (<br />     CODE  VARCHAR2(5),<br />     CNAME VARCHAR2(30)<br /> )<br /> CREATE TABLE ST_CR<br /> (<br />    STUDENT VARCHAR2(5),<br />    COURSE  VARCHAR2(5),<br />    GRADE   NUMBER<br /> )<br /> --表的U束<br /> ALTER TABLE STUDENT ADD CONSTRAINT STUDENT$PK PRIMARY KEY(CODE);<br /> ALTER TABLE COURSE ADD CONSTRAINT COURSE$PK PRIMARY KEY(CODE);<br /> ALTER TABLE ST_CR ADD CONSTRAINT ST_CR$PK PRIMARY KEY(STUDENT, COURSE);<br /> ALTER TABLE ST_CR ADD CONSTRAINT ST_CR$FK$STUDENT FOREIGN KEY(STUDENT) REFERENCES STUDENT(CODE);<br /> ALTER TABLE ST_CR ADD CONSTRAINT ST_CR$FK$COURSE FOREIGN KEY(COURSE) REFERENCES COURSE(CODE);<br /> <br /> b.Zq三个表的视?br /> CREATE OR REPLACE VIEW STUDENT_STATUS AS<br />    SELECT S.CODE S_CODE, S.LNAME STUDENT, C.CODE C_CODE, C.CNAME COURSE, SC.GRADE GRADE<br />       FROM STUDENT S, COURSE C, ST_CR SC<br />         WHERE S.CODE = SC.STUDENT<br />           AND C.CODE = SC.COURSE<br /> <br /> c.Z视图的触发器<br /> CREATE OR REPLACE TRIGGER TRI_STCR INSTEAD OF INSERT ON STUDENT_STATUS<br />    FOR EACH ROW<br /> DECLARE<br />   W_ACTION VARCHAR2(1);<br /> BEGIN<br />   IF    INSERTING THEN<br />     W_ACTION := 'I';<br />   ELSE<br />     RAISE PROGRAM_ERROR;<br />   END IF;<br />     INSERT INTO STUDENT(CODE, LNAME) VALUES(:NEW.S_CODE,:NEW.STUDENT);<br />     INSERT INTO COURSE(CODE, CNAME) VALUES(:NEW.C_CODE, :NEW.COURSE);<br />     INSERT INTO ST_CR(STUDENT, COURSE, GRADE)<br />        VALUES(:NEW.S_CODE, :NEW.C_CODE, :NEW.GRADE);<br /> END;<br /> <br /> d.对视图执行数据插?br /> INSERT INTO STUDENT_STATUS(S_CODE, STUDENT, C_CODE, COURSE, GRADE)<br />        VALUES('001','Mike','EN','English',86);</p> <p>可以看到每个表各有一条数据已l插?</p> <img src ="http://www.tkk7.com/msmary/aggbug/298265.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/msmary/" target="_blank">谭明</a> 2009-10-14 17:51 <a href="http://www.tkk7.com/msmary/articles/298265.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle的动态语?/title><link>http://www.tkk7.com/msmary/articles/297527.html</link><dc:creator>谭明</dc:creator><author>谭明</author><pubDate>Fri, 09 Oct 2009 06:07:00 GMT</pubDate><guid>http://www.tkk7.com/msmary/articles/297527.html</guid><wfw:comment>http://www.tkk7.com/msmary/comments/297527.html</wfw:comment><comments>http://www.tkk7.com/msmary/articles/297527.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/msmary/comments/commentRss/297527.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/msmary/services/trackbacks/297527.html</trackback:ping><description><![CDATA[testing on pl/sql developer<br /> /************************/<br /> DECLARE<br />   W_ORDSEQ NUMBER := 5465;<br />   W_ORDNO  VARCHAR2(30);<br />   W_TYPE       VARCHAR2(30) := 'M001';<br /> BEGIN<br />    EXECUTE IMMEDIATE 'SELECT ORDNO FROM ORD WHERE ORDSEQ = :P_ORDSEQ AND ORDTY=:P_ORDTY' INTO W_ORDNO USING W_ORDSEQ,W_TYPE;<br />    DBMS_OUTPUT.put_LINE(W_ORDNO);<br /> END;<br /> <img src ="http://www.tkk7.com/msmary/aggbug/297527.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/msmary/" target="_blank">谭明</a> 2009-10-09 14:07 <a href="http://www.tkk7.com/msmary/articles/297527.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>多行昄Z?/title><link>http://www.tkk7.com/msmary/articles/285976.html</link><dc:creator>谭明</dc:creator><author>谭明</author><pubDate>Wed, 08 Jul 2009 13:55:00 GMT</pubDate><guid>http://www.tkk7.com/msmary/articles/285976.html</guid><wfw:comment>http://www.tkk7.com/msmary/comments/285976.html</wfw:comment><comments>http://www.tkk7.com/msmary/articles/285976.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/msmary/comments/commentRss/285976.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/msmary/services/trackbacks/285976.html</trackback:ping><description><![CDATA[SELECT MAX(DECODE(COL,'1',CODE,'')),MAX(DECODE(COL,'2',CODE,'')) FROM (<br /> SELECT CODE,LNAME,CNAME,PROGUNIT,ROW_NUMBER() OVER(PARTITION BY PROGUNIT ORDER BY PROGUNIT) COL FROM ORDTY WHERE PROGUNIT='SMP') <img src ="http://www.tkk7.com/msmary/aggbug/285976.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/msmary/" target="_blank">谭明</a> 2009-07-08 21:55 <a href="http://www.tkk7.com/msmary/articles/285976.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle分析函数http://www.tkk7.com/msmary/articles/284118.html谭明谭明Thu, 25 Jun 2009 07:35:00 GMThttp://www.tkk7.com/msmary/articles/284118.htmlhttp://www.tkk7.com/msmary/comments/284118.htmlhttp://www.tkk7.com/msmary/articles/284118.html#Feedback0http://www.tkk7.com/msmary/comments/commentRss/284118.htmlhttp://www.tkk7.com/msmary/services/trackbacks/284118.html


下面例子中用的表来自Oracle自带的HR用户下的表,如果没有安装该用P可以在SYS用户下运?ORACLE_HOME/demo/schema/human_resources/hr_main.sql来创建?/font>

除本文内容外Q你q可参考:
ROLLUP与CUBE http://xsb.itpub.net/post/419/29159
分析函数使用例子介绍Q?a >http://xsb.itpub.net/post/419/44634

本文如果未指明,~省是在HR用户下运行例子?br /> 开H函数的的理解:
开H函数指定了分析函数工作的数据窗口大,q个数据H口大小可能会随着行的变化而变化,举例如下Q?br /> overQorder by salaryQ?按照salary排序q行累计Qorder by是个默认的开H函?br /> overQpartition by deptnoQ按照部门分?br /> overQorder by salary range between 50 preceding and 150 followingQ?br /> 每行对应的数据窗口是之前行幅度g过50Q之后行q度g过150
overQorder by salary rows between 50 preceding and 150 followingQ?br /> 每行对应的数据窗口是之前50行,之后150?br /> overQorder by salary rows between unbounded preceding and unbounded followingQ?br /> 每行对应的数据窗口是从第一行到最后一行,{效Q?br /> overQorder by salary range between unbounded preceding and unbounded followingQ?/font>

主要参考资料:《expert one-on-one?Tom Kyte 《Oracle9i SQL Reference》第6?br />
1).AVG
功能描述Q用于计一个组和数据窗口内表达式的q_倹{?br /> SAMPLEQ下面的例子中列c_mavg计算员工表中每个员工的^均薪水报告,该^均值由当前员工和与之具有相同经理的前一个和后一个三者的q_数得来;

SELECT manager_id, last_name, hire_date, salary,
AVG(salary) OVER (PARTITION BY manager_id ORDER BY hire_date
ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) AS c_mavg
FROM employees;

MANAGER_ID LAST_NAME HIRE_DATE SALARY C_MAVG
---------- ------------------------- --------- ---------- ----------
100 Kochhar 21-SEP-89 17000 17000
100 De Haan 13-JAN-93 17000 15000
100 Raphaely 07-DEC-94 11000 11966.6667
100 Kaufling 01-MAY-95 7900 10633.3333
100 Hartstein 17-FEB-96 13000 9633.33333
100 Weiss 18-JUL-96 8000 11666.6667
100 Russell 01-OCT-96 14000 11833.3333

2).CORR
功能描述Q返回一对表辑ּ的相关系敎ͼ它是如下的羃写:
COVAR_POP(expr1,expr2)/STDDEV_POP(expr1)*STDDEV_POP(expr2))
从统计上Ԍ相关性是变量之间兌的强度,变量之间的关联意味着在某U程?br /> 上一个变量的值可由其它的D行预。通过q回一?1~1之间的一个数, 相关
pLl出了关联的强度Q?表示不相兟?br /> SAMPLEQ下例返?998q月销售收入和月单位销售的关系的篏U系敎ͼ本例在SH用户下运行)

SELECT t.calendar_month_number,
CORR (SUM(s.amount_sold), SUM(s.quantity_sold))
OVER (ORDER BY t.calendar_month_number) as CUM_CORR
FROM sales s, times t
WHERE s.time_id = t.time_id AND calendar_year = 1998
GROUP BY t.calendar_month_number
ORDER BY t.calendar_month_number;

CALENDAR_MONTH_NUMBER CUM_CORR
--------------------- ----------
1
2 1
3 .994309382
4 .852040875
5 .846652204
6 .871250628
7 .910029803
8 .917556399
9 .920154356
10 .86720251
11 .844864765
12 .903542662


3).COVAR_POP
功能描述Q返回一对表辑ּ的M协方差?br /> SAMPLEQ下例CUM_COVPq回定h和最品h格的累积M协方?/font>

SELECT product_id, supplier_id,
COVAR_POP(list_price, min_price)
OVER (ORDER BY product_id, supplier_id) AS CUM_COVP,
COVAR_SAMP(list_price, min_price)
OVER (ORDER BY product_id, supplier_id) AS CUM_COVS
FROM product_information p
WHERE category_id = 29
ORDER BY product_id, supplier_id;

PRODUCT_ID SUPPLIER_ID CUM_COVP CUM_COVS
---------- ----------- ---------- ----------
1774 103088 0
1775 103087 1473.25 2946.5
1794 103096 1702.77778 2554.16667
1825 103093 1926.25 2568.33333
2004 103086 1591.4 1989.25
2005 103086 1512.5 1815
2416 103088 1475.97959 1721.97619
.
.


4).COVAR_SAMP
功能描述Q返回一对表辑ּ的样本协方差
SAMPLEQ下例CUM_COVSq回定h和最品h格的累积h协方?/font>

SELECT product_id, supplier_id,
COVAR_POP(list_price, min_price)
OVER (ORDER BY product_id, supplier_id) AS CUM_COVP,
COVAR_SAMP(list_price, min_price)
OVER (ORDER BY product_id, supplier_id) AS CUM_COVS
FROM product_information p
WHERE category_id = 29
ORDER BY product_id, supplier_id;

PRODUCT_ID SUPPLIER_ID CUM_COVP CUM_COVS
---------- ----------- ---------- ----------
1774 103088 0
1775 103087 1473.25 2946.5
1794 103096 1702.77778 2554.16667
1825 103093 1926.25 2568.33333
2004 103086 1591.4 1989.25
2005 103086 1512.5 1815
2416 103088 1475.97959 1721.97619
.
.


5).COUNT
功能描述Q对一l内发生的事情进行篏U计敎ͼ如果指定*或一些非I常敎ͼcount对所有行计数Q如果指定一个表辑ּQcountq回表达式非I值的计数Q当有相同值出现时Q这些相{的值都会被U_被计的|可以使用DISTINCT来记录去掉一l中完全相同的数据后出现的行数?br /> SAMPLEQ下面例子中计算每个员工在按薪水排序中当前行附近薪水在[n-50,n+150]之间的行敎ͼn表示当前行的薪水
例如QPhiltanker的薪?200Q排在他之前的行中薪水大于等?200-50的有1行,排在他之后的行中薪水于{于2200Q?50的行没有Q所以count计数值cnt3?Q包括自己当前行Q;cnt2值相当于于{于当前行的SALARY值的所有行?/font>

SELECT last_name, salary, COUNT(*) OVER () AS cnt1,
COUNT(*) OVER (ORDER BY salary) AS cnt2,
COUNT(*) OVER (ORDER BY salary RANGE BETWEEN 50 PRECEDING
AND 150 FOLLOWING) AS cnt3 FROM employees;

LAST_NAME SALARY CNT1 CNT2 CNT3
------------------------- ---------- ---------- ---------- ----------
Olson 2100 107 1 3
Markle 2200 107 3 2
Philtanker 2200 107 3 2
Landry 2400 107 5 8
Gee 2400 107 5 8
Colmenares 2500 107 11 10
Patel 2500 107 11 10
.
.


6).CUME_DIST
功能描述Q计一行在l中的相对位|,CUME_DISTLq回大于0、小于或{于1的数Q该数表C行在N行中的位|。例如,在一?行的l中Q返回的累计分布gؓ1/3?/3?/3
SAMPLEQ下例中计算每个工种的员工按薪水排序依次累积出现的分布百分比

SELECT job_id, last_name, salary, CUME_DIST()
OVER (PARTITION BY job_id ORDER BY salary) AS cume_dist
FROM employees WHERE job_id LIKE 'PU%';

JOB_ID LAST_NAME SALARY CUME_DIST
---------- ------------------------- ---------- ----------
PU_CLERK Colmenares 2500 .2
PU_CLERK Himuro 2600 .4
PU_CLERK Tobias 2800 .6
PU_CLERK Baida 2900 .8
PU_CLERK Khoo 3100 1
PU_MAN Raphaely 11000 1


7).DENSE_RANK
功能描述Q根据ORDER BY子句中表辑ּ的|从查询返回的每一行,计算它们与其它行的相对位|。组内的数据按ORDER BY子句排序Q然后给每一行赋一个号Q从而Ş成一个序列,该序列从1开始,往后篏加。每ơORDER BY表达式的值发生变化时Q该序列也随之增加。有同样值的行得到同L数字序号Q认为null时相{的Q。密集的序列q回的时没有间隔的数
SAMPLEQ下例中计算每个员工按部门分区再按薪水排序,依次出现的序列号Q注意与RANK函数的区别)

SELECT d.department_id , e.last_name, e.salary, DENSE_RANK()
OVER (PARTITION BY e.department_id ORDER BY e.salary) as drank
FROM employees e, departments d
WHERE e.department_id = d.department_id
AND d.department_id IN ('60', '90');

DEPARTMENT_ID LAST_NAME SALARY DRANK
------------- ------------------------- ---------- ----------
60 Lorentz 4200 1
60 Austin 4800 2
60 Pataballa 4800 2
60 Ernst 6000 3
60 Hunold 9000 4
90 Kochhar 17000 1
90 De Haan 17000 1
90 King 24000 2


8).FIRST
功能描述Q从DENSE_RANKq回的集合中取出排在最前面的一个值的行(可能多行Q因为值可能相{)Q因此完整的语法需要在开始处加上一个集合函C从中取出记录
SAMPLEQ下面例子中DENSE_RANK按部门分区,再按佣金commission_pct排序QFIRST取出佣金最低的对应的所有行Q然后前面的MAX函数从这个集合中取出薪水最低的|LAST取出佣金最高的对应的所有行Q然后前面的MIN函数从这个集合中取出薪水最高的?br /> SELECT last_name, department_id, salary,
MIN(salary) KEEP (DENSE_RANK FIRST ORDER BY commission_pct)
OVER (PARTITION BY department_id) "Worst",
MAX(salary) KEEP (DENSE_RANK LAST ORDER BY commission_pct)
OVER (PARTITION BY department_id) "Best"
FROM employees
WHERE department_id in (20,80)
ORDER BY department_id, salary;

LAST_NAME DEPARTMENT_ID SALARY Worst Best
------------------------- ------------- ---------- ---------- ----------
Fay 20 6000 6000 13000
Hartstein 20 13000 6000 13000
Kumar 80 6100 6100 14000
Banda 80 6200 6100 14000
Johnson 80 6200 6100 14000
Ande 80 6400 6100 14000
Lee 80 6800 6100 14000
Tuvault 80 7000 6100 14000
Sewall 80 7000 6100 14000
Marvins 80 7200 6100 14000
Bates 80 7300 6100 14000
.
.
.


9).FIRST_VALUE
功能描述Q返回组中数据窗口的W一个倹{?br /> SAMPLEQ下面例子计按部门分区按薪水排序的数据H口的第一个值对应的名字Q如果薪水的W一个值有多个Q则从多个对应的名字中取~省排序的第一个名?/font>

SELECT department_id, last_name, salary, FIRST_VALUE(last_name)
OVER (PARTITION BY department_id ORDER BY salary ASC ) AS lowest_sal
FROM employees
WHERE department_id in(20,30);

DEPARTMENT_ID LAST_NAME SALARY LOWEST_SAL
------------- ------------------------- ---------- --------------
20 Fay 6000 Fay
20 Hartstein 13000 Fay
30 Colmenares 2500 Colmenares
30 Himuro 2600 Colmenares
30 Tobias 2800 Colmenares
30 Baida 2900 Colmenares
30 Khoo 3100 Colmenares
30 Raphaely 11000 Colmenares


10).LAG
功能描述Q可以访问结果集中的其它行而不用进行自q接。它允许d理游标,好像游标是一个数l一栗在l定l中可参考当前行之前的行Q这样就可以从组中与当前行一起选择以前的行。Offset是一个正整数Q其默认gؓ1Q若索引出H口的范_p回默认|默认q回的是l中W一行)Q其相反的函数是LEAD
SAMPLEQ下面的例子中列prev_salq回按hire_date排序的前1行的salary?/font>

SELECT last_name, hire_date, salary,
LAG(salary, 1, 0) OVER (ORDER BY hire_date) AS prev_sal
FROM employees
WHERE job_id = 'PU_CLERK';

LAST_NAME HIRE_DATE SALARY PREV_SAL
------------------------- ---------- ---------- ----------
Khoo 18-5?-95 3100 0
Tobias 24-7?-97 2800 3100
Baida 24-12?97 2900 2800
Himuro 15-11?98 2600 2900
Colmenares 10-8?-99 2500 2600


11).LAST
功能描述Q从DENSE_RANKq回的集合中取出排在最后面的一个值的行(可能多行Q因为值可能相{)Q因此完整的语法需要在开始处加上一个集合函C从中取出记录
SAMPLEQ下面例子中DENSE_RANK按部门分区,再按佣金commission_pct排序QFIRST取出佣金最低的对应的所有行Q然后前面的MAX函数从这个集合中取出薪水最低的|LAST取出佣金最高的对应的所有行Q然后前面的MIN函数从这个集合中取出薪水最高的?br /> SELECT last_name, department_id, salary,
MIN(salary) KEEP (DENSE_RANK FIRST ORDER BY commission_pct)
OVER (PARTITION BY department_id) "Worst",
MAX(salary) KEEP (DENSE_RANK LAST ORDER BY commission_pct)
OVER (PARTITION BY department_id) "Best"
FROM employees
WHERE department_id in (20,80)
ORDER BY department_id, salary;

LAST_NAME DEPARTMENT_ID SALARY Worst Best
------------------------- ------------- ---------- ---------- ----------
Fay 20 6000 6000 13000
Hartstein 20 13000 6000 13000
Kumar 80 6100 6100 14000
Banda 80 6200 6100 14000
Johnson 80 6200 6100 14000
Ande 80 6400 6100 14000
Lee 80 6800 6100 14000
Tuvault 80 7000 6100 14000
Sewall 80 7000 6100 14000
Marvins 80 7200 6100 14000
Bates 80 7300 6100 14000
.
12).LAST_VALUE
功能描述Q返回组中数据窗口的最后一个倹{?br /> SAMPLEQ下面例子计按部门分区按薪水排序的数据H口的最后一个值对应的名字Q如果薪水的最后一个值有多个Q则从多个对应的名字中取~省排序的最后一个名?br /> SELECT department_id, last_name, salary, LAST_VALUE(last_name)
OVER(PARTITION BY department_id ORDER BY salary) AS highest_sal
FROM employees
WHERE department_id in(20,30);

DEPARTMENT_ID LAST_NAME SALARY HIGHEST_SAL
------------- ------------------------- ---------- ------------
20 Fay 6000 Fay
20 Hartstein 13000 Hartstein
30 Colmenares 2500 Colmenares
30 Himuro 2600 Himuro
30 Tobias 2800 Tobias
30 Baida 2900 Baida
30 Khoo 3100 Khoo
30 Raphaely 11000 Raphaely


13).LEAD
功能描述QLEAD与LAG相反QLEAD可以讉Kl中当前行之后的行。Offset是一个正整数Q其默认gؓ1Q若索引出H口的范_p回默认|默认q回的是l中W一行)
SAMPLEQ下面的例子中每行的"NextHired"q回按hire_date排序的下一行的hire_date?/font>

SELECT last_name, hire_date,
LEAD(hire_date, 1) OVER (ORDER BY hire_date) AS "NextHired"
FROM employees WHERE department_id = 30;

LAST_NAME HIRE_DATE NextHired
------------------------- --------- ---------
Raphaely 07-DEC-94 18-MAY-95
Khoo 18-MAY-95 24-JUL-97
Tobias 24-JUL-97 24-DEC-97
Baida 24-DEC-97 15-NOV-98
Himuro 15-NOV-98 10-AUG-99
Colmenares 10-AUG-99


14).MAX
功能描述Q在一个组中的数据H口中查找表辑ּ的最大倹{?br /> SAMPLEQ下面例子中dept_maxq回当前行所在部门的最大薪水?/font>

SELECT department_id, last_name, salary,
MAX(salary) OVER (PARTITION BY department_id) AS dept_max
FROM employees WHERE department_id in (10,20,30);

DEPARTMENT_ID LAST_NAME SALARY DEPT_MAX
------------- ------------------------- ---------- ----------
10 Whalen 4400 4400
20 Hartstein 13000 13000
20 Fay 6000 13000
30 Raphaely 11000 11000
30 Khoo 3100 11000
30 Baida 2900 11000
30 Tobias 2800 11000
30 Himuro 2600 11000
30 Colmenares 2500 11000


15).MIN
功能描述Q在一个组中的数据H口中查找表辑ּ的最倹{?br /> SAMPLEQ下面例子中dept_minq回当前行所在部门的最薪水?/font>

SELECT department_id, last_name, salary,
MIN(salary) OVER (PARTITION BY department_id) AS dept_min
FROM employees WHERE department_id in (10,20,30);

DEPARTMENT_ID LAST_NAME SALARY DEPT_MIN
------------- ------------------------- ---------- ----------
10 Whalen 4400 4400
20 Hartstein 13000 6000
20 Fay 6000 6000
30 Raphaely 11000 2500
30 Khoo 3100 2500
30 Baida 2900 2500
30 Tobias 2800 2500
30 Himuro 2600 2500
30 Colmenares 2500 2500


16).NTILE
功能描述Q将一个组分ؓ"表达?的散列表C,例如Q如果表辑ּ=4Q则l组中的每一行分配一个数Q从1?Q,如果l中?0行,则给?行分?Q给?行分?{等。如果组的基C能由表达式值^均分开Q则对这些行q行分配Ӟl中没有Q何percentile的行数比其它percentile的行数超q一行,最低的percentile是那些拥有额外行的percentile。例如,若表辑ּ=4Q行?21Q则percentile=1的有5行,percentile=2的有5行等{?br /> SAMPLEQ下例中?行数据分??/font>

SELECT last_name, salary,
NTILE(4) OVER (ORDER BY salary DESC) AS quartile FROM employees
WHERE department_id = 100;

LAST_NAME SALARY QUARTILE
------------------------- ---------- ----------
Greenberg 12000 1
Faviet 9000 1
Chen 8200 2
Urman 7800 2
Sciarra 7700 3
Popp 6900 4


17).PERCENT_RANK
功能描述Q和CUME_DISTQ篏U分配)函数cMQ对于一个组中给定的行来_在计那行的序号Ӟ先减1Q然后除以n-1Qn为组中所有的行数Q。该函数Lq回0?Q包?Q之间的数?br /> SAMPLEQ下例中如果Khoo的salary?900Q则prgؓ0.6Q因为RANK函数对于{值的q回序列值是一L

SELECT department_id, last_name, salary,
PERCENT_RANK()
OVER (PARTITION BY department_id ORDER BY salary) AS pr
FROM employees
WHERE department_id < 50
ORDER BY department_id,salary;

DEPARTMENT_ID LAST_NAME SALARY PR
------------- ------------------------- ---------- ----------
10 Whalen 4400 0
20 Fay 6000 0
20 Hartstein 13000 1
30 Colmenares 2500 0
30 Himuro 2600 0.2
30 Tobias 2800 0.4
30 Baida 2900 0.6
30 Khoo 3100 0.8
30 Raphaely 11000 1
40 Mavris 6500 0


18).PERCENTILE_CONT
功能描述Q返回一个与输入的分布百分比值相对应的数据|分布癑ֈ比的计算Ҏ见函数PERCENT_RANKQ如果没有正好对应的数据|通过下面法来得到|
RN = 1+ (P*(N-1)) 其中P是输入的分布癑ֈ比|N是组内的行数
CRN = CEIL(RN) FRN = FLOOR(RN)
if (CRN = FRN = RN) then
(value of expression from row at RN)
else
(CRN - RN) * (value of expression for row at FRN) +
(RN - FRN) * (value of expression for row at CRN)
注意Q本函数与PERCENTILE_DISC的区别在找不到对应的分布值时q回的替代值的计算Ҏ不同

SAMPLEQ在下例中,对于部门60的Percentile_ContD如下:
P=0.7 N=5 RN =1+ (P*(N-1)=1+(0.7*(5-1))=3.8 CRN = CEIL(3.8)=4
FRN = FLOOR(3.8)=3
Q? - 3.8Q? 4800 + (3.8 - 3) * 6000 = 5760

SELECT last_name, salary, department_id,
PERCENTILE_CONT(0.7) WITHIN GROUP (ORDER BY salary)
OVER (PARTITION BY department_id) "Percentile_Cont",
PERCENT_RANK()
OVER (PARTITION BY department_id ORDER BY salary) "Percent_Rank"
FROM employees WHERE department_id IN (30, 60);

LAST_NAME SALARY DEPARTMENT_ID Percentile_Cont Percent_Rank
------------------------- ---------- ------------- --------------- ------------
Colmenares 2500 30 3000 0
Himuro 2600 30 3000 0.2
Tobias 2800 30 3000 0.4
Baida 2900 30 3000 0.6
Khoo 3100 30 3000 0.8
Raphaely 11000 30 3000 1
Lorentz 4200 60 5760 0
Austin 4800 60 5760 0.25
Pataballa 4800 60 5760 0.25
Ernst 6000 60 5760 0.75
Hunold 9000 60 5760 1


19).PERCENTILE_DISC
功能描述Q返回一个与输入的分布百分比值相对应的数据|分布癑ֈ比的计算Ҏ见函数CUME_DISTQ如果没有正好对应的数据|取大于该分布值的下一个倹{?br /> 注意Q本函数与PERCENTILE_CONT的区别在找不到对应的分布值时q回的替代值的计算Ҏ不同

SAMPLEQ下例中0.7的分布值在部门30中没有对应的Cume_Dist|所以就取下一个分布?.83333333所对应的SALARY来替?/font>

SELECT last_name, salary, department_id,
PERCENTILE_DISC(0.7) WITHIN GROUP (ORDER BY salary )
OVER (PARTITION BY department_id) "Percentile_Disc",
CUME_DIST() OVER (PARTITION BY department_id ORDER BY salary) "Cume_Dist"
FROM employees
WHERE department_id in (30, 60);

LAST_NAME SALARY DEPARTMENT_ID Percentile_Disc Cume_Dist
------------------------- ---------- ------------- --------------- ----------
Colmenares 2500 30 3100 .166666667
Himuro 2600 30 3100 .333333333
Tobias 2800 30 3100 .5
Baida 2900 30 3100 .666666667
Khoo 3100 30 3100 .833333333
Raphaely 11000 30 3100 1
Lorentz 4200 60 6000 .2
Austin 4800 60 6000 .6
Pataballa 4800 60 6000 .6
Ernst 6000 60 6000 .8
Hunold 9000 60 6000 1


20).RANK
功能描述Q根据ORDER BY子句中表辑ּ的|从查询返回的每一行,计算它们与其它行的相对位|。组内的数据按ORDER BY子句排序Q然后给每一行赋一个号Q从而Ş成一个序列,该序列从1开始,往后篏加。每ơORDER BY表达式的值发生变化时Q该序列也随之增加。有同样值的行得到同L数字序号Q认为null时相{的Q。然而,如果两行的确得到同样的排序,则序数将随后跌。若两行序数?Q则没有序数2Q序列将l组中的下一行分配?QDENSE_RANK则没有Q何蟩跃?br /> SAMPLEQ下例中计算每个员工按部门分区再按薪水排序,依次出现的序列号Q注意与DENSE_RANK函数的区别)

SELECT d.department_id , e.last_name, e.salary, RANK()
OVER (PARTITION BY e.department_id ORDER BY e.salary) as drank
FROM employees e, departments d
WHERE e.department_id = d.department_id
AND d.department_id IN ('60', '90');

DEPARTMENT_ID LAST_NAME SALARY DRANK
------------- ------------------------- ---------- ----------
60 Lorentz 4200 1
60 Austin 4800 2
60 Pataballa 4800 2
60 Ernst 6000 4
60 Hunold 9000 5
90 Kochhar 17000 1
90 De Haan 17000 1
90 King 24000 3


21).RATIO_TO_REPORT
功能描述Q该函数计算expression/(sum(expression))的|它给出相对于L的百分比Q即当前行对sum(expression)的A献?br /> SAMPLEQ下例计每个员工的工资占该cd工d资的癑ֈ?/font>

SELECT last_name, salary, RATIO_TO_REPORT(salary) OVER () AS rr
FROM employees
WHERE job_id = 'PU_CLERK';

LAST_NAME SALARY RR
------------------------- ---------- ----------
Khoo 3100 .223021583
Baida 2900 .208633094
Tobias 2800 .201438849
Himuro 2600 .18705036
Colmenares 2500 .179856115


22).REGR_ (Linear Regression) Functions
功能描述Q这些线性回归函数适合最二乘法回归U,?个不同的回归函数可用?br /> REGR_SLOPEQ返回斜率,{于COVAR_POP(expr1, expr2) / VAR_POP(expr2)
REGR_INTERCEPTQ返回回归线的y截距Q等?br /> AVG(expr1) - REGR_SLOPE(expr1, expr2) * AVG(expr2)
REGR_COUNTQ返回用于填充回归线的非I数字对的数?br /> REGR_R2Q返回回归线的决定系敎ͼ计算式ؓQ?br /> If VAR_POP(expr2) = 0 then return NULL
If VAR_POP(expr1) = 0 and VAR_POP(expr2) != 0 then return 1
If VAR_POP(expr1) > 0 and VAR_POP(expr2 != 0 then
return POWER(CORR(expr1,expr),2)
REGR_AVGXQ计回归线的自变量(expr2)的^均|L了空?expr1, expr2)后,{于AVG(expr2)
REGR_AVGYQ计回归线的应变量(expr1)的^均|L了空?expr1, expr2)后,{于AVG(expr1)
REGR_SXXQ?q回值等于REGR_COUNT(expr1, expr2) * VAR_POP(expr2)
REGR_SYYQ?q回值等于REGR_COUNT(expr1, expr2) * VAR_POP(expr1)
REGR_SXY: q回值等于REGR_COUNT(expr1, expr2) * COVAR_POP(expr1, expr2)

Q下面的例子都是在SH用户下完成的Q?br /> SAMPLE 1Q下例计?998q最后三个星期中两种产品Q?60?70Q在周末的销售量中已开发票数量和L量的累积斜率和回归线的截?/font>

SELECT t.fiscal_month_number "Month", t.day_number_in_month "Day",
REGR_SLOPE(s.amount_sold, s.quantity_sold)
OVER (ORDER BY t.fiscal_month_desc, t.day_number_in_month) AS CUM_SLOPE,
REGR_INTERCEPT(s.amount_sold, s.quantity_sold)
OVER (ORDER BY t.fiscal_month_desc, t.day_number_in_month) AS CUM_ICPT
FROM sales s, times t
WHERE s.time_id = t.time_id
AND s.prod_id IN (270, 260)
AND t.fiscal_year=1998
AND t.fiscal_week_number IN (50, 51, 52)
AND t.day_number_in_week IN (6,7)
ORDER BY t.fiscal_month_desc, t.day_number_in_month;

Month Day CUM_SLOPE CUM_ICPT
---------- ---------- ---------- ----------
12 12 -68 1872
12 12 -68 1872
12 13 -20.244898 1254.36735
12 13 -20.244898 1254.36735
12 19 -18.826087 1287
12 20 62.4561404 125.28655
12 20 62.4561404 125.28655
12 20 62.4561404 125.28655
12 20 62.4561404 125.28655
12 26 67.2658228 58.9712313
12 26 67.2658228 58.9712313
12 27 37.5245541 284.958221
12 27 37.5245541 284.958221
12 27 37.5245541 284.958221

SAMPLE 2Q下例计?998q?月每天的累积交易数量

SELECT UNIQUE t.day_number_in_month,
REGR_COUNT(s.amount_sold, s.quantity_sold)
OVER (PARTITION BY t.fiscal_month_number ORDER BY t.day_number_in_month)
"Regr_Count"
FROM sales s, times t
WHERE s.time_id = t.time_id
AND t.fiscal_year = 1998 AND t.fiscal_month_number = 4;

DAY_NUMBER_IN_MONTH Regr_Count
------------------- ----------
1 825
2 1650
3 2475
4 3300
.
.
.
26 21450
30 22200

SAMPLE 3Q下例计?998q每月销售量中已开发票数量和L量的累积回归U决定系?/font>

SELECT t.fiscal_month_number,
REGR_R2(SUM(s.amount_sold), SUM(s.quantity_sold))
OVER (ORDER BY t.fiscal_month_number) "Regr_R2"
FROM sales s, times t
WHERE s.time_id = t.time_id
AND t.fiscal_year = 1998
GROUP BY t.fiscal_month_number
ORDER BY t.fiscal_month_number;

FISCAL_MONTH_NUMBER Regr_R2
------------------- ----------
1
2 1
3 .927372984
4 .807019972
5 .932745567
6 .94682861
7 .965342011
8 .955768075
9 .959542618
10 .938618575
11 .880931415
12 .882769189

SAMPLE 4Q下例计?998q?2月最后两周?60的销售量中已开发票数量和L量的累积q_?/font>

SELECT t.day_number_in_month,
REGR_AVGY(s.amount_sold, s.quantity_sold)
OVER (ORDER BY t.fiscal_month_desc, t.day_number_in_month)
"Regr_AvgY",
REGR_AVGX(s.amount_sold, s.quantity_sold)
OVER (ORDER BY t.fiscal_month_desc, t.day_number_in_month)
"Regr_AvgX"
FROM sales s, times t
WHERE s.time_id = t.time_id
AND s.prod_id = 260
AND t.fiscal_month_desc = '1998-12'
AND t.fiscal_week_number IN (51, 52)
ORDER BY t.day_number_in_month;

DAY_NUMBER_IN_MONTH Regr_AvgY Regr_AvgX
------------------- ---------- ----------
14 882 24.5
14 882 24.5
15 801 22.25
15 801 22.25
16 777.6 21.6
18 642.857143 17.8571429
18 642.857143 17.8571429
20 589.5 16.375
21 544 15.1111111
22 592.363636 16.4545455
22 592.363636 16.4545455
24 553.846154 15.3846154
24 553.846154 15.3846154
26 522 14.5
27 578.4 16.0666667

SAMPLE 5Q下例计?60?70?998q?月周末销售量中已开发票数量和L量的累积REGR_SXY, REGR_SXX, and REGR_SYYl计?/font>

SELECT t.day_number_in_month,
REGR_SXY(s.amount_sold, s.quantity_sold)
OVER (ORDER BY t.fiscal_year, t.fiscal_month_desc) "Regr_sxy",
REGR_SYY(s.amount_sold, s.quantity_sold)
OVER (ORDER BY t.fiscal_year, t.fiscal_month_desc) "Regr_syy",
REGR_SXX(s.amount_sold, s.quantity_sold)
OVER (ORDER BY t.fiscal_year, t.fiscal_month_desc) "Regr_sxx"
FROM sales s, times t
WHERE s.time_id = t.time_id
AND prod_id IN (270, 260)
AND t.fiscal_month_desc = '1998-02'
AND t.day_number_in_week IN (6,7)
ORDER BY t.day_number_in_month;

DAY_NUMBER_IN_MONTH Regr_sxy Regr_syy Regr_sxx
------------------- ---------- ---------- ----------
1 18870.4 2116198.4 258.4
1 18870.4 2116198.4 258.4
1 18870.4 2116198.4 258.4
1 18870.4 2116198.4 258.4
7 18870.4 2116198.4 258.4
8 18870.4 2116198.4 258.4
14 18870.4 2116198.4 258.4
15 18870.4 2116198.4 258.4
21 18870.4 2116198.4 258.4
22 18870.4 2116198.4 258.4


23).ROW_NUMBER
功能描述Q返回有序组中一行的偏移量,从而可用于按特定标准排序的行号?br /> SAMPLEQ下例返回每个员工再在每个部门中按员工号排序后的序?/font>

SELECT department_id, last_name, employee_id, ROW_NUMBER()
OVER (PARTITION BY department_id ORDER BY employee_id) AS emp_id
FROM employees
WHERE department_id < 50;

DEPARTMENT_ID LAST_NAME EMPLOYEE_ID EMP_ID
------------- ------------------------- ----------- ----------
10 Whalen 200 1
20 Hartstein 201 1
20 Fay 202 2
30 Raphaely 114 1
30 Khoo 115 2
30 Baida 116 3
30 Tobias 117 4
30 Himuro 118 5
30 Colmenares 119 6
40 Mavris 203 1


24).STDDEV
功能描述Q计当前行关于l的标准偏离。(Standard DeviationQ?br /> SAMPLEQ下例返回部?0按雇佣日期排序的薪水值的累积标准偏离

SELECT last_name, hire_date,salary,
STDDEV(salary) OVER (ORDER BY hire_date) "StdDev"
FROM employees
WHERE department_id = 30;

LAST_NAME HIRE_DATE SALARY StdDev
------------------------- ---------- ---------- ----------
Raphaely 07-12?94 11000 0
Khoo 18-5?-95 3100 5586.14357
Tobias 24-7?-97 2800 4650.0896
Baida 24-12?97 2900 4035.26125
Himuro 15-11?98 2600 3649.2465
Colmenares 10-8?-99 2500 3362.58829


25).STDDEV_POP
功能描述Q该函数计算M标准偏离Qƈq回M变量的^ҎQ其q回gVAR_POP函数的^Ҏ相同。(Standard DeviationQPopulationQ?br /> SAMPLEQ下例返回部?0?0?0的薪水值的M标准偏差

SELECT department_id, last_name, salary,
STDDEV_POP(salary) OVER (PARTITION BY department_id) AS pop_std
FROM employees
WHERE department_id in (20,30,60);

DEPARTMENT_ID LAST_NAME SALARY POP_STD
------------- ------------------------- ---------- ----------
20 Hartstein 13000 3500
20 Fay 6000 3500
30 Raphaely 11000 3069.6091
30 Khoo 3100 3069.6091
30 Baida 2900 3069.6091
30 Colmenares 2500 3069.6091
30 Himuro 2600 3069.6091
30 Tobias 2800 3069.6091
60 Hunold 9000 1722.32401
60 Ernst 6000 1722.32401
60 Austin 4800 1722.32401
60 Pataballa 4800 1722.32401
60 Lorentz 4200 1722.32401


26).STDDEV_SAMP
功能描述Q?该函数计篏U样本标准偏,q返回M变量的^ҎQ其q回gVAR_POP函数的^Ҏ相同。(Standard DeviationQSampleQ?br /> SAMPLEQ下例返回部?0?0?0的薪水值的h标准偏差

SELECT department_id, last_name, hire_date, salary,
STDDEV_SAMP(salary) OVER
(PARTITION BY department_id ORDER BY hire_date
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS cum_sdev
FROM employees
WHERE department_id in (20,30,60);

DEPARTMENT_ID LAST_NAME HIRE_DATE SALARY CUM_SDEV
------------- ------------------------- ---------- ---------- ----------
20 Hartstein 17-2?-96 13000
20 Fay 17-8?-97 6000 4949.74747
30 Raphaely 07-12?94 11000
30 Khoo 18-5?-95 3100 5586.14357
30 Tobias 24-7?-97 2800 4650.0896
30 Baida 24-12?97 2900 4035.26125
30 Himuro 15-11?98 2600 3649.2465
30 Colmenares 10-8?-99 2500 3362.58829
60 Hunold 03-1?-90 9000
60 Ernst 21-5?-91 6000 2121.32034
60 Austin 25-6?-97 4800 2163.33077
60 Pataballa 05-2?-98 4800 1982.42276
60 Lorentz 07-2?-99 4200 1925.61678


27).SUM
功能描述Q该函数计算l中表达式的累积和?br /> SAMPLEQ下例计同一l理下员工的薪水累积?/font>

SELECT manager_id, last_name, salary,
SUM (salary) OVER (PARTITION BY manager_id ORDER BY salary
RANGE UNBOUNDED PRECEDING) l_csum
FROM employees
WHERE manager_id in (101,103,108);

MANAGER_ID LAST_NAME SALARY L_CSUM
---------- ------------------------- ---------- ----------
101 Whalen 4400 4400
101 Mavris 6500 10900
101 Baer 10000 20900
101 Greenberg 12000 44900
101 Higgins 12000 44900
103 Lorentz 4200 4200
103 Austin 4800 13800
103 Pataballa 4800 13800
103 Ernst 6000 19800
108 Popp 6900 6900
108 Sciarra 7700 14600
108 Urman 7800 22400
108 Chen 8200 30600
108 Faviet 9000 39600


28).VAR_POP
功能描述Q(Variance PopulationQ该函数q回非空集合的M变量Q忽略nullQ,VAR_POPq行如下计算Q?br /> (SUM(expr2) - SUM(expr)2 / COUNT(expr)) / COUNT(expr)
SAMPLEQ下例计?998q每月销售的累积M和样本变量(本例在SH用户下运行)

SELECT t.calendar_month_desc,
VAR_POP(SUM(s.amount_sold))
OVER (ORDER BY t.calendar_month_desc) "Var_Pop",
VAR_SAMP(SUM(s.amount_sold))
OVER (ORDER BY t.calendar_month_desc) "Var_Samp"
FROM sales s, times t
WHERE s.time_id = t.time_id AND t.calendar_year = 1998
GROUP BY t.calendar_month_desc;

CALENDAR Var_Pop Var_Samp
-------- ---------- ----------
1998-01 0
1998-02 6.1321E+11 1.2264E+12
1998-03 4.7058E+11 7.0587E+11
1998-04 4.6929E+11 6.2572E+11
1998-05 1.5524E+12 1.9405E+12
1998-06 2.3711E+12 2.8453E+12
1998-07 3.7464E+12 4.3708E+12
1998-08 3.7852E+12 4.3260E+12
1998-09 3.5753E+12 4.0222E+12
1998-10 3.4343E+12 3.8159E+12
1998-11 3.4245E+12 3.7669E+12
1998-12 4.8937E+12 5.3386E+12


29).VAR_SAMP
功能描述Q(Variance SampleQ该函数q回非空集合的样本变量(忽略nullQ,VAR_POPq行如下计算Q?br /> (SUM(expr*expr)-SUM(expr)*SUM(expr)/COUNT(expr))/(COUNT(expr)-1)
SAMPLEQ下例计?998q每月销售的累积M和样本变?/font>

SELECT t.calendar_month_desc,
VAR_POP(SUM(s.amount_sold))
OVER (ORDER BY t.calendar_month_desc) "Var_Pop",
VAR_SAMP(SUM(s.amount_sold))
OVER (ORDER BY t.calendar_month_desc) "Var_Samp"
FROM sales s, times t
WHERE s.time_id = t.time_id AND t.calendar_year = 1998
GROUP BY t.calendar_month_desc;

CALENDAR Var_Pop Var_Samp
-------- ---------- ----------
1998-01 0
1998-02 6.1321E+11 1.2264E+12
1998-03 4.7058E+11 7.0587E+11
1998-04 4.6929E+11 6.2572E+11
1998-05 1.5524E+12 1.9405E+12
1998-06 2.3711E+12 2.8453E+12
1998-07 3.7464E+12 4.3708E+12
1998-08 3.7852E+12 4.3260E+12
1998-09 3.5753E+12 4.0222E+12
1998-10 3.4343E+12 3.8159E+12
1998-11 3.4245E+12 3.7669E+12
1998-12 4.8937E+12 5.3386E+12


30).VARIANCE
功能描述Q该函数q回表达式的变量QOracle计算该变量如下:
如果表达式中行数?Q则q回0
如果表达式中行数大于1Q则q回VAR_SAMP
SAMPLEQ下例返回部?0按雇佣日期排序的薪水值的累积变化

SELECT last_name, salary, VARIANCE(salary)
OVER (ORDER BY hire_date) "Variance"
FROM employees
WHERE department_id = 30;

LAST_NAME SALARY Variance
------------------------- ---------- ----------
Raphaely 11000 0
Khoo 3100 31205000
Tobias 2800 21623333.3
Baida 2900 16283333.3
Himuro 2600 13317000
Colmenares 2500 11307000

=====================================
q箋求和问题Q?br /> select name,sum(cnt) over(order by rownum) from t1;



谭明 2009-06-25 15:35 发表评论
]]>
oracle blob clob大数据类?/title><link>http://www.tkk7.com/msmary/articles/252345.html</link><dc:creator>谭明</dc:creator><author>谭明</author><pubDate>Thu, 22 Jan 2009 06:58:00 GMT</pubDate><guid>http://www.tkk7.com/msmary/articles/252345.html</guid><wfw:comment>http://www.tkk7.com/msmary/comments/252345.html</wfw:comment><comments>http://www.tkk7.com/msmary/articles/252345.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/msmary/comments/commentRss/252345.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/msmary/services/trackbacks/252345.html</trackback:ping><description><![CDATA[<p>一、请问clob   和blob是什么意? </p> <p> {:Q,他们都是oracle数据库中的大对象数据cdQoracle提供专门的包对其操作?/p> <p>         2Qblob、clob、nclob   三种大型对象(LOB)Q用来保存较大的囑Ş文g或带格式的文本文Ӟ如Miceosoft   Word文档Q以及音频、视频等非文本文Ӟ最大长度是4GB?nbsp;  </p> <p>         LOB有几U类型,取决于你使用的字节的cdQOracle   8i实实在在地将q些数据存储在数据库内部保存?nbsp;  <br />    可以执行d、存储、写入等Ҏ操作   <br />      <br />         CLOB(Character   Large   Object)    用于存储对应于数据库定义的字W集的字W数据。(cM于longcdQ?nbsp;  <br />      <br />          BLOB(Binary   Large   Object)   可用来存储无l构的二q制数据。(cM于row和long   rowQ?/p> <p>二、请问LOB的BLOB、CLOB、BFILE有什麽区别,都用在什麽情况?怎样操作Q?/p> <p> {:</p> <p> BLOB   ——内部二q制大对象?nbsp;  <br />  CLOB  ——内部字W大对象?nbsp;  <br />  NCLOB   ——内部定长多字节字符大对象?nbsp;  <br />  BFILE   ——外部二q制文g?nbsp;     <br />    LOB   ׃部分l成Q数据(|和指向数据的指针Q定位器Q。尽g表自w一起存储,但是一个LOB 列ƈ不包含|仅有它的定位指针。更q一步,Z使用大对象,E序必须?明定位器cd的本地变量。你在本章后面见到P   L   /   S   Q   L   接口使用定位器如同操作系l的文g 处理一栗当LOBQ除了BFILE  Q被创徏Ӟ定位器被存放在列中,D存放在LOB D中Q?nbsp; LOB  D|在数据库内部表的一部分。当 BFILE  被创建时Q定位器如同q_一样存储在列中</p> <p> 三、blob和clob最大是多少Q还是没有最大限Ӟ</p> <p> {:它们的最大上限就是4GQ?nbsp;  Clob可以存储单字节字W数据,Blob可以存储无结构的二进制数?/p> <p> </p> <img src ="http://www.tkk7.com/msmary/aggbug/252345.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/msmary/" target="_blank">谭明</a> 2009-01-22 14:58 <a href="http://www.tkk7.com/msmary/articles/252345.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle 的递归查询(树状查询)http://www.tkk7.com/msmary/articles/245510.html谭明谭明Wed, 10 Dec 2008 07:56:00 GMThttp://www.tkk7.com/msmary/articles/245510.htmlhttp://www.tkk7.com/msmary/comments/245510.htmlhttp://www.tkk7.com/msmary/articles/245510.html#Feedback0http://www.tkk7.com/msmary/comments/commentRss/245510.htmlhttp://www.tkk7.com/msmary/services/trackbacks/245510.html SELECT 1,LEVEL,LNAME,NULL,CODE
     FROM PRDGP CONNECT BY PRIOR  CODE = P_CODE
    START WITH P_CODE IS NULL
说明QP_CODE为父U,CODE为子集,P_CODE为空时ؓ树的最Q即为Start with LQ递归方式为CODE = P_CODE,LEVEL为树的等U?

SELECT  CODE,LNAME,CNAME
     FROM PRDGP WHERE CODE <> 'LBL' AND TYPE= 'GMT' CONNECT BY PRIOR CODE=PARENTGRP AND PARENTGRP <> 'LBL'
    START WITH  PARENTGRP IS NULL  ORDER BY CODE

谭明 2008-12-10 15:56 发表评论
]]>
Oracle存储q程http://www.tkk7.com/msmary/articles/244373.html谭明谭明Thu, 04 Dec 2008 06:45:00 GMThttp://www.tkk7.com/msmary/articles/244373.htmlhttp://www.tkk7.com/msmary/comments/244373.htmlhttp://www.tkk7.com/msmary/articles/244373.html#Feedback0http://www.tkk7.com/msmary/comments/commentRss/244373.htmlhttp://www.tkk7.com/msmary/services/trackbacks/244373.htmlOracle存储q程包含三部分:q程声明Q执行过E部分,存储q程异常?/span>

Oracle存储q程可以有无参数存储q程和带参数存储q程?/font> 
、无参程序过E语?/font>

1 create or replace procedure NoParPro
2 as
  ;
3 begin

4 ;
5 
exception     //存储q程异常
6 
    ;
7 end
;
8 

        二?font size="4">带参存储q程实例

 1 create or replace procedure queryempname(sfindno emp.empno%type) as
 2        sName emp.ename%type;
 3        sjob emp.job%
type;
 4 begin

 5        ....
 7 exception
          ....
14 end;
15 

    三?带参数存储过E含赋值方?/font>
 1 create or replace procedure runbyparmeters  (isal in emp.sal%type,
                            sname out 
varchar,sjob in out varchar
)
 2  as icount number
;
 3  begin

 4       select count(*into icount from emp where sal>isal and job=sjob;
 5       if icount=1 then

 6         ....
 9       else
10         ....
12       end if;
13 
 exception
14       when too_many_rows then

15       DBMS_OUTPUT.PUT_LINE('q回值多??/span>');
16       when others then

17       DBMS_OUTPUT.PUT_LINE('在RUNBYPARMETERSq程中出错!');
18  end
;
19 

  四、在Oracle中对存储q程的调?/font>
  q程调用方式一
 1 declare
 2        realsal emp.sal%type;
 3        realname varchar(40
);
 4        realjob varchar(40
);
 5  begin   //存储q程调用开?/span>

 6        realsal:=1100;
 7        realname:=''
;
 8        realjob:='CLERK'
;
 9        runbyparmeters(realsal,realname,realjob);     Q-
必须按顺?br /> 10        DBMS_OUTPUT.PUT_LINE(REALNAME||'   '||REALJOB);
11  END
;  //q程调用l束
12 

  q程调用方式?/font>
 1 declare
 2       realsal emp.sal%type;
 3       realname varchar(40
);
 4       realjob varchar(40
);
 5 begin    //q程调用开?/span>

 6       realsal:=1100;
 7       realname:=''
;
 8       realjob:='CLERK'
;
 9       runbyparmeters(sname=>realname,isal=>realsal,sjob=>realjob);  Q-
指定值对应变量顺序可?br /> 10       DBMS_OUTPUT.PUT_LINE(REALNAME||'   '||REALJOB);
11 END
;  //q程调用l束
12 
 xQ有关ORACLE的基本存储过E以及对Oracle存储q程的调用方式介l完毕?/font>

谭明 2008-12-04 14:45 发表评论
]]>
两个有用的oracle数据库运:intersect和minusq算http://www.tkk7.com/msmary/articles/238280.html谭明谭明Mon, 03 Nov 2008 01:31:00 GMThttp://www.tkk7.com/msmary/articles/238280.htmlhttp://www.tkk7.com/msmary/comments/238280.htmlhttp://www.tkk7.com/msmary/articles/238280.html#Feedback0http://www.tkk7.com/msmary/comments/commentRss/238280.htmlhttp://www.tkk7.com/msmary/services/trackbacks/238280.htmlintersectq算?
q回查询l果中相同的部分?
exp:
各个部门中有哪些相同的工U
select  job  fromaccount?
intersect?
selectjob  fromresearch?
intersect?
selectjob  fromsales;?

minusq算?
q回在第一个查询结果中与第二个查询l果不相同的那部分行记录。
有哪些工U在财会部中有,而在销售部中没有??
exp:
selectjobfromaccount?
minus?
selectjobfromsales;


谭明 2008-11-03 09:31 发表评论
]]>
Oracle session killhttp://www.tkk7.com/msmary/articles/233390.html谭明谭明Thu, 09 Oct 2008 09:13:00 GMThttp://www.tkk7.com/msmary/articles/233390.htmlhttp://www.tkk7.com/msmary/comments/233390.htmlhttp://www.tkk7.com/msmary/articles/233390.html#Feedback1http://www.tkk7.com/msmary/comments/commentRss/233390.htmlhttp://www.tkk7.com/msmary/services/trackbacks/233390.htmlalter system kill session 'sid,serial#' ;

 被kill掉的session,状态会被标Cؓkilled,Oracle会在该用户下一ơtouch时清除该q程.

我们发现当一个session被kill掉以后,该session的paddr被修改,如果有多个session被killQ那么多个session
的paddr都被更改为相同的q程地址

在这U情况下,很多时候,资源是无法释攄,我们需要查询spidQ在操作pȝU来killq些q程.

但是׃此时v$session.paddr已经改变Q我们无法通过v$session和v$process兌来获得spid

那还可以怎么办呢?

我们来看一下下面的查询:

SELECT P.ADDR FROM V$PROCESS P WHERE PID <> 1
MINUS
SELECT S.PADDR FROM V$SESSION S;

现在我们获得了进E地址Q就可以在v$process中找到spidQ然后可以用Kill或者orakill在系l来杀掉这些进E?

实际?应该?

当在Oracle中kill session以后, Oracle只是单的把相关session的paddr 指向同一个虚拟地址.

此时v$process和v$session失去兌,q程此中断.

然后Oracleq待PMONL除这些Session.所以通常{待一个被标记为Killed的Session退出需要花费很长的旉.

如果此时被Kill的processQ重新尝试执行Q务,那么马上会收到进E中断的提示Qprocess退出,此时Oracle会立卛_动PMON
来清除该session.q被作ؓ一ơ异怸断处?

相关Q?br /> orakill sid spid 其中sid为实例名Qspid为线E号
不过我运行时L报错:
Could not attach to Oracle instance sid?br />



谭明 2008-10-09 17:13 发表评论
]]>
Oracle W记http://www.tkk7.com/msmary/articles/231050.html谭明谭明Thu, 25 Sep 2008 02:09:00 GMThttp://www.tkk7.com/msmary/articles/231050.htmlhttp://www.tkk7.com/msmary/comments/231050.htmlhttp://www.tkk7.com/msmary/articles/231050.html#Feedback0http://www.tkk7.com/msmary/comments/commentRss/231050.htmlhttp://www.tkk7.com/msmary/services/trackbacks/231050.html   Truncate Table [表名]
q个可以直接清空数据Qdelete是逐行删除Q?

2.SELECT CASE THEN 的用?br />   SELECT CODE,CASE SYSPAR.GETLANG WHEN 'EN' THEN LNAME ELSE NVL(CNAME,LNAME) END NAME
  FROM PRD;

3.查询服务器的字符?br />      SELECT USERENV('LANGUAGE') FROM DUAL;

4.单引号也用单引号转义
   select '''' from dual  l果?'

5.查看用户表注?br />   SELECT TABLE_NAME,COMMENTS FROM USER_TAB_COMMENTS;

6.oracle 增加和删除列
add
  ALTER TABLE PRD ADD DISPLAY_CODE  VARCHAR2(30); 
delete
  删除列的2U方?

alter table qq drop column TIME

alter table qq set unused ("TIME") cascade constraints;(注意TIME为字D名Q要大写)
W一个命令直接删除一个列Q适合应付比较的表,
W二个命令将一个列标识为unused
然后在系l负载比较轻的时候?br /> alter table drop unused columns
删除该列占用的存储空间?br /> 可以使用参数指定一ơ删除多行
适合负蝲比较重,或者表比较大的情况

7.新徏一个表旉要赋权限和徏同义?br />    GRANT ALL ON DBOWN.PROD TO APPUSER;
   GRANT SELECT,DELETE,UPDATE,INSERT ON DBOWN.ORDSTYLES TO APPUSER;
   CREATE OR REPLACE PUBLIC SYNONYM ORDSTYLES FOR ORDSTYLES;
8.物化视图
      EXEC DBMS_SNAPSHOT.refresh('GRANTEDPRIV');



谭明 2008-09-25 10:09 发表评论
]]>
Oracle 外联接用?/title><link>http://www.tkk7.com/msmary/articles/225317.html</link><dc:creator>谭明</dc:creator><author>谭明</author><pubDate>Thu, 28 Aug 2008 07:35:00 GMT</pubDate><guid>http://www.tkk7.com/msmary/articles/225317.html</guid><wfw:comment>http://www.tkk7.com/msmary/comments/225317.html</wfw:comment><comments>http://www.tkk7.com/msmary/articles/225317.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/msmary/comments/commentRss/225317.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/msmary/services/trackbacks/225317.html</trackback:ping><description><![CDATA[<span style="font-size: 10pt; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'"><font face="宋体"> 1.外部联接</font></span><span style="font-family: 'Courier New'; font-size: 10pt" lang="EN-US">"+"</span><span style="font-size: 10pt; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'"><font face="宋体">按其?/font></span><span style="font-family: 'Courier New'; font-size: 10pt" lang="EN-US">"="</span><span style="font-size: 10pt; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'"><font face="宋体">的左Ҏ双分左联接和右联接</font></span><span style="font-family: 'Courier New'; font-size: 10pt" lang="EN-US">.<o:p></o:p></span> <p><span style="font-family: 'Courier New'; font-size: 10pt" lang="EN-US">    </span><span style="font-size: 10pt; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'"><font face="宋体">若不?/font></span><span style="font-family: 'Courier New'; font-size: 10pt" lang="EN-US">"+"</span><span style="font-size: 10pt; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'"><font face="宋体">q算W的表中的一个行不直接匹配于?/font></span><span style="font-family: 'Courier New'; font-size: 10pt" lang="EN-US">"+"</span><span style="font-size: 10pt; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'"><font face="宋体">预算W的表中的Q何行</font></span><span style="font-family: 'Courier New'; font-size: 10pt" lang="EN-US">,</span><span style="font-size: 10pt; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'"><font face="宋体">则前者的行与后者中的一个空行相匚wq被q回</font></span><span style="font-family: 'Courier New'; font-size: 10pt" lang="EN-US">.<br /></span><span style="font-size: 10pt; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'"><font face="宋体">  若二者均不带</font></span><span style="font-family: 'Courier New'; font-size: 10pt" lang="EN-US">"+",</span><span style="font-size: 10pt; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'"><font face="宋体">则二者中无法匚w的均被返?/font></span><span style="font-family: 'Courier New'; font-size: 10pt" lang="EN-US">.<o:p></o:p></span></p> <p><span style="font-family: 'Courier New'; font-size: 10pt" lang="EN-US">    </span><span style="font-size: 10pt; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'"><font face="宋体">利用外部联接</font></span><span style="font-family: 'Courier New'; font-size: 10pt" lang="EN-US">"+",</span><span style="font-size: 10pt; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'"><font face="宋体">可以替代效率十分低下?/font></span><span style="font-family: 'Courier New'; font-size: 10pt" lang="EN-US"> not in </span><span style="font-size: 10pt; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'"><font face="宋体">q算</font></span><span style="font-family: 'Courier New'; font-size: 10pt" lang="EN-US">,</span><span style="font-size: 10pt; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'"><font face="宋体">大大提高q行速度</font></span><span style="font-family: 'Courier New'; font-size: 10pt" lang="EN-US">.<br /></span><span style="font-size: 10pt; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'"><font face="宋体">  </font></span><span style="font-family: 'Courier New'; font-size: 10pt" lang="EN-US"> <br /></span><span style="font-size: 10pt; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'"><font face="宋体"> </font></span><span style="font-family: 'Courier New'; font-size: 10pt" lang="EN-US">  </span><span style="font-size: 10pt; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'"><font face="宋体">例如</font></span><span style="font-family: 'Courier New'; font-size: 10pt" lang="EN-US">:</span><span style="font-size: 10pt; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'"><font face="宋体">?/font></span><span style="font-family: 'Courier New'; font-size: 10pt" lang="EN-US">A</span><span style="font-size: 10pt; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'"><font face="宋体">和表</font></span><span style="font-family: 'Courier New'; font-size: 10pt" lang="EN-US">B,B</span><span style="font-size: 10pt; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'"><font face="宋体">的部分内容包含在</font></span><span style="font-family: 'Courier New'; font-size: 10pt" lang="EN-US">A</span><span style="font-size: 10pt; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'"><font face="宋体">?/font></span><span style="font-family: 'Courier New'; font-size: 10pt" lang="EN-US">,</span><span style="font-size: 10pt; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'"><font face="宋体">两个表关联后</font></span><span style="font-family: 'Courier New'; font-size: 10pt" lang="EN-US">,</span><span style="font-size: 10pt; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'"><font face="宋体">要求昄</font></span><span style="font-family: 'Courier New'; font-size: 10pt" lang="EN-US">A</span><span style="font-size: 10pt; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'"><font face="宋体">的所有内?/font></span><span style="font-family: 'Courier New'; font-size: 10pt" lang="EN-US">,B</span><span style="font-size: 10pt; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'"><font face="宋体">不能?/font></span><span style="font-family: 'Courier New'; font-size: 10pt" lang="EN-US">A</span><span style="font-size: 10pt; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'"><font face="宋体">匚w的就用空格显C?/font></span><span style="font-family: 'Courier New'; font-size: 10pt" lang="EN-US">,</span><span style="font-size: 10pt; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-bidi-font-family: 'Courier New'"><font face="宋体">则两者的表达为左联接</font></span><span style="font-family: 'Courier New'; font-size: 10pt" lang="EN-US">: A=B(+)<br /><o:p><br />2.左右q接的表带有条g?条g为is null ?is not null<br />  SELECT A.ORDSEQ,B.ORDTY,A.RELORD FROM ORDREL A,ORD B<br />   WHERE A.ORDSEQ = B.ORDSEQ(+) <br />     AND A.RELORD = 5339<br />     AND B.ISSUPPLY (+) IS NOT NULL<br /><br />3.当A表和B表进行左q接?C因ؓ是B的子?所以B表也要和C表进行左q接,q样B表没记录?C表也会没记录,相当于A表也和C表进行了左连?保证A表的数据都能正常昄<br />  SELECT A.ORDSEQ,B.ORDTY,A.RELORD FROM ORDREL A,ORD B,ORDITM C<br />   WHERE A.ORDSEQ = B.ORDSEQ(+) <br />     AND A.RELORD = 5339<br />     AND B.ISSUPPLY (+) IS NOT NULL<br />     <font size="2">AND B.ORDSEQ = C.ORDSEQ</font><br /><br />4.和字W串的右q接<br />  AND RT.TRANSACTION_TYPE (+)= 'RETURN TO VENDOR'<br />     </o:p></span></p><img src ="http://www.tkk7.com/msmary/aggbug/225317.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/msmary/" target="_blank">谭明</a> 2008-08-28 15:35 <a href="http://www.tkk7.com/msmary/articles/225317.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用户权限及角?/title><link>http://www.tkk7.com/msmary/articles/213695.html</link><dc:creator>谭明</dc:creator><author>谭明</author><pubDate>Wed, 09 Jul 2008 08:23:00 GMT</pubDate><guid>http://www.tkk7.com/msmary/articles/213695.html</guid><wfw:comment>http://www.tkk7.com/msmary/comments/213695.html</wfw:comment><comments>http://www.tkk7.com/msmary/articles/213695.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/msmary/comments/commentRss/213695.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/msmary/services/trackbacks/213695.html</trackback:ping><description><![CDATA[<p>  </p> <p><span style="font-size: 10.5pt">每个Oracle用户都有一个名字和口o,q拥有一些由其创建的表、视囑֒其他资源。Oracle角色QroleQ就是一l权限(privilegeQ?或者是每个用户Ҏ其状态和条g所需的访问类?。用户可以给角色授予或赋予指定的权限Q然后将角色赋给相应的用戗一个用户也可以直接l其他用h权?/span></p> <p><span style="font-size: 10.5pt">    </span><span style="font-size: 10.5pt">数据库系l权限(Database System PrivilegeQ允许用h行特定的命o集。例如,CREATE TABLE权限允许用户创徏表,GRANT ANY PRIVILEGE权限允许用户授予Mpȝ权限?/span></p> <p><span style="font-size: 10.5pt">    </span><span style="font-size: 10.5pt">数据库对象权限(Database Object PrivilegeQ得用戯够对各个对象q行某些操作。例如DELETE权限允许用户删除表或视图的行QSELECT权限允许用户通过select从表、视图、序列(sequencesQ或快照 QsnapshotsQ中查询信息?/span></p> <p><strong><span style="font-size: 10.5pt">一、创建用?/span></strong></p> <p><strong><span style="font-size: 10.5pt">   </span></strong><span style="font-size: 10.5pt">Oracle</span><span style="font-size: 10.5pt">内部有两个徏好的用户QSYSTEM和SYS。用户可直接d到SYSTEM用户以创建其他用P因ؓSYSTEMh创徏别的用户的权限。在安装OracleӞ用户或系l管理员首先可以己徏立一个用戗例如:</span></p> <p><span style="font-size: 10.5pt">    <strong>create user user01 identified by u01;</strong></span></p> <p><span style="font-size: 10.5pt">    </span><span style="font-size: 10.5pt">该命令还可以用来讄其他权限Q详l情况参见自学资料。要改变一个口令,可以使用alter user命oQ?/span></p> <p><span style="font-size: 10.5pt">    <strong>alter user user01 identified by usr01;</strong></span></p> <p><span style="font-size: 10.5pt">    </span><span style="font-size: 10.5pt">现在user01的口令已?#8220;u01”改ؓ“usr01”?/span></p> <p><span style="font-size: 10.5pt">    </span><span style="font-size: 10.5pt">除了alter user命o以外Q用戯可以使用password命o。如果用password命oQ用戯入的新口令将不在屏幕上显C。有dbaҎ的用户可以通过password命o改变M其他用户的口令;其他用户只能改变自己的口令?/span></p> <p><span style="font-size: 10.5pt">    </span><span style="font-size: 10.5pt">当用戯入password命oӞpȝ提C用戯入旧口o和新口oQ如下所C:</span></p> <p><span style="font-size: 10.5pt">    <strong>password</strong></span></p> <p><span style="font-size: 10.5pt">    Changing password for user01</span></p> <p><span style="font-size: 10.5pt">    Old password:</span></p> <p><span style="font-size: 10.5pt">    New password:</span></p> <p><span style="font-size: 10.5pt">    Retype new password:</span></p> <p><span style="font-size: 10.5pt">    </span><span style="font-size: 10.5pt">当成功地修改了口令时Q用户会得到如下的反馈:</span></p> <p><span style="font-size: 10.5pt">    Password changed</span></p> <p><strong><span style="font-size: 10.5pt">二、删除用?/span></strong></p> <p><span style="font-size: 10.5pt">    </span><span style="font-size: 10.5pt">删除用户Q可以用drop user命oQ如下所C:</span></p> <p><span style="font-size: 10.5pt">    <strong>drop user user01;</strong></span></p> <p><strong><span style="font-size: 10.5pt">   </span></strong><span style="font-size: 10.5pt">如果用户拥有对象Q则不能直接删除Q否则将q回一个错误倹{指定关键字CASCADEQ可删除用户所有的对象Q然后再删除用户。下面的例子用来删除用户与其对象Q?/span></p> <p><span style="font-size: 10.5pt">    <strong>drop user user01 CASCADE;</strong></span></p> <p><strong><span style="font-size: 10.5pt">三?U标准角?/span></strong></p> <p><span style="font-size: 10.5pt">    Qracle</span><span style="font-size: 10.5pt">Z兼容以前的版本,提供了三U标准的角色QroleQ:CONNECT、RESOURCE和DBA?/span></p> <p><span style="font-size: 10.5pt">    <strong>1. CONNECT Role(</strong></span><strong><span style="font-size: 10.5pt">q接角色)</span></strong></p> <p><span style="font-size: 10.5pt">    </span><span style="font-size: 10.5pt">临时用户Q特别是那些不需要徏表的用户Q通常只赋予他们CONNECTrole。CONNECT是用Oracle的简单权限,q种权限只有在对其他用户的表有访问权Ӟ包括select、insert、update和delete{,才会变得有意义。拥有CONNECT role的用戯能够创徏表、视图、序列(sequenceQ、簇QclusterQ、同义词Qsynonym Q、会话(sessionQ和与其他数据库的链QlinkQ?/span></p> <p><span style="font-size: 10.5pt">    <strong>2. RESOURCE Role(</strong></span><strong><span style="font-size: 10.5pt">资源角色)</span></strong></p> <p><span style="font-size: 10.5pt">    </span><span style="font-size: 10.5pt">更可靠和正式的数据库用户可以授予RESOURCE role。RESOURCE提供l用户另外的权限以创Z们自q表、序列、过E(procedureQ、触发器QtriggerQ、烦引(indexQ和(clusterQ?/span></p> <p><span style="font-size: 10.5pt">    <strong>3. DBA Role(</strong></span><strong><span style="font-size: 10.5pt">数据库管理员角色)</span></strong></p> <p><span style="font-size: 10.5pt">    DBA role</span><span style="font-size: 10.5pt">拥有所有的pȝ权限----包括无限制的I间限额和给其他用户授予各种权限的能力。SYSTEM由DBA用户拥有。下面介l一些DBAl常使用的典型权限?/span></p> <p><span style="font-size: 10.5pt">   </span><span style="font-size: 10.5pt">Q?QgrantQ授权)命o</span></p> <p><span style="font-size: 10.5pt">    </span><span style="font-size: 10.5pt">下面对刚才创建的用户user01授权Q命令如下:</span></p> <p><span style="font-size: 10.5pt">    <strong>grant connect, resource to user01;</strong></span></p> <p><span style="font-size: 10.5pt">   </span><span style="font-size: 10.5pt">Q?QrevokeQ撤消)权限</span></p> <p><span style="font-size: 10.5pt">    </span><span style="font-size: 10.5pt">已授予的权限可以撤消。例如撤消(1Q中的授权,命o如下Q?/span></p> <p><strong><span style="font-size: 10.5pt">    revoke connect, resource from user01;</span></strong></p> <p><strong><span style="font-size: 10.5pt">    </span></strong><span style="font-size: 10.5pt">一个具有DBA角色的用户可以撤消Q何别的用L臛_的DBA的CONNECT、RESOURCE 和DBA的其他权限。当Ӟq样是很危险的,因此Q除非真正需要,DBA权限不应随便授予那些不是很重要的一般用戗?/span></p> <p><span style="font-size: 10.5pt">    </span><span style="font-size: 10.5pt">撤消一个用L所有权限,q不意味着从Oracle中删除了q个用户Q也不会破坏用户创徏的Q何表Q只是简单禁止其对这些表的访问。其他要讉Kq些表的用户可以象以前那样地讉Kq些表?/span></p> <p><strong><span style="font-size: 10.5pt">四、创?/span></strong></p> <p><span style="font-size: 10.5pt">    </span><span style="font-size: 10.5pt">除了前面讲到的三U系l角?---CONNECT、RESOURCE和DBAQ用戯可以在Oracle创徏自己的role。用户创建的role可以p或系l权限或两者的l合构成。ؓ了创建roleQ用户必d有CREATE ROLEpȝ权限。下面给Z个create role命o的实例:</span></p> <p><span style="font-size: 10.5pt">    <strong>create role STUDENT;</strong></span></p> <p><span style="font-size: 10.5pt">    </span><span style="font-size: 10.5pt">q条命o创徏了一个名为STUDENT的role?/span></p> <p><span style="font-size: 10.5pt">    </span><span style="font-size: 10.5pt">一旦创Z一个roleQ用户就可以l他授权。给role授权的grant命o的语法与对对用户的语法相同。在lrole授权Ӟ在grant命o的to子句中要使用role的名Uͼ如下所C:</span></p> <p><span style="font-size: 10.5pt">    <strong>grant select on CLASS to STUDENT;</strong></span></p> <p><strong><span style="font-size: 10.5pt">   </span></strong><span style="font-size: 10.5pt">现在Q拥?strong>STUDENT</strong>角色的所有用户都h?strong>CLASS</strong>表的select权限?br />    撤销权限:<br />    <strong>revoke select on CLASS from STUDENT;</strong><br /> </span></p> <p><strong><span style="font-size: 10.5pt">五、删除角?/span></strong></p> <p><span style="font-size: 10.5pt">   </span><span style="font-size: 10.5pt">要删除角Ԍ可以使用drop role命oQ如下所C:</span></p> <p><span style="font-size: 10.5pt">   <strong>drop role STUDENT;</strong></span></p> <p><strong><span style="font-size: 10.5pt">   </span></strong><span style="font-size: 10.5pt">指定的roleq同与之相关的权限将从数据库中全部删除?/span></p> <img src ="http://www.tkk7.com/msmary/aggbug/213695.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/msmary/" target="_blank">谭明</a> 2008-07-09 16:23 <a href="http://www.tkk7.com/msmary/articles/213695.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle中常用的to_Char用法详解Q有FMT的详l列表)http://www.tkk7.com/msmary/articles/211148.html谭明谭明Fri, 27 Jun 2008 07:27:00 GMThttp://www.tkk7.com/msmary/articles/211148.htmlhttp://www.tkk7.com/msmary/comments/211148.htmlhttp://www.tkk7.com/msmary/articles/211148.html#Feedback0http://www.tkk7.com/msmary/comments/commentRss/211148.htmlhttp://www.tkk7.com/msmary/services/trackbacks/211148.html

以下内容转自|络Q感觉这个比较有用。收藏一下?br />
The following are number examples for the to_char function.

to_char(1210.73, '9999.9') would return '1210.7'
to_char(1210.73, '9,999.99') would return '1,210.73'
to_char(1210.73, '$9,999.00') would return '$1,210.73'
to_char(21, '000099') would return '000021'

 

The following is a list of valid parameters when the to_char function is used to convert a date to a string. These parameters can be used in many combinations.

Parameter Explanation
YEAR Year, spelled out
YYYY 4-digit year
YYY
YY
Y
Last 3, 2, or 1 digit(s) of year.
IYY
IY
I
Last 3, 2, or 1 digit(s) of ISO year.
IYYY 4-digit year based on the ISO standard
Q Quarter of year (1, 2, 3, 4; JAN-MAR = 1).
MM Month (01-12; JAN = 01).
MON Abbreviated name of month.
MONTH Name of month, padded with blanks to length of 9 characters.
RM Roman numeral month (I-XII; JAN = I).
WW Week of year (1-53) where week 1 starts on the first day of the year and continues to the seventh day of the year.
W Week of month (1-5) where week 1 starts on the first day of the month and ends on the seventh.
IW Week of year (1-52 or 1-53) based on the ISO standard.
D Day of week (1-7).
DAY Name of day.
DD Day of month (1-31).
DDD Day of year (1-366).
DY Abbreviated name of day.
J Julian day; the number of days since January 1, 4712 BC.
HH Hour of day (1-12).
HH12 Hour of day (1-12).
HH24 Hour of day (0-23).
MI Minute (0-59).
SS Second (0-59).
SSSSS Seconds past midnight (0-86399).
FF Fractional seconds.


The following are date examples for the to_char function.

to_char(sysdate, 'yyyy/mm/dd'); would return '2003/07/09'
to_char(sysdate, 'Month DD, YYYY'); would return 'July 09, 2003'
to_char(sysdate, 'FMMonth DD, YYYY'); would return 'July 9, 2003'
to_char(sysdate, 'MON DDth, YYYY'); would return 'JUL 09TH, 2003'
to_char(sysdate, 'FMMON DDth, YYYY'); would return 'JUL 9TH, 2003'
to_char(sysdate, 'FMMon ddth, YYYY'); would return 'Jul 9th, 2003'


You will notice that in some examples, the format_mask parameter begins with "FM". This means that zeros and blanks are suppressed. This can be seen in the examples below.

to_char(sysdate, 'FMMonth DD, YYYY'); would return 'July 9, 2003'
to_char(sysdate, 'FMMON DDth, YYYY'); would return 'JUL 9TH, 2003'
to_char(sysdate, 'FMMon ddth, YYYY'); would return 'Jul 9th, 2003'

The zeros have been suppressed so that the day component shows as "9" as opposed to "09".


Oracle函数to_char转化数字型指定小数点位数的用?/strong>

to_charQ函数功能,是数值型或者日期型转化为字W型?/p>

比如最单的应用Q?/p>

/*1.0123--->'1.0123'*/
Select TO_CHAR(1.0123) FROM DUAL
/*123--->'123'*/
Select TO_CHAR(123) FROM DUAL

 接下来再看看下面Q?/p>

/*0.123 ---> '.123' */
SELEC TO_CHAR(0.123) FROM DUAL

 上面的结?'.123' 在大多数情况下都不是我们惌的结果,我们惌的应该是 '0.123'?/p>

我们来看一下to_char函数的具体用法:

TO_CHAR ( n [, fmt [, 'nlsparam']] )
该函数将NUMBERcd的n按数值格式fmt转换成VARCHAR2cd的倹{?span style="color: #ff00ff">'nlsparams'指定由数值格式的元素q回的字W?包括:

Q小数点字符

Q组分隔W?

Q本地钱币符?

Q国际钱币符?

变元的Ş式ؓQ?

'NLS_NUMERIC_CHARACTERS="dg" NLS_CURRENCY="tcxt" NLS_ISO_CURRENCY=territory'

其中d为小数点字符,g为组分隔W?

?nbsp;:TO_CHAR (17145,'L099G999','NLS_NUMERIC_CHARACTERS=".," NLS_CURRENCY="NUD"')=NUD017,145

通过上面的了解,再查看fmt的一些格式,我们可以用以下表辑ּ得到'0.123'的|

/*0.123 ---> ' 0.123' */ 
Select TO_CHAR(0.123,'0.999'FROM DUAL
/*100.12 ---> '######' */ 
Select TO_CHAR(100.12,'0.999'FROM DUAL
/*1.12 ---> ' 1.120' */ 
Select TO_CHAR(1.12,'0.999'FROM DUAL

 ' 0.123'是出来了Q可是前面又多了一个空根{?/p>

对于 100.12 的值却?#####Q以?1.12'的值变成了 '1.120'?/p>

我们重新定一个新的需求:

1、去I格

2、小数点最?位,最保?位?/p>

    1--->'1.00'Q?.1--->'1.00'Q?.12-->'1.12'Q?.1234--->'1.1234'Q?/p>

    1.12345--->'1.1235'

最l实现如下:

/*
  FM Q除I格  
  9999999.0099Q允许小数点左边最大正Cؓ7位,数点右Ҏ?位,最?位,且在W?位进行四舍五?
*/
 
Select TO_CHAR(123.0233,'FM9999999.0099'FROM DUAL


PLSQL经验一?Oracle的to_char()函数功能很强大但是在用它格式化数值型数据时应该请注意以下几项。如果是数如:0.23q样的数据经qto_char后再昄会变?23Q如果你Z让它昄出原来的0.23的话得用To_char(要格式化的数?’0.999’)保留三个数Qƈ昄但这里就要注意了。他Z截取数的时候是四舍五入了。所以如果是要求截掉数而不四舍五入的话应该自己写个函数截下去后再规格化。以保证它不四舍五入?

二?To_char(1.9999,’FM90.0999’)q个函数规格化时90.0999的含义是?的地方如果有数字显C如果没有数字就不显C,?的地方在没有数字的时候也会有Q来占位.但这样做也有一个很大的~点,是如果是整数时它也仍然会显C?#8221;.”,不要瞧q个?一般来讲页面上要显C的话这个点是多余?也给我们造成了不的ȝ.q要自己再写函数来把q个点搞定.

三?对于日期型的Oracle倒时提供了一个好的处理方?可以把日期做成数值型?然后再To_charp昄Z所需要的cd?

四?在用select into时一定要注意,q种Ҏ你一定要认肯定会有数据被查出时才能使用.如果查询l果为空时会D报错.q有一U情冉|查出来的数据是多条也会报?所以应该尽量便宜游标来?会减错误生的机率.

五?q有注意一点rownum不支持排?是说你想用q个来控制行数的话就会发C没有按你指定的排序方式显C?,q是一个很隑֊的事.而且如果你用rownum=2q样的语句来输出W二行的话也是行不通的. 六?最恶心的一ҎOracle对null的判断变态到极点.如果你说某个变量 aa=null它是判断不出来的.管aa的确是空.即在选择条g里也是判断不出来?不知道ؓ什?只好用nvl()q个函数来判断了.在条件之外可以用 aa is null 来判?

?补充一?是在写存储q程时要注意参数名不能与数据库字D名相同.否则Oracle会把q个参数名看成是字段名的,即你用表的别名区分也不?所以v参数名的时候一定要注意q点.?
-------------
SELECT TO_CHAR(SYSDATE,'YYMMDD') FROM DUAL 
l果:      080924



谭明 2008-06-27 15:27 发表评论
]]>
学习Oraclel验??http://www.tkk7.com/msmary/articles/206764.html谭明谭明Mon, 09 Jun 2008 03:42:00 GMThttp://www.tkk7.com/msmary/articles/206764.htmlhttp://www.tkk7.com/msmary/comments/206764.htmlhttp://www.tkk7.com/msmary/articles/206764.html#Feedback0http://www.tkk7.com/msmary/comments/commentRss/206764.htmlhttp://www.tkk7.com/msmary/services/trackbacks/206764.html 

 

 如何学习Oracle 
 
 l常有一些Oracle的初学者问到这个问题,q里是一个统一{复?

  1、如果有一定的数据库基Q知道SQL是怎么回事Q即使写不出来简单的SQLQ但可以看动它们Q你可以蟩?。否则请先看一下数据库基础和SQL语言Q不需要很深,更不需要去记忆那些复杂的SQL命oQ这些可以留在以后边应用边学习、记忆?/span>

  2、要惛_好ORACLEQ首先要学习ORACLE的体pȝ构,现在你不需要深入理解它们,但要分清几个关键的概念:

  instance & database, memory structure , process & those files ,such as data file, control file, init parameter file etc 以及database , tablespace , data file和tablespace, segmnet, extent & block它们之间的关pR?/span>

  当然q要分清undo tablespace & redo log file{,

  对于很多初学者来_能够对这些概忉|个较为清晰的认识q不是一件容易的事,而这些ƈ非Oracle的全部?/span>

  3?是有关ORACLE的一些基本概念,下面要学习的是一些简单的的实际操作,是如何ȝ理ORACLE数据库,当然不是理全部的ORACLE。在此过E中你将对SQL和ORACLE体系l构有个更深入的了解?/span>

  4、到了这一步你基本上算是初步掌握了ORACLEQ下面将要根据你的方向来具体学习其它的ORACLE知识了。如果你是开发h员,则需要更多地d习PL/SQL以及DEVELOPERQ而这是一门新的课E。如果你是一名DBAQ请l箋?/span>

  5、现在你可以Ҏ自己的实际情况,q行有选择的学习,也就是说下面的内Ҏ有特别顺序要求。可以选择深入学习ORACLE的管理、备份与恢复、性能调整、网l等。当然在学习q些知识的过E中Q如果有实际的工作更好,q样你可以在实际中成长,学会TROUBLE SHOOTING?/span>

  6、当然在学习的过E中Q你可以在网站或论坛中与他hq行交流Q可以看别h的一些经验文章,也可以自己写一些心得体会?/span>

我说一下我学习oracle的经?/span>
  
  必须对insert/update/delete/select很熟?br />   q是基本?br />   
  
OS
  在NT上安装OEM可以帮助你理解Oracle 的objects 的概?br />   熟悉对应的SQL语句
  Linux上的oracle也必要?br />   所以你要熟悉linux的命?br />   q是你提高的必经之\
  
  
架构
  理解Oracle的结?br />   什么是instance/db/tablespace/datafile/segment/rollback segment
  initSID.ora file/password file
  书很?买本,M3?br />   
  
数据字典
  q一兛_难过?br />   那么多数据字?记忆h好麻?br />   不过q是要记...
  不过如果你是DBA那就好多?br />   每天接触q些字典
  你肯定有你熟悉的数据字典
  用v来也很顺?br />   
  
Tuning
  DBA的最高境?也是个永恒的话题
  
  
g
  大型的数据库肯定不在PCZ
  一般的大机器都有硬件厂商的支持
  你要了解一些硬件知?br />   如光U通道/RAID/HA/
  q有存储
  你要知道
  volumn manage/AIX lvm{等
  
  
软g
  一U以上的Unixpȝ
  solaris/AIX/HPUnix/Sco unix/Tru64 etc
  
  
OCP
  OCP的资料一定是要看?br />   考不考由?br />   
  
OCM
  哈哈q个?..据说和CCIE差不?br />   国内q没有考试,要去HK
  
  
Oracle公司
  如果你能去oracle公司,?...........h吃饭?br />   哈哈

如何学习Oracle-eygle的方法经验谈

很多朋友l常问v学习Oracle的方法,在这里我把写在《Oracle数据库性能优化》一书前面的话脓在这里,供大家参考!
-------------------------------------------------------------------------------

l常有朋友会问,应该如何学习OracleQ怎样才能快速提高?我把自己的一点心得写在这里,供大家参考?/span>

其实学习M东西都是一P没有太多的捷径可赎ͼ必须打好了坚实的基础Q才有可以在q一步学习中得到快速提高?br /> 王国l在他的《h间词话》中曄概括了ؓ学的三种境界Q我在这里套用一下:


古今之成大事业、大学问者,|不l过三种之境界?br /> “昨夜襉K凋碧树。独上高|望尽天路?#8221;此第一境界也?br /> “衣带渐宽l不悔,Z消得人憔悴?#8221;此第二境界也?br /> “众里M千百度,蓦然回首Q那人却在灯火阑珊处?#8221;此第三境界也?/span>

学习OracleQ这也是你必ȝ历的三种境界?br /> W一层境界是_学习的\是O漫的Q你必须做好充分的思想准备Q如果半途而废q不如不要开始?br /> q里Q注意一??字,在开始学习的q程中,你必d分阅读Oracle的基文档Q概忉|册、管理手册、备份恢复手册等Q这些你都可以在http://tahiti.oracle.com 上找刎ͼQOCP认证的教材也值得仔细阅读。打好基之后你才具备了进一步提升的能力Q万丈高楼都是由地而v?/span>

W二层境界是_管l历挫折、打凅R灰心、沮丧,也都要坚持不攑ּQ具备了基础知识之后Q你可以对自己感兴趣或者工作中遇到的问题进行深入的思考,由浅入深从来都不是轻而易丄Q甚臛_多时候你会感到自己停滞不前了Q但是不要动摇,学习及理解上的突破也需要时间?/span>

W三ơ境界是_l历了那么多努力以后Q你会发玎ͼ那苦苦思考的问题Q那百思不得其解的法原理Q原来答案就在手边,你的思\豁然开朗,宛如拨云见月。这个时候,学习对你来说Q不再是个难题,也许是种享受Q也许成术?/span>

所以如果你想问我如何速成Q那我是没有{案的?br /> 不经一番寒彻骨Q哪得梅花扑鼻香?/span>

当然q三U境界在实际中也许是交叉的,在不断的学习中,不断有蓦然回首的收获?br /> 我自己在学习的过E中Q经常是采用"q及面??br /> 当遇C个问题后Q一定是深入下去Q穷I根本,q样你会发现Q一个简单的问题也必定会带v一大片的知识点Q如果你能对很多问题q行深入思考和研究Q那么在深处Q你会发玎ͼq些面逐渐接合Q慢慢的延到oracle的所有层面,逐渐的你p融会贯通。这时候,你会d的去试全面学习OracleQ扫除你的知识盲点,学习已经成ؓ一U需要?br /> 由实践触发的学习才最有针Ҏ,才更能让你深入的理解书本上的知识Q正所谓:“U怸得来l觉,l知此事要躬?#8221;。实늚l验于我们是至ؓ宝贵的?/span>

如果说有Q那么这Q就是我的捷径?/span>

x自己Q经常是"每有所P便欣然忘?Q兴才是我们最好的老师?/span>

Oracle的优化是一门学问,也是一门艺术,理解透彻了,你会知道Q优化不q是在各U条件之下做出的均衡与折中?br /> 内存、外存;CPU、IO...对这一切你都需要有充分的认识和相当的了解,理数据库所需要的知识q不单纯?/span>

作ؓ一个数据库理人员Q你需要做的就是能够根据自q知识以及l验在各U复杂情况下做出快速正的判断。当问题出现Ӟ你需要知道用怎样的手D发现问题的ҎQ找到问题之后,你需要运用你的知识找到解决问题的Ҏ?br /> q当然ƈ不容易,N若轻q是举轻若重Q取决于你具备怎样的基以及l验U篏?/span>

在网l上QHoward J. Rogers最q创造了一个新词组:Voodoo TuningQ用以Ş定w些没有及时更新自q知识技能的所谓的Oracle技术专家。由于知识的陈旧或者理解的肤浅Q他们提供的很多调整是错误的、容易解的Q甚x荒诞的。他们提供的某些在有些情况下也许是正的Q如果你愿意回到Oracle5版或?版的q代Q但是这些徏议在Oracle7.0,8.0 或?Oracle8i以后往往是完全错误的?br /> 后来ZcM问题触发了互联网内Oracle高手的一pd深入讨论QTOM、Jonathan Lewis、HJR{h都参与其中,在我的网站上( www.eygle.com )上对q些内容及相关链接作了简要介l,有兴的可以参考?/span>

HJRl我们提了很好的一个提C?对你所需要调整的内容Q你必须h充分的认识,否则你做出的判断有可能是错误的?br /> q也是我想给自己和大家的一个徏?学习和研IOracleQ严谨和认真必不可少?br /> 当然你还需要勤奋,我所熟悉的在Oracle领域有所成就的技术h员,他们共同的特点就是勤奋?br /> 如果你觉得掌握的东西没有别h多,那么也许是因ؓQ你不如别h勤奋?/span>

要是你觉得这一切过于复杂了Q那我还有一句简单的话送给大家:不积跬步Q无以至千里。学习正是在逐渐U篏q程中的提高?/span>

现在Itpubl我们提供了很好的交场所Q很多问题都可以在这里找到答案,互相讨论Q互相学习。这是我们的q运Q我也因此非常感谢这个网l时代?/span>

Itpub的第二本书即出版,谨以此祝愿Itpub来好Q也愿我们的书能l大家带来知识和帮助?/span>

- Eygle 2005-03-09 于北?/span>



谭明 2008-06-09 11:42 发表评论
]]>
关系数据库的语言分类 DDL DML DCLhttp://www.tkk7.com/msmary/articles/206412.html谭明谭明Fri, 06 Jun 2008 13:45:00 GMThttp://www.tkk7.com/msmary/articles/206412.htmlhttp://www.tkk7.com/msmary/comments/206412.htmlhttp://www.tkk7.com/msmary/articles/206412.html#Feedback0http://www.tkk7.com/msmary/comments/commentRss/206412.htmlhttp://www.tkk7.com/msmary/services/trackbacks/206412.html数据定义语言(data define language) DDL

q类语句是用来徏立数据库基本lg的,例如建立表,建立视图{等。包?/span>create语句?/span>drop语句?/span>alter语句、truncate、comment、grant、revoke

2.数据操作语句a(data manipulate language)DML

q类语句的作用是Ҏ需要写入、删除、更新数据库中的数据。主要包?/span>select、insert、update、delete、call、explain、lock table

3.数据控制语言(data control language)DCL

q类语句主要用来实现用户的权限授予或者取消,保证数据的安全性。主要包?/span>COMMIT、SAVEPOINT、ROLLBACK、SET TRANSACTION



谭明 2008-06-06 21:45 发表评论
]]>
Oralce 视图 viewhttp://www.tkk7.com/msmary/articles/206408.html谭明谭明Fri, 06 Jun 2008 13:17:00 GMThttp://www.tkk7.com/msmary/articles/206408.htmlhttp://www.tkk7.com/msmary/comments/206408.htmlhttp://www.tkk7.com/msmary/articles/206408.html#Feedback0http://www.tkk7.com/msmary/comments/commentRss/206408.htmlhttp://www.tkk7.com/msmary/services/trackbacks/206408.htmlOracle视图

Oracle的数据库对象分ؓ五种Q表Q视图,序列Q烦引和同义词?/span>

    视图是基于一个表或多个表或视囄逻辑表,本n不包含数据,通过它可以对表里面的数据q行查询和修攏V视囑֟于的表称为基表?/span>

    视图是存储在数据字典里的一?/span>select语句?/span>通过创徏视图可以提取数据的逻辑上的集合或组合?/span>

视图的优点:

      1.Ҏ据库的访问,因ؓ视图可以有选择性的选取数据库里的一部分?/span>

      2.用户通过单的查询可以从复杂查询中得到l果?/span>

      3.l护数据的独立性,试图可从多个表检索数据?/span>

      4.对于相同的数据可产生不同的视图?/span>

视图分ؓ单视囑֒复杂视图Q?/span>

      单视囑֏从单表里获取数据
     
复杂视图从多?/span>
 
     
单视图不包含函数和数据组
     
复杂视图包含

     单视囑֏以实?/span>DML操作
    
复杂视图不可?/span>.

视图的创建:

    CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view_name

  [(alias[, alias]...)]

  AS subquery

  [WITH CHECK OPTION [CONSTRAINT constraint]]

  [WITH READ ONLY]

其中Q?/span>

OR REPLACE    Q若所创徏的试囑ַl存在,ORACLE自动重徏该视图;

FORCE              Q不基表是否存?/span>ORACLE都会自动创徏该视图;

NOFORCE         Q只有基表都存在ORACLE才会创徏该视图:

alias                   Qؓ视图产生的列定义的别名;

subquery           Q一条完整的SELECT语句Q可以在该语句中定义别名Q?/span>

WITH CHECK  OPTION Q?/span>

                            插入或修改的数据行必L囑֮义的U束Q?/span>

WITH READ ONLY Q?/span>

                           该视图上不能q行MDML操作?/span>

例如Q?/span>

       CREATE  OR  REPLACE  VIEW  dept_sum_vw

               (name,minsal,maxsal,avgsal)

       AS  SELECT d.dname,min(e.sal),max(e.sal),avg(e.sal)

       FROM    emp e,dept d

       WHERE  e.deptno=d.deptno

       GROUP  BY  d.dname;

视图的定义原则:

       1.视图的查询可以用复杂的SELECT语法Q包括连?/span>/分组查询和子查询Q?/span>

       2.在没?/span>WITH CHECK OPTION?/span> READ ONLY 的情况下Q查询中不能使用

          ORDER BY 子句Q?/span>

       3.如果没有?/span>CHECK OPTIONU束命名Q系l会自动Z命名QŞ式ؓSYS_Cn;

       4.OR REPLACE选项可以不删除原视图便可更改其定义ƈ重徏Q或重新授予对象

          权限?/span>

视图的查询:

          视图创徏成功后,可以从视图中索数据,q点和从表中索数据一栗?/span>

          q可以查询视囄全部信息和指定的数据行和列?/span>

   如:

         索数据:

          SQL>SELECT * FROM  dept_sum_vwQ?/span>

         查询视图定义Q?/span>

         SELECT view_name,text  from user_views;

            其中text昄的内容ؓ视图定义?/span>SELECT语句Q可通过DESC USER_VIEWS

            得到相关信息?/span>

修改视图Q?/span>

        通过OR REPLACE 重新创徏同名视图卛_?/span>

视图上的DML 操作Q?/span>

        DML操作应遵循的原则Q?/span>

        1.单视囑֏以执?/span>DML操作Q?/span>

        2.在视囑֌?/span>GROUP 函数Q?/span>GROUP BY子句Q?/span>DISTINCT关键字时不能

           删除数据行;

        3.在视图不出现下列情况时可通过视图修改数据或插入数据:

            a.视图中包?/span>GROUP 函数Q?/span>GROUP BY子句Q?/span>DISTINCT关键字;

            b.使用表达式定义的列;

            c.ROWNUM伪列?/span>

            d.中未在视图中选择的其他列定义为非IZ无默认倹{?/span>

视图可用于保持数据库的完整性,但作用有限?/span>

通过视图执行引用完整性约束可在数据库U执行约束?/span>

WITH CHECK OPTION 子句限定Q?/span>

         通过视图执行?/span>INSERTS?/span>UPDATES操作不能创徏该视图检索不到的数据行,

         因ؓ它会Ҏ入或修改的数据行执行完整性约束和数据有效性检查?/span>

 例如Q?/span>

           CREATE OR REPLACE VIEW  vw_emp20

           AS  SELECT *  FROM  emp

           WHERE  deptno=20

           WITH CHECK OPTION constraint  vw_emp20_ck;

          视图已徏立?/span>

            查询l果Q?/span>

           SELECT empno,ename,job FROM vw_emp20;

          

          EMPNO                ENAME                JOB

---------------------           --------------          -------------

              7369                 SMITH                CLERK

              7566                 JONES               MANAGER

              7902                 FORD                ANALYST

          修改Q?/span>

                UPDATE vw_emp20

                SET        deptno=20

                WHERE   empno=7902;

           生错误:

               UPDATE vw_emp20

                              *

               ERROR 位于W一行:

               ORA-01402Q视?/span>WITH CHECK OPTION q反WHERE 子句

视图的删除:

            DROP VIEW  VIEW_NAME语句删除视图?/span>

            删除视图的定义不影响中的数据?/span>

            只有视图所有者和具备DROP VIEW权限的用户可以删除视图?/span>

            视图被删除后Q基于被删除视图的其他视图或应用无效?/span>



谭明 2008-06-06 21:17 发表评论
]]>
oracle cursor 游标http://www.tkk7.com/msmary/articles/205991.html谭明谭明Thu, 05 Jun 2008 02:51:00 GMThttp://www.tkk7.com/msmary/articles/205991.htmlhttp://www.tkk7.com/msmary/comments/205991.htmlhttp://www.tkk7.com/msmary/articles/205991.html#Feedback0http://www.tkk7.com/msmary/comments/commentRss/205991.htmlhttp://www.tkk7.com/msmary/services/trackbacks/205991.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


(1).
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;
(2).

declare

 CURSOR DEPT_CR IS SELECT DEPT_ID,DEPT_NAME FROM DEPT;

 W_ID NUMBER;

 W_NAME VARCHAR2(240);

begin

 OPEN DEPT_CR;

 LOOP

    FETCH DEPT_CR INTO W_ID,W_NAME;

    EXIT WHEN DEPT_CR%NOTFOUND;

    DBMS_OUTPUT.put_line(W_ID||' '||W_NAME);

 END LOOP;

 CLOSE DEPT_CR;

end;

(3).

declare

 CURSOR DEPT_CR IS SELECT DEPT_ID,DEPT_NAME FROM DEPT;

 DEPT_REC DEPT_CR%ROWTYPE;

begin

 OPEN DEPT_CR;

 LOOP

    FETCH DEPT_CR INTO DEPT_REC;

    EXIT WHEN DEPT_CR%NOTFOUND;

    DBMS_OUTPUT.put_line(DEPT_REC.DEPT_ID);

 END LOOP;

 CLOSE DEPT_CR;

end;

隐式游标Q?/span>

不用明确建立游标变量Q分两种Q?br /> 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>

游标属性:

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

隐式游标:
declare

 CURSOR DEPT_CR IS SELECT DEPT_ID,DEPT_NAME FROM DEPT;

begin

 FOR DEPT_REC IN DEPT_CR

 LOOP

    DBMS_OUTPUT.put_line(DEPT_REC.DEPT_ID||'   '||DEPT_REC.DEPT_NAME);

 END LOOP;

end; 

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

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

REF CURSOR游标Q?/span>

动态游标,在运行的时候才能确定游标用的查询。分c:
强类型(限制QREF CURSORQ规定返回类?
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;
举例:

declare

 TYPE TY_DEPTREFCUR IS REF CURSOR;

 CR_DEPT     TY_DEPTREFCUR;

 REC_DEPT    DEPT%ROWTYPE;

begin

 OPEN CR_DEPT FOR

    SELECT * FROM DEPT;

 LOOP

 FETCH CR_DEPT INTO REC_DEPT;

 EXIT WHEN CR_DEPT%NOTFOUND;

 DBMS_OUTPUT.put_line(REC_DEPT.DEPT_ID||' '||REC_DEPT.DEPT_NAME);

 END LOOP;

 CLOSE CR_DEPT;

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;



谭明 2008-06-05 10:51 发表评论
]]>
ORACLE 8iQ?i 表连接方?/title><link>http://www.tkk7.com/msmary/articles/205739.html</link><dc:creator>谭明</dc:creator><author>谭明</author><pubDate>Wed, 04 Jun 2008 03:05:00 GMT</pubDate><guid>http://www.tkk7.com/msmary/articles/205739.html</guid><wfw:comment>http://www.tkk7.com/msmary/comments/205739.html</wfw:comment><comments>http://www.tkk7.com/msmary/articles/205739.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/msmary/comments/commentRss/205739.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/msmary/services/trackbacks/205739.html</trackback:ping><description><![CDATA[<p><font size="2">一般的相等q接Q?<br /> select * from a, b where a.id = b.id; <br /> q个属于内q接?<br /> <br /> 对于外连接: <br /> Oracle中可以?#8220;(+) ”来表C,9i可以使用LEFT/RIGHT/FULL OUTER JOIN <br /> <br /> LEFT OUTER JOINQ左外关?<br /> SELECT e.last_name, e.department_id, d.department_name <br /> FROM employees e <br /> LEFT OUTER JOIN departments d <br /> ON (e.department_id = d.department_id); <br /> {h?<br /> SELECT e.last_name, e.department_id, d.department_name <br /> FROM employees e, departments d <br /> WHERE e.department_id=d.department_id(+) <br /> l果为:所有员工及对应部门的记录,包括没有对应部门~号department_id的员工记录?<br /> <br /> RIGHT OUTER JOINQ右外关?<br /> SELECT e.last_name, e.department_id, d.department_name <br /> FROM employees e <br /> RIGHT OUTER JOIN departments d <br /> ON (e.department_id = d.department_id); <br /> {h?<br /> SELECT e.last_name, e.department_id, d.department_name <br /> FROM employees e, departments d <br /> WHERE e.department_id(+)=d.department_id <br /> l果为:所有员工及对应部门的记录,包括没有M员工的部门记录?<br /> <br /> FULL OUTER JOINQ全外关?<br /> SELECT e.last_name, e.department_id, d.department_name <br /> FROM employees e <br /> FULL OUTER JOIN departments d <br /> ON (e.department_id = d.department_id); <br /> l果为:所有员工及对应部门的记录,包括没有对应部门~号department_id的员工记录和没有M员工的部门记录?/font></p> <p><font size="2">ORACLE8i是不直接支持完全外连接的语法Q也是说不能在左右两个表上同时加上(+)Q下面是在ORACLE8i可以参考的完全外连接语?br /> select t1.id,t2.id from table1 t1,table t2 where t1.id=t2.id(+) <br /> union <br /> select t1.id,t2.id from table1 t1,table t2 where t1.id(+)=t2.id</font></p> <table style="width: 536px; height: 636px" border="1"> <tbody> <tr> <td width="25%"><font face="宋体" color="#000000" size="2"><strong>q接cd</strong></font></td> <td width="25%"><font face="宋体" color="#000000" size="2"><strong>定义</strong></font></td> <td width="25%"><font face="宋体" color="#000000" size="2"><strong>囄</strong></font></td> <td width="25%"><font face="宋体" color="#000000" size="2"><strong>例子</strong></font></td> </tr> <tr> <td width="25%"><font face="宋体" color="#000000" size="2">内连?/font></td> <td width="25%"><font face="宋体" color="#000000" size="2">只连接匹配的?/font></td> <td width="25%"><font face="宋体" color="#000000" size="2"><img src="file:///E:/Information/数据?oracle内外q接.files/inner_join.jpg" alt="" /></font></td> <td width="25%"><font face="宋体" color="#000000" size="2">select A.c1,B.c2 from A join B on A.c3 = B.c3;</font></td> </tr> <tr> <td width="25%"><font face="宋体" color="#000000" size="2">左外q接</font></td> <td width="25%"><font face="宋体" color="#000000" size="2">包含左边表的全部行(不管双的表中是否存在与它们匚w的行Q以及右边表中全部匹配的?/font></td> <td width="25%"><font face="宋体" color="#000000" size="2"><img src="file:///E:/Information/数据?oracle内外q接.files/left_join.jpg" alt="" /></font></td> <td width="25%"><font face="宋体" color="#000000" size="2">select A.c1,B.c2 from A left join B on A.c3 = B.c3;</font></td> </tr> <tr> <td width="25%"><font face="宋体" color="#000000" size="2">叛_q接</font></td> <td width="25%"><font face="宋体" color="#000000" size="2">包含双表的全部行(不管左边的表中是否存在与它们匚w的行Q以及左边表中全部匹配的?/font></td> <td width="25%"><font face="宋体" color="#000000" size="2"><img src="file:///E:/Information/数据?oracle内外q接.files/right_join.jpg" alt="" /></font></td> <td width="25%"><font face="宋体" color="#000000" size="2">select A.c1,B.c2 from A right join B on A.c3 = B.c3;</font></td> </tr> <tr> <td width="25%"><font face="宋体" color="#000000" size="2">全外q接</font></td> <td width="25%"><font face="宋体" color="#000000" size="2">包含左、右两个表的全部行,不管在另一边的表中是否存在与它们匹配的?/font></td> <td width="25%"><font face="宋体" color="#000000" size="2"><img src="file:///E:/Information/数据?oracle内外q接.files/full_join.jpg" alt="" /></font></td> <td width="25%"><font face="宋体" color="#000000" size="2">select A.c1,B.c2 from A full join B on A.c3 = B.c3;</font></td> </tr> <tr> <td width="25%"><font face="宋体" color="#000000" size="2">QthetaQ连?/font></td> <td width="25%"><font face="宋体" color="#000000" size="2">使用{g外的条g来匹配左、右两个表中的行</font></td> <td width="25%"><font face="宋体" color="#000000" size="2"><img src="file:///E:/Information/数据?oracle内外q接.files/theta_join.jpg" alt="" /></font></td> <td width="25%"><font face="宋体" color="#000000" size="2">select A.c1,B.c2 from A join B on A.c3 != B.c3;</font></td> </tr> <tr> <td width="25%"><font face="宋体" color="#000000" size="2">交叉q接</font></td> <td width="25%"><font face="宋体" color="#000000" size="2">生成W卡积——它不用Q何匹配或者选取条gQ而是直接一个数据源中的每个行与另一个数据源的每个行一一匚w</font></td> <td width="25%"> </td> <td width="25%"><font face="宋体" color="#000000" size="2">select A.c1,B.c2 from A,B;</font></td> </tr> </tbody> </table> <img src ="http://www.tkk7.com/msmary/aggbug/205739.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/msmary/" target="_blank">谭明</a> 2008-06-04 11:05 <a href="http://www.tkk7.com/msmary/articles/205739.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oraclesql语句W记http://www.tkk7.com/msmary/articles/201602.html谭明谭明Tue, 20 May 2008 03:54:00 GMThttp://www.tkk7.com/msmary/articles/201602.htmlhttp://www.tkk7.com/msmary/comments/201602.htmlhttp://www.tkk7.com/msmary/articles/201602.html#Feedback0http://www.tkk7.com/msmary/comments/commentRss/201602.htmlhttp://www.tkk7.com/msmary/services/trackbacks/201602.html GRANT SELECT,UPDATE,DELETE,INSERT ON STGPIT TO APPUSER;
REVOKE ALL ON STGPIT FROM APPUSER;
1.增加主键
alter table TABLE_NAME add constraint KEY_NAME primary key (TABLE_COLUMN);
指定表空?br /> alter table TABLE_NAME add constraint KEY_NAME primary key (TABLE_COLUMN) using index tablespace TABLE_SPACE_NAME;
2.增加外键
alter table TABLE_NAME add constraint FK_NAME foreign key (TABLE_COLUMN) references KEY_TABLE_NAME;
eg:
ALTER TABLE PRD ADD CONSTRAINT PRD$FK$FIELD_SET01
FOREIGN KEY(KEY_FIELD_SET_ID) REFERENCES I_FIELD_SET;
3.使主键或外键失效、生?br /> alter table TABLE_NAME disable(enable) constraint KEY_NAME;
4、查看各U约?br /> select constraint_name,table_name,constraint_type,status from user_constraints;
select constraint_name, constraint_type,search_condition, r_constraint_name from user_constraints where table_name = upper('&table_name')

select c.constraint_name,c.constraint_type,cc.column_name
from user_constraints c,user_cons_columns cc
where c.owner = upper('&table_owner') and c.table_name = upper('&table_name')
and c.owner = cc.owner and c.constraint_name = cc.constraint_name
order by cc.position;

5、删除主键或外键
alter table TABLE_NAME drop constraint KEY_NAME;
6、徏外键
单字D|Qcreate table 表名 (col1 char(8),
cno char(4) REFERENCE course);
多个字段?在最后加?Foreign Key (字段? REFERENCE 表名(字段)
q带删除选项 (on delete cascade
当指定时Q如果父表中的记录被删除Q则依赖于父表的记录也被删除
REFERENCE 表名Q) on delete cascade;
7、删除带U束的表
Drop table 表名 cascade constraints;

8Q烦引管?br /> <1>.creating function-based indexes
sql> create index summit.item_quantity on summit.item(quantity-quantity_shipped);

<2>.create a B-tree index
sql> create [unique] index index_name on table_name(column,.. asc/desc) tablespace
sql> tablespace_name [pctfree integer] [initrans integer] [maxtrans integer]
sql> [logging | nologging] [nosort] storage(initial 200k next 200k pctincrease 0
sql> maxextents 50);

<3>.pctfree(index)=(maximum number of rows-initial number of rows)*100/maximum number of rows

<4>.creating reverse key indexes
sql> create unique index xay_id on xay(a) reverse pctfree 30 storage(initial 200k
sql> next 200k pctincrease 0 maxextents 50) tablespace indx;

<5>.create bitmap index
sql> create bitmap index xay_id on xay(a) pctfree 30 storage( initial 200k next 200k
sql> pctincrease 0 maxextents 50) tablespace indx;

<6>.change storage parameter of index
sql> alter index xay_id storage (next 400k maxextents 100);

7.allocating index space
sql> alter index xay_id allocate extent(size 200k datafile 'c:/oracle/index.dbf');

<8>.alter index xay_id deallocate unused;

<9>、查看烦?br /> SQL>select index_name,index_type,table_name from user_indexes order by table_name;
<10>、查看烦引被索引的字D?br /> SQL>select * from user_ind_columns where index_name=upper('&index_name');

11、创建序?br /> select * from user_sequences;
create sequence SEQ_NAME start with 1000
maxvalue 1000 increment by 1;
alter sequence SEQ_NAME minvalue 50 maxvalue 100;
12、删除重复行
update a set aa=null where aa is not null;

delete from a where rowid!=
(select max(rowid) from a b where a.aa=b.aa);
13、删除同其他表相同的?br /> delete from a where exits
(select 'X' from b where b.no=a.no);
?br /> delete from a where no in (select no from b);
14、查询从多少行到多少行的记录(可以用在web开发中的分|C?

select * from ( select rownum row_id,b.* from (select a.* from sys_oper a) b )
where row_id between 15 and 20

15、对公共授予讉K?br /> grant select on 表名 to public;
create public synonym 同义词名 for 表名;
16、填加注?br /> comment on table 表名 is '注释';
comment on column 表名.列名 is '注释';
17、分布式数据?创徏数据库链?br /> create [public] database link LINKNAME
[connect to USERNAME identified by PASSWORD]
[using 'CONNECT_STRING']
可以在服务器端,也可以在客户端徏立,但必L意,两台服务器之?br /> 数据库必d以互访,必须各有各自的别名数据库
18、查看数据库链\
select * from all_db_links;
select * from user_db_links;
查询 select * from TABLENAME@DBLNKNAME;
创徏q程数据库同义词
create synonym for TABLENAME@DBLNKNAME;
操纵q程数据库记?br /> insert into TABLENAME@DBLNKNAME (a,b) values (va,vb);
update TABLENAME@DBLNKNAME set a='this';
delete from TABLENAME@DBLNKNAME;
怎样执行q程的内嵌过E?br /> begin
otherdbpro@to_html(参数);
end;

19、数据库链\用户密码有特D字W的时候,可以用双引号把密码引h
create public database link dblink1 connect to db1 identified by "123*456" using 'db11'

20.oracle8中扩充了group by rollup和cube的操作。有时候省了你好多功夫的?br /> <1>下面的语句可以进行总计
select region_code,count(*) from aicbs.acc_woff_notify
group by rollup(region_code);
<2> 对第1个字D小计,最后合?br /> select region_code,write_status,count(*) from aicbs.acc_woff_notify
group by rollup(region_code,write_status);
----------------------
570 0 3
570 1 2
570 5 --此处计?70的记?br /> 571 0 10
571 1 2
571 12 --此处计?71的记?br /> .....
100 --此处有总计
<3> 复合rollup表达?只做总计
select region_code,write_status,count(*) from aicbs.acc_woff_notify
group by rollup(region_code,write_status);

<4> 对第1个字D小计,再对W?个字D小计,最后合?br /> select region_code,write_status,count(*) from aicbs.acc_woff_notify
group by cube(region_code,write_status);
----------------------
100 --此处有总计
0 60 --对write_statusQ?的小?br /> 1 39 --对write_statusQ?的小?br /> 3 1 --对write_statusQ?的小?br /> 570 5 --此处计?70的记?br /> 570 0 3
570 1 2
571 12 --此处计?71的记?br /> 571 0 10
571 1 2
....
<3> 复合cube表达?只做总计
select region_code,write_status,count(*) from aicbs.acc_woff_notify
group by cube(region_code,write_status);


<4>下面的语句可以按照rollup不同的字D进行小?br /> select region_code,write_status,count(*) from aicbs.acc_woff_notify
group by region_code,rollup(write_status);
21.查询view的创?br /> sql>set long 1000
sql>select * from user_views where view_name='MY_VIEW_NAME';
or
sql>select * from all_views where view_name='MY_VIEW_NAME';

22、去除数据库中特D字W?br /> <1>.字符串字D中含有"'",如果用来l合sql语句Q会造成语句不准?br /> 比如Qreplace(f1,'''','')
<2>.字符串字D中含有"\t \n",如果用来在c或者cQ+E序中输出到文gQ格式无法保证?br /> 比如Qreplace(f2,'\t','')
<3>.清除换行和回?br /> 比如: replace(f2,chr(13)||chr(10),'')
23、如何在字符串里加回车或者tab?
在sqlplus中执?br /> sql>select 'UserId=1233111'||chr(10)||'AccId=13431'||chr(9)||'AccId2=11111' from dual;

24、树形查?br /> create table zj(
bm number(8),
bmmc varchar2(20),
sjbm number(8)
)

insert into zj values(1,'aaa',0)
insert into zj values(11,'aaa1',1)
insert into zj values(12,'aaa2',1)
insert into zj values(111,'aaa11',11)
insert into zj values(112,'aaa12',11)
insert into zj values(113,'aaa13',11)
insert into zj values(121,'aaa21',12)
insert into zj values(122,'aaa22',12)
insert into zj values(123,'aaa23',12)
--
select bm,bmmc,sjbm,level
from zj
start with sjbm=0
connect by prior bm = sjbm
或?br />
select bm,bmmc,sjbm,level
from zj
start with sjbm=0
connect by sjbm = prior bm

25、快?br /> create snapshot SNAPSHOT_NAME
[storage (storage parameter)]
[tablespace TABLESPACE_NAME]
[refresh [fast\complete\force]
[start with START_DATE next NEXT_DATE]
as QUERY;

create snapshot snapshot_to_study as select * from TABLE_NAME@to_study;
创徏角色
create role aa identified by aaa;
授权 grant create snapshot,alter snapshot to aaa;
grant aaa to emp;
create snapshot SNAPSHOT_TO_HTML refresh complete start with sysdate next
sysdate+5/(24*60*60) as select * from a@to_html;
删除 drop snapshot snap_to_html
手工h快照,(调用DBMS_SNAPSHOT包中的refreshq程)DBMS_SNAPSHOT.refresh(snapshot_name,refresh_type);
begin
DBMS_SNAPSHOT.REFRESH('snap_to_html','c');
end;
Ҏ有快照进行刷?br /> begin
DBMS_SNAPSHOT.REFRESH_ALL;
end;
怎样执行q程的内嵌过E?br /> begin
otherdbpro@to_html(参数);
end;
26、用L?br /> create a user: database authentication
sql> create user juncky identified by oracle default tablespace users
sql> temporary tablespace temp quota 10m on data password expire
sql> [account lock|unlock] [profile profilename|default];

<1>.查看当前用户的缺省表I间
SQL>select username,default_tablespace from user_users;
<2>生成用户时指定缺省表I间
create user 用户?identified by 口o default tablespace 表空间名;

<3>重新指定用户的缺省表I间
alter user 用户?default tablespace 表空间名
<4>查看当前用户的角?br /> SQL>select * from user_role_privs;
<5>查看当前用户的系l权限和表权限
SQL>select * from user_sys_privs;
SQL>select * from user_tab_privs;
<6>查看用户下所有的?br /> SQL>select * from user_tables;
<7> alter user语句的quota子句限制用户的磁盘空?br /> ?alter user jf quota 10M on system;

27、查看放在ORACLE的内存区里的?
SQL>select table_name,cache from user_tables where instr(cache,'Y')>0;

28、约束条?br /> create table employee
(empno number(10) primary key,
name varchar2(40) not null,
deptno number(2) default 10,
salary number(7,2) check salary<10000,
birth_date date,
soc_see_num char(9) unique,
foreign key(deptno) references dept.deptno)
tablespace users;

关键?primary key)必须是非I?表中记录的唯一?br /> not null 非空U束
default ~省值约?br /> check 查约?使列的值符合一定的标准范围
unqiue 唯一性约?br /> foreign key 外部键约?br />
29、查看创囄select语句
SQL>set view_name,text_length from user_views;
SQL>set long 2000; 说明Q可以根据视囄text_lengthD定set long 的大?br /> SQL>select text from user_views where view_name=upper('&view_name');

30、查看同义词的名U?br /> SQL>select * from user_synonyms;

31、用Sql语句实现查找一列中WN大?
select * from
(select t.*,dense_rank() over (order by sal) rank from employee)
where rank = N;

32 虚拟自段
<1>. CURRVAL ?nextval
创徏序列
CREATE SEQUENCE EMPSEQ ... ;
SELECT empseq.currval FROM DUAL ;
自动插入序列的数?br /> INSERT INTO emp
VALUES (empseq.nextval, 'LEWIS', 'CLERK',
7902, SYSDATE, 1200, NULL, 20) ;

<2>. ROWNUM
按设定排序的行的序号
SELECT * FROM emp WHERE ROWNUM < 10 ;

<3>. ROWID
q回行的物理地址
SELECT ROWID, ename FROM emp WHERE deptno = 20 ;

33、对CLOB字段q行全文?br /> SELECT * FROM A WHERE dbms_lob.instr(a.a,'K',1,1)>0;

34. Ҏ字符的插入,比如"&"
insert into a values (translate ('at{&}t','at{}','at'));

35.表管?br /> <1>.create a table
sql> create table table_name (column datatype,column datatype]....)
sql> tablespace tablespace_name [pctfree integer] [pctused integer]
sql> [initrans integer] [maxtrans integer]
sql> storage(initial 200k next 200k pctincrease 0 maxextents 50)
sql> [logging|nologging] [cache|nocache]

<2>.copy an existing table
sql> create table table_name [logging|nologging] as subquery

<3> create table ... as 方式的时候,指定表参?br /> create table a
storage(
initial 1M /*W一ơ创建时分配I间*/
next 1M /*W一ơ分配的存储I间用完时在分配*/
)
as select * from b;
<4>.创徏临时?br /> sql> create global temporary table xay_temp as select * from xay;
on commit preserve rows/on commit delete rows
在Oracle中,可以创徏以下两种临时?
a 会话Ҏ的时表:
create global temporary table () on commit preserve rows;
会话指定Q当中断会话时ORACLE截断表

b 事务Ҏ的时表:
create global temporary table () on commit delete rows;
事务指定,每次提交后ORACLE截断表Q删除全部行Q?
c 说明
临时表只在当前连接内有效
  临时表不建立索引,所以如果数据量比较大或q行多次查询?不推荐?
  数据处理比较复杂的时候时表快,反之视图快点
  在仅仅查询数据的时候徏议用游标: open cursor for 'sql clause';
<5>
pctfree = (average row size - initial row size) *100 /average row size
pctused = 100-pctfree- (average row size*100/available data space)
<6>.change storage and block utilization parameter
sql> alter table table_name pctfree=30 pctused=50 storage(next 500k
sql> minextents 2 maxextents 100);
<7>.manually allocating extents
sql> alter table table_name allocate extent(size 500k datafile 'c:/oracle/data.dbf');
<8>.move tablespace
sql> alter table employee move tablespace users;
<9>.deallocate of unused space
sql> alter table table_name deallocate unused [keep integer]
<10>.drop a column
sql> alter table table_name drop column comments cascade constraints checkpoint 1000;
alter table table_name drop columns continue;
<11>.mark a column as unused
sql> alter table table_name set unused column comments cascade constraints;
alter table table_name drop unused columns checkpoint 1000;
alter table orders drop columns continue checkpoint 1000
data_dictionary : dba_unused_col_tabs

37. 中文是如何排序的Q?

Oracle9i之前Q中文是按照二进制编码进行排序的?
在oracle9i中新增了按照拼音、部首、笔L序功能。设|NLS_SORT?
SCHINESE_RADICAL_M 按照部首Q第一序Q、笔划(W二序Q排?
SCHINESE_STROKE_M 按照W划Q第一序Q、部首(W二序Q排?
SCHINESE_PINYIN_M 按照拼音排序

38. 数据表中的字D|大数:
表或视图中的最大列Cؓ 1000

39. oracle中的裸设?
裸设备就是绕q文件系l直接访问的储存I间

40. 在Oracle服务器上通过SQLPLUS查看本机IP地址 ?
select sys_context('userenv','ip_address') from dual;
如果是登陆本机数据库Q只能返?27.0.0.1

41. 在ORACLE中取毫秒?
9i之前不支?9i开始有timestamp.
9i可以用select systimestamp from dual;

42. NU{换ؓ时分U格式?
set serverout on
declare
N number := 1000000;
ret varchar2(100);
begin
ret := trunc(n/3600) || '时' || to_char(to_date(mod(n,3600),'sssss'),'fmmi"?"ss"U?') ;
dbms_output.put_line(ret);
end;

43、在某个用户下找所有的索引
select user_indexes.table_name, user_indexes.index_name,uniqueness, column_name
from user_ind_columns, user_indexes
where user_ind_columns.index_name = user_indexes.index_name
and user_ind_columns.table_name = user_indexes.table_name
order by user_indexes.table_type, user_indexes.table_name,
user_indexes.index_name, column_position;

44. not in的替代?br /> 一般not in的效率比较低。特别是数据量大的时候,几乎不能执行?br /> 用下面几U方式可以替换写?br /> 比如要查询在fee_rev_info表中已经销L用户Q不在cm_user中的Q?不过下面的例子不是很好,因ؓbill_id是cm_user的唯一索引Q?br /> select * from fee_rev_info where bill_id not in (select bill_id from cm_user)
<1> 用not exists
select * from fee_rev_info a where not exists (select 'p' from cm_user b where b.bill_id = a.bill_id)
<2> 用外q接(+)
select a.* from fee_rev_info a,cm_user b
where a.bill_id = b.bill_id (+)
and b.bill_id is null
<3> 用hash_aj
select /*+HASH_AJ*/* from fee_rev_info where bill_id not in (select bill_id from cm_user)

45.怎么h询特D字W,如通配W?与_
假如数据库中有表 STATIONTYPE,STATION_571 STATION_572 ...
select * from tab where tname like 'STATION_%'
会显C?STATIONTYPE,STATION_571 ... 可以用下面的语句
select * from tab where tname like 'STATION\_%' escape'\'

46.如果存在更斎ͼ不存在就插入可以用一个语句实现吗
9i已经支持了,是MergeQ但是只支持select子查询,
如果是单条数据记录,可以写作select .... from dual的子查询?br /> 语法为:
MERGE INTO table
USING data_source
ON (condition)
WHEN MATCHED THEN update_clause
WHEN NOT MATCHED THEN insert_clause;

?br /> MERGE INTO cm_user_credit
USING (select * from dual) ON (user_id =1302514690 )
when MATCHED then update set credit_value = 1000
when NOT MATCHED then insert (user_id,acc_id,bill_id,plan_id,region_code,credit_value) values(1302514690,1305032158,'13857141218',10070247,'571',1000);

47.怎么实现一条记录根据条件多表插?br /> 9i以上可以通过Insert all语句完成Q仅仅是一个语句,如:
INSERT ALL
WHEN (id=1) THEN
INTO table_1 (id, name)
values(id,name)
WHEN (id=2) THEN
INTO table_2 (id, name)
values(id,name)
ELSE
INTO table_other (id, name)
values(id, name)
SELECT id,name
FROM a;

如果没有条g的话Q则完成每个表的插入Q如
INSERT ALL
INTO table_1 (id, name)
values(id,name)
INTO table_2 (id, name)
values(id,name)
INTO table_other (id, name)
values(id, name)
SELECT id,name
FROM a;

48.如何实现行列转换
<1>、固定列数的行列转换
?br /> student subject grade
---------------------------
student1 语文 80
student1 数学 70
student1 p 60
student2 语文 90
student2 数学 80
student2 p 100
...
转换?
语文 数学 p
student1 80 70 60
student2 90 80 100
...
语句如下Q?br /> select student,sum(decode(subject,'语文', grade,null)) "语文",
sum(decode(subject,'数学', grade,null)) "数学",
sum(decode(subject,'p', grade,null)) "p"
from table
group by student

<2>、不定列行列转换
?br /> c1 c2
--------------
1 ?br /> 1 ?br /> 1 ?br /> 2 ?br /> 2 ?br /> 3 ?br /> ...
转换?br /> 1 我是?br /> 2 知道
3 ?br />
q一cd的{换必d助于PL/SQL来完成,q里l一个例?br /> CREATE OR REPLACE FUNCTION get_c2(tmp_c1 NUMBER)
RETURN VARCHAR2
IS
Col_c2 VARCHAR2(4000);
BEGIN
FOR cur IN (SELECT c2 FROM t WHERE c1=tmp_c1) LOOP
Col_c2 := Col_c2||cur.c2;
END LOOP;
Col_c2 := rtrim(Col_c2,1);
RETURN Col_c2;
END;
/
SQL> select distinct c1 ,get_c2(c1) cc2 from table;卛_

--例子Q?br /> create table okcai_1
(
user_id varchar2(10),
user_number varchar2(10),
user_num number(8)
)
user_id user_number user_num
---------------------
1 123 2
1 456 5
1 789 6
2 11 2
2 22 3
2 33 4
2 44 5
2 55 6
2 66 7
2 77 8
3 1234 1
3 5678 2

方式一Q?br /> create or replace function get_col(
p_userId number,
p_col number
) return varchar
as
v_tmp varchar2(255);
begin
select user_number||chr(9)||user_num into v_tmp
from
(select user_number,user_num,rownum row_id
from okcai_1
where user_id = p_userId) a
where row_id = p_col;
return ltrim(v_tmp);
--return v_tmp;
end;

然后
select distinct user_id,get_col(user_id,1),get_col(user_id,2),get_col(user_id,3) .... from okcai_1

方式二:
create or replace function get_col(
p_userId number,
p_col number
) return varchar
as
v_tmp varchar2(255);
begin
select user_number||chr(9)||user_num into v_tmp
from
(select user_number,user_num,rownum row_id
from okcai_1
where user_id = p_userId) a
where row_id = p_col;
return ltrim(v_tmp);
--return v_tmp;
end;
select distinct user_id,get_col_new(user_id) from okcai_1;

49.怎么讄存储q程的调用者权?br /> 普通存储过E都是所有者权限,如果惌|调用者权限,请参考如下语?br /> create or replace
procedure ...()
AUTHID CURRENT_USER
As
begin
...
end;

50.Oracle有哪些常见关键字
详细信息可以查看v$reserved_words视图

51.怎么查看数据库参?br /> <1> show parameter 参数?br /> 如通过show parameter spfile可以查看9i是否使用spfile文g
其中参数名是可以匚w的?br /> 比如show parameter cursor ,则会昄跟cursor相关的参?br /> <2>
select * from v$parameter
<3>

除了q部分参敎ͼOracleq有大量隐含参数Q可以通过如下语句查看:
SELECT NAME
,VALUE
,decode(isdefault, 'TRUE','Y','N') as "Default"
,decode(ISEM,'TRUE','Y','N') as SesMod
,decode(ISYM,'IMMEDIATE', 'I',
'DEFERRED', 'D',
'FALSE', 'N') as SysMod
,decode(IMOD,'MODIFIED','U',
'SYS_MODIFIED','S','N') as Modified
,decode(IADJ,'TRUE','Y','N') as Adjusted
,description
FROM ( --GV$SYSTEM_PARAMETER
SELECT x.inst_id as instance
,x.indx+1
,ksppinm as NAME
,ksppity
,ksppstvl as VALUE
,ksppstdf as isdefault
,decode(bitand(ksppiflg/256,1),1,'TRUE','FALSE') as ISEM
,decode(bitand(ksppiflg/65536,3),
1,'IMMEDIATE',2,'DEFERRED','FALSE') as ISYM
,decode(bitand(ksppstvf,7),1,'MODIFIED','FALSE') as IMOD
,decode(bitand(ksppstvf,2),2,'TRUE','FALSE') as IADJ
,ksppdesc as DESCRIPTION
FROM x$ksppi x
,x$ksppsv y
WHERE x.indx = y.indx
AND substr(ksppinm,1,1) = '_'
AND x.inst_id = USERENV('Instance')
)
ORDER BY NAME

52.怎样建立Z函数索引
8i以上版本Q确?br /> Query_rewrite_enabled=true
Query_rewrite_integrity=trusted
Compatible=8.1.0以上
Create index indexname on table (function(field));

53.怎么L动表或表分区
[A]Ud表的语法
Alter table tablename move
[Tablespace new_name
Storage(initial 50M next 50M
pctincrease 0 pctfree 10 pctused 50 initrans 2) nologging]
Ud分区的语?br /> alter table tablename move (partition partname)
[update global indexes]
之后之后必须重徏索引
Alter index indexname rebuild
如果表有LobD,那么正常的Alter不能UdLobD到别的表空_而仅仅是Ud了表D,可以采用如下的方法移动LobD?br /> alter table tablename move
lob(lobsegname) store as (tablespace newts);

54.怎么样修改表的列?br /> [A]9i以上版本可以采用rname命o
ALTER TABLE UserName.TabName
RENAME COLUMN SourceColumn TO DestColumn
9i以下版本可以采用create table …… as select * from SourceTable的方式?br /> 另外Q?i以上可以支持删除列了
ALTER TABLE UserName.TabName
SET UNUSED (ColumnName) CASCADE CONSTRAINTS
ALTER TABLE UserName.TabName
DROP (ColumnName) CASCADE CONSTRAINTS

55.case的用?br /> 在sql语句?br /> CASE test_value
WHEN expression1 THEN value1
[[WHEN expression2 THEN value2] [...]]
[ELSE default_value]
END

比如1
SELECT last_name, job_id, salary
CASE job_id
WHEN 'IT_PROG' THEN 1.10*salary
WHEN 'ST_CLERK' THEN 1.15*salary
WHEN 'SA_REP' THEN 1.20*salary
ELSE salary END "REVISED_SALARY"
FROM employees

比如2
select
case
when real_charge>=20000 and real_charge<30000 then 5000
when real_charge>=30000 and real_charge<40000 then 9000
when real_charge>=40000 and real_charge<50000 then 10000
when real_charge>=50000 and real_charge<60000 then 14000
when real_charge>=60000 and real_charge<70000 then 18000
when real_charge>=70000 and real_charge<80000 then 19000
when real_charge>=80000 and real_charge<90000 then 24000
when real_charge>=90000 and real_charge<100000 then 27000
when real_charge>=100000 and real_charge<110000 then 27000
when real_charge>=110000 and real_charge<120000 then 29000
when real_charge>=120000 then 36000
else
0
end ,acc_id,user_id,real_charge from okcai_jh_charge_200505

在存储过E中
case v_strGroupClassCode
when '1' then
v_nAttrNum := v_nAttrNum + 300;
v_strAttrFlag := '1'||substr(v_strAttrFlag,2,7);
when '2' then
v_nAttrNum := v_nAttrNum + 200;
v_strAttrFlag := '2'||substr(v_strAttrFlag,2,7);
else
NULL;
end case;
注意的是存储q程和sql语句有的l微差别是用end caseQ而不是end。语句后面跟";"


谭明 2008-05-20 11:54 发表评论
]]>
Package,Procedure,Trigger,Function,TYPEhttp://www.tkk7.com/msmary/articles/201455.html谭明谭明Mon, 19 May 2008 10:08:00 GMThttp://www.tkk7.com/msmary/articles/201455.htmlhttp://www.tkk7.com/msmary/comments/201455.htmlhttp://www.tkk7.com/msmary/articles/201455.html#Feedback0http://www.tkk7.com/msmary/comments/commentRss/201455.htmlhttp://www.tkk7.com/msmary/services/trackbacks/201455.html
CREATE OR REPLACE TRIGGER trigger_name
AFTER|BEFORE INSERT ON table_name
FOR EACH ROW
[WHEN (Boolean expression)]
DECLARE
Local declarations
BEGIN
Trigger Body written PL/SQL
END;
2.TYPE IS TABLE OF 
如果想用PL/SQL表中的具体一?再加?   
TYPE cg$table_type IS TABLE OF I_FIELD_MAPPED_COLUMN%ROWTYPE
     INDEX BY BINARY_INTEGER;
cg$table cg$table_type; 
--cg$I_FIELD_MAPPED_COLUMN包名
idx BINARY_INTEGER := 1;
cg$I_FIELD_MAPPED_COLUMN.cg$table(cg$I_FIELD_MAPPED_COLUMN.idx).FIELD_MAPPED_COLUMN_ID 
  := cg$rec.FIELD_MAPPED_COLUMN_ID;
   


谭明 2008-05-19 18:08 发表评论
]]>
清空临时表空?/title><link>http://www.tkk7.com/msmary/articles/191671.html</link><dc:creator>谭明</dc:creator><author>谭明</author><pubDate>Wed, 09 Apr 2008 06:53:00 GMT</pubDate><guid>http://www.tkk7.com/msmary/articles/191671.html</guid><wfw:comment>http://www.tkk7.com/msmary/comments/191671.html</wfw:comment><comments>http://www.tkk7.com/msmary/articles/191671.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/msmary/comments/commentRss/191671.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/msmary/services/trackbacks/191671.html</trackback:ping><description><![CDATA[<p>查看临时表空间的数据文g的状?br />   SELECT FILE#,STATUS FROM V$TEMPFILE<br /> 查看临时表空间的大小<br />   SELECT TABLESPACE_NAME,FILE_NAME,<br />     BYTES/1024/1024,USER_BYTES/1024/1024,(BYTES-USER_BYTES)/1024/1024 FROM DBA_TEMP_FILES<br /> 查看临时表空间的详细信息<br />   SELECT * FROM DBA_TEMP_FILES <br /> 查看表空间的IZ大小<br />   SELECT TABLESPACE_NAME,SUM(BYTES)/1024/1024 MB FROM DBA_FREE_SPACE GROUP BY TABLESPACE_NAME</p> <p>清空临时表空?/p> <p>1.startup --启动数据?/p> <p>2.创徏中{临时表空?nbsp; <br />   CREATE TEMPORARY TABLESPACE TEMP2<br />     TEMPFILE 'D:\ORACLE\ORADATA\DB\DATAFILE\TEMP_T02.DBF' SIZE 200M</p> <p>3.改变~省临时表空?为刚刚创建的C时表I间temp2<br />    ALTER DATABASE DEFAULT TEMPORARY TABLESPACE TEMP2;</p> <p>4.删除原来临时表空?br />     DROP TABLESPACE TEMP_T INCLUDING CONTENTS AND DATAFILES;</p> <p>5.重新创徏临时表空?br />   CREATE TEMPORARY TABLESPACE TEMP_T<br />    TEMPFILE 'D:\ORACLE\ORADATA\DB\DATAFILE\TEMP_T011.DBF' SIZE 10M</p> <p>6.重置~省临时表空间ؓ新徏的temp_t表空?br />    ALTER DATABASE DEFAULT TEMPORARY TABLESPACE TEMP_T;</p> <p>7.删除中{用时表I间<br />    DROP TABLESPACE TEMP2 INCLUDING CONTENTS AND DATAFILES;</p> <p>8.重新指定用户表空间ؓ重徏的时表I间<br />    ALTER USER IDA TEMPORARY TABLESPACE TEMP_T;<br /> </p> <img src ="http://www.tkk7.com/msmary/aggbug/191671.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/msmary/" target="_blank">谭明</a> 2008-04-09 14:53 <a href="http://www.tkk7.com/msmary/articles/191671.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle 函数应用http://www.tkk7.com/msmary/articles/179141.html谭明谭明Sun, 03 Feb 2008 05:42:00 GMThttp://www.tkk7.com/msmary/articles/179141.htmlhttp://www.tkk7.com/msmary/comments/179141.htmlhttp://www.tkk7.com/msmary/articles/179141.html#Feedback2http://www.tkk7.com/msmary/comments/commentRss/179141.htmlhttp://www.tkk7.com/msmary/services/trackbacks/179141.html

1. nvl( ) 函数

CZ 请参?/font>

从两个表辑ּq回一个非 null 倹{?br />
语法

NVL(eExpression1, eExpression2)

参数
eExpression1, eExpression2

如果 eExpression1 的计结果ؓ null |?NVL( ) q回 eExpression2。如?eExpression1 的计结果不?null |则返?eExpression1。eExpression1 ?eExpression2 可以是Q意一U数据类型。如?eExpression1 ?eExpression2 的结果皆?null |?NVL( ) q回 .NULL.?br />
q回值类?/strong>

字符型、日期型、日期时间型、数值型、货币型、逻辑型或 null ?br />
说明

在不支持 null 值或 null 值无关紧要的情况下,可以使用 NVL( ) 来移去计或操作中的 null 倹{?/p>

select nvl(a.name,'I得') as name from student a join school b on a.ID=b.ID

注意Q两个参数得cd要匹?/p>

2.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

select TO_CHAR(1,'FM09') from dual       result: 0

3.Oracle函数之substr

substr函数有三个参敎ͼ允许你将目标字符串的一部䆾输出Q?/p>

W一个参Cؓ目标字符Ԍ

W二个字W串是将要输出的子串的v点,

W三个参数是要输出的子串的长度?br />    
例子1Q?/p>

substr('ABCDEFG',   2,   3)   =   'BCD'  
   
如果W二个参Cؓ负数Q那么将会从源串的尾部开始向前定位至负数的绝对值的位置?/p>

例子2Q?/p>

substr('ABCDEFG',   -2)   =   'FG'

substr('ABCDEFG',   -4)   =   'DEFG'


 4.Oracle 函数之round
描述 : 传回一个数|该数值是按照指定的小C元数q行四舍五入q算的结果?
SELECT ROUND( number, [ decimal_places ] ) FROM DUAL
参数:
number : Ʋ处理之数?
decimal_places : 四舍五入 , 数取几?( 预设?0 )
Sample :
select round(123.456, 0) from dual; 回传 123
select round(123.456, 1) from dual; 回传 123.5
select round(123.456, 2) from dual; 回传 123.46
不过最大长度不会超q?6?br /> SELECT ROUND(112211111111263.451,6) FROM DUAL;   回传112211111111263




谭明 2008-02-03 13:42 发表评论
]]>
PL/SQL Developer 中文q解决http://www.tkk7.com/msmary/articles/176948.html谭明谭明Tue, 22 Jan 2008 02:59:00 GMThttp://www.tkk7.com/msmary/articles/176948.htmlhttp://www.tkk7.com/msmary/comments/176948.htmlhttp://www.tkk7.com/msmary/articles/176948.html#Feedback1http://www.tkk7.com/msmary/comments/commentRss/176948.htmlhttp://www.tkk7.com/msmary/services/trackbacks/176948.html 

1。select * from v$nls_parameters
查询nls的参敎ͼ获得数据库服务器端的字符~码
NLS_LANGUAGE
NLS_CHARACTERSET
2。修Ҏ地环境变量,讄
NLS_LANG = SIMPLIFIED CHINESE.ZHS16GBK //q个是我们的数据库字W编?/p>

NLS_LANG格式Q?br /> NLS_LANG = language_territory.charset
有三个组成部分(语言、地域和字符集)Q每个成分控制了NLS子集的特性。其中:language 指定服务器消息的语言?br /> territory 指定服务器的日期和数字格式?br /> charset 指定字符?

需要保证要讄客户端字W集与服务器端字W集一?/span>



谭明 2008-01-22 10:59 发表评论
]]>
Oracle学习记录http://www.tkk7.com/msmary/articles/176918.html谭明谭明Tue, 22 Jan 2008 02:03:00 GMThttp://www.tkk7.com/msmary/articles/176918.htmlhttp://www.tkk7.com/msmary/comments/176918.htmlhttp://www.tkk7.com/msmary/articles/176918.html#Feedback0http://www.tkk7.com/msmary/comments/commentRss/176918.htmlhttp://www.tkk7.com/msmary/services/trackbacks/176918.html1.有关PL/SQL监听器的配置

    监听器一般在下面情况下可以找到相应配|?br />    如:C:\Oracle\Dev6i\NET80\ADMIN   C:\DevSuiteHome_1\NETWORK\ADMIN
 其中有三个以ora作ؓ后辍名的文g,分别?sqlnet.ora、tnsnames.ora、listener.ora;它们的作用分别是:
sqlnet.ora内容大致如下

SQLNET.AUTHENTICATION_SERVICES= (NTS)

NAMES.DIRECTORY_PATH= (LDAP, TNSNAMES, EZCONNECT, ONAMES, HOSTNAME)
W一行是可以用计机的名U默认登录,如果你的文g中没有这一行,则不能用计算机名dQ像我们在SQL*PLUS中,可以用这样SQL>sqlplus / as sysdba 方式q行dQ? ׃表以本机;
W二行就是用数据库的用户名和密码q行d?br />
listener.ora是你要d本机数据库时的监听配|,当你要远E登录其它计机的数据库时这个就不用Q有q个你就得开启相应的监听服务E序?br />
tnsnames.ora 的配|就是你用像PL/SQLd数据库时Q弹出的d界面W三行可以选择的数据库名;我们可以在里面写多个q接q程数据库的代码D,当连接远E数据库时就不用开启本机的数据库服务和监听服务
l段代码好明?br />
VERSION9 =   //自己命名的,昄在登录数据库时可选的数据?br />   (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = version9)(PORT = 1521))    //host计算机名Qport端口?br />     )
    (CONNECT_DATA =
      (SERVICE_NAME = db)     //db数据库名
    )
  )

2. Oracle数据导入导出 imp/exp
功能Q?a class="keyword" >Oracle数据导入导出imp/expq当与oracle数据q原与备份?br />  大多情况都可以用Oracle数据导入导出完成数据的备份和q原Q不会造成数据的丢失)?br />  查询服务器的字符?br /> select * from nls_database_parameters t where t.parameter = 'NLS_CHARACTERSET'
  如果 value=utf8
   则设|客LNLS_LANG=AMERICAN_AMERICA.UTF8
  其它的字W集
      AMERICAN_AMERICA.WE8ISO8859P1
      SIMPLIFIED CHINESE_CHINA.ZHS16GBK

导出:
  exp scott/tiger tables=(s_region) file=d:\scott.dmp log=d:\scott.log
导入:
    imp scott/tiger file=d:\scott.dmp tables=(s_region) ignore=y
    imp userid=dbown/dbown@db file=staff.dmp ignore=y log=staff_imp.log
  我发现没有后面的ignore=y(忽略为yes)导入会有?在数据库中查不到数据

3. 理数据

/*create index*/

example:

/*创徏一般烦?/

create index index_name on table_name(column_name) tablespace tablespace_name;

/*创徏位图索引*/

create bitmap index index_name on table_name(column_name1,column_name2) tablespace tablespace_name;

/*索引中不能用pctused*/

create [bitmap] index index_name on table_name(column_name) tablespace tablespace_name pctfree 20 storage(inital 100k next 100k) ;

/*大数据量的烦引最好不要做日志*/

create [bitmap] index index_name table_name(column_name1,column_name2) tablespace_name pctfree 20 storage(inital 100k next 100k) nologging;

/*创徏反{索引*/

create index index_name on table_name(column_name) reverse;

/*创徏函数索引*/

create index index_name on table_name(function_name(column_name)) tablespace tablespace_name;

/*时创建约束条?/

create table user.table_name(column_name number(7) constraint constraint_name primary key deferrable using index storage(initial 100k next 100k) tablespace tablespace_name,column_name2 varchar2(25) constraint constraint_name not null,column_name3 number(7)) tablespace tablespace_name;

/*l创建bitmap index分配的内存空间参敎ͼ以加速徏索引*/

show parameter create_bit;

/*改变索引的存储参?/

alter index index_name pctfree 30 storage(initial 200k next 200k);

/*l烦引手工分配一个分?/

alter index index_name allocate extent (size 200k datafile '$ORACLE/oradata/..');

/*释放索引中没用的I间*/

alter index index_name deallocate unused;

/*索引重徏*/

alter index index_name rebuild tablespace tablespace_name;

/*普通烦引和反{索引的互?/

alter index index_name rebuild tablespace tablespace_name reverse;

/*重徏索引Ӟ不锁?/

alter index index_name rebuild online;

/*l烦引整理碎?/

alter index index_name COALESCE;

/*分析索引,事实上是更新l计的过E?/

analyze index index_name validate structure;

desc index_state;

drop index index_name;

alter index index_name monitoring usage;-----监视索引是否被用?

alter index index_name nomonitoring usage;----取消监视

/*有关索引信息的视?/

select * from dba_indexes/dba_ind_columns/dbs_ind_expressions/v$object_usage;

########## 数据完整性的理(Maintaining data integrity) ##########

alter table table_name drop constraint constraint_name;----drop U束

alter table table_name add constraint constraint_name primary key(column_name1,column_name2);-----创徏主键

alter table table_name add constraint constraint_name unique(column_name1,column_name2);---创徏唯一U束

/*创徏外键U束*/

alter table table_name add constraint constraint_name foreign key(column_name1) references table_name(column_name1);

/*不效验老数据,只约束新的数据[enable/disableQ约?不约束新数据;novalidate/validate:不对/对老数据进行验证]*/

alter table table_name add constraint constraint_name check(column_name like 'B%') enable/disable novalidate/validate; 
         select 'ALTER TABLE '||TABLE_NAME||' MODIFY CONSTRAINT '||CONSTRAINT_NAME||' ENABLE   NOVALIDATE;'
FROM USER_CONSTRAINTS
WHERE TABLE_NAME IN ('STAFFBASE','STAFFCLAIM','STAFFJOB','STAFFPAY','STAFFREF','STAFFTIME','STAFF')

                       /*修改U束条gQg旉证,commit旉?/

alter table table_name modify constraint constraint_name initially deferred;

/*修改U束条gQ立即验?/

alter table table_name modify constraint constraint_name initially immediate;

alter session set constraints=deferred/immediate;

/*drop一个有外键的主键表,带cascade constraints参数U联删除*/

drop table table_name cascade constraints;

/*当truncate外键表时Q先外键设为无效,再truncate;*/

truncate table table_name;

/*讄束条件无?/

alter table table_name disable constraint constraint_name;

alter table table_name enable novalidate constraint constraint_name;

/*无效约束的数据行放入exception的表中,此表记录了违反数据约束的行的行号Q在此之前,要先建exceptions?/

alter table table_name add constraint constraint_name check(column_name >;15) enable validate exceptions into exceptions;

/*q行创徏exceptions表的脚本*/

start $ORACLE_HOME/rdbms/admin/utlexcpt.sql;

/*获取U束条g信息的表或视?/

select * from user_constraints/dba_constraints/dba_cons_columns;
4.Devloper Form 6i 中导入Javacd?
   PDE-UJI002: Unable to find required Java importer classes 问题的解x?br />  讄classpath=.;C:\orant\TOOLS\COMMON60\JAVA\IMPORTER.JAR


5.数据库文?br /> a.查询数据文g
  SELECT * FROM DBA_TABLESPAC
b.查看表空间的IZ大小
   SELECT TABLESPACE_NAME,SUM(BYTES/1024/1024) MB FROM DBA_FREE_SPACE GROUP BY 
TABLESPACE_NAME;
c.  查看数据文g存放路径
  SELECT TABLESPACE_NAME,BYTES/1024/1024 FILE_SIZE_MB,FILE_NAME FROM DBA_DATA_FILES;


 



谭明 2008-01-22 10:03 发表评论
]]>
listener.ora--sqlnet.ora--tnsnames.ora的关pM及手工配|D?/title><link>http://www.tkk7.com/msmary/articles/174464.html</link><dc:creator>谭明</dc:creator><author>谭明</author><pubDate>Thu, 10 Jan 2008 14:58:00 GMT</pubDate><guid>http://www.tkk7.com/msmary/articles/174464.html</guid><wfw:comment>http://www.tkk7.com/msmary/comments/174464.html</wfw:comment><comments>http://www.tkk7.com/msmary/articles/174464.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/msmary/comments/commentRss/174464.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/msmary/services/trackbacks/174464.html</trackback:ping><description><![CDATA[以下内容来之InternetQ不知道原作者是哪位了,非常感谢作者的ȝ?br /> <br /> 版权归原作者?br /> Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=<br /> 最q看到好多h说到tns或者数据库不能d{问题,q性ȝ了下面的文档?br />   <br />   首先来说Oracle的网l结构,往复杂处说能加上加密、LDAP{等。。这里不做讨论,重点攑֜基本的网l结构也是我们最常用的这U情?br />   <br />   三个配置文g<br />   <br />   listener.ora、sqlnet.ora、tnsnames.ora Q都是放?ORACLE_HOME\network\admin目录下?br />   <br />   重点:三个文g的作用和使用<br />   <br />   #-----------------------<br />   <br />   sqlnet.ora-----作用cM于linux或者其他unix的nsswitch.conf文gQ通过q个文g来决定怎么h一个连接中出现的连接字W串Q?br />   <br />   例如我们客户端输?br />   <br />   sqlplus sys/oracle@orcl<br />   <br />   假如我的sqlnet.ora是下面这个样?br />   <br />   SQLNET.AUTHENTICATION_SERVICES= (NTS)<br />   <br />   NAMES.DIRECTORY_PATH= (TNSNAMES,HOSTNAME)<br />   <br />   那么Q客L׃首先在tnsnames.ora文g中找orcl的记?如果没有相应的记录则试把orcl当作一个主机名Q通过|络的途径去解析它的ip地址然后去连接这个ip上GLOBAL_DBNAME=orclq个实例Q当然我q里orclq不是一个主机名<br />   <br />   如果我是q个样子<br />   <br />   NAMES.DIRECTORY_PATH= (TNSNAMES)<br />   <br />   那么客户端就只会从tnsnames.ora查找orcl的记?br />   <br />   括号中还有其他选项Q如LDAP{ƈ不常用?br />   <br />   #------------------------<br />   <br />   Tnsnames.ora------q个文gcM于unix ?a target="_blank">hosts</a>文gQ提供的tnsnameC机名或者ip的对应,只有当sqlnet.ora中类?br />   <br />   NAMES.DIRECTORY_PATH= (TNSNAMES) q样Q也是客户端解析连接字W串的顺序中有TNSNAMES是,才会试使用q个文g?br />   <br />   例子中有两个QORCL 对应的本机,SALES对应的另外一个IP地址Q里边还定义了用主用服务器q是׃n服务器模式进行连接,一句一句说<br />   <br />   #你所要连接的时候输入得TNSNAME<br />   <br />   ORCL =<br />   <br />   (DESCRIPTION =<br />   <br />   (ADDRESS_LIST =<br />   <br />   #下面是这个TNSNAME对应的主机,端口Q协?br />   <br />   (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))<br />   <br />   )<br />   <br />   (CONNECT_DATA =<br />   <br />   #使用专用服务器模式去q接需要跟服务器的模式匚wQ如果没有就Ҏ服务器的模式<br />   <br />   #自动调节<br />   <br />   (SERVER = DEDICATED)<br />   <br />   #对应service_nameQSQLPLUS>show <a target="_blank">parameter</a> service_name;<br />   <br />   #q行查看<br />   <br />   (SERVICE_NAME = orcl)<br />   <br />   )<br />   <br />   )<br />   <br />   #下面q个cM<br />   <br />   SALES =<br />   <br />   (DESCRIPTION =<br />   <br />   (ADDRESS_LIST =<br />   <br />   (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.188.219)(PORT = 1521))<br />   <br />   )<br />   <br />   (CONNECT_DATA =<br />   <br />   (SERVER = DEDICATED)<br />   <br />   (SERVICE_NAME = sales)<br />   <br />   )<br />   <br />   )<br />   <br />   #----------------------<br />   <br />   客户端完了我们来看服务器?br />   <br />   listener.ora------listener监听器进E的配置文g<br />   <br />   关于listenerq程׃多说了,接受q程Ҏ据库的接入申请ƈ转交loracle的服务器q程。所以如果不是用的q程的连接,listenerq程׃是必需的,同样的如果关闭listenerq程q不会媄响已l存在的数据库连接?br />   <br />   Listener.ora文g的例?br />   <br />   #listener.ora Network <a target="_blank">Configuration</a> File: #E:\oracle\product\10.1.0\Db_2\NETWORK\ADMIN\listener.ora<br />   <br />   # Generated by Oracle configuration tools.<br />   <br />   #下面定义LISTENERq程为哪个实例提供服?br />   <br />   #q里是ORCLQƈ且它对应的ORACLE_HOME和GLOBAL_DBNAME<br />   <br />   #其中GLOBAL_DBNAME不是必需的除非用HOSTNAME做数据库q接<br />   <br />   SID_LIST_LISTENER =<br />   <br />   (SID_LIST =<br />   <br />   (SID_DESC =<br />   <br />   (GLOBAL_DBNAME = boway)<br />   <br />   (ORACLE_HOME = E:\oracle\product\10.1.0\Db_2)<br />   <br />   (SID_NAME = ORCL)<br />   <br />   )<br />   <br />   )<br />   <br />   #监听器的名字Q一台数据库可以有不止一个监听器<br />   <br />   #再向下面是监听器监听的协议,ipQ端口等Q这里用的tcp1521端口Qƈ且#用的是主机名<br />   <br />   LISTENER =<br />   <br />   (DESCRIPTION =<br />   <br />   (ADDRESS = (PROTOCOL = TCP)(HOST = boway)(PORT = 1521))<br />   <br />   )<br />   <br />   上面的例子是一个最单的例子Q但也是最普遍的。一个listenerq程Z?a target="_blank">instance</a>(SID)提供服务?br />   <br />   监听器的操作命o<br />   <br />   $ORACLE_HOME/<a target="_blank">bin</a>/lsnrctl start,其他诸如stop,status{。具体敲完一个lsnrctl后看帮助?br />   <br />   上面说到的三个文仉可以通过囑Ş的配|工h完成配置<br />   <br />   $ORACLE_HOME/netca 向导形式?br />   <br />   $ORACLE_HOME/netmgr<br />   <br />   本h比较习惯netmgr,<br />   <br />   profile 配置的是sqlnet.ora也就是名U解析的方式<br />   <br />   service name 配置的是tnsnames.ora文g<br />   <br />   listeners配置的是listener.ora文gQ即监听器进E?br />   <br />   具体的配|可以尝试一下然后来看一下配|文件?br />   <br />   q样一来Ml构有了,是当你输入sqlplus sys/oracle@orcl的时?br />   <br />   1. 查询sqlnet.ora看看名称的解析方式,发现是TNSNAME<br />   <br />   2. 则查询tnsnames.ora文gQ从里边找orcl的记录,q且扑ֈL名,端口和service_name<br />   <br />   3. 如果listenerq程没有问题的话Q徏立与listenerq程的连接?br />   <br />   4. Ҏ不同的服务器模式如专用服务器模式或者共享服务器模式Qlistener采取接下ȝ动作。默认是专用服务器模式,没有问题的话客户端就q接上了数据库的server process?br />   <br />   5. q时候网l连接已l徏立,listenerq程的历史命也完成了?br /> <br /> #---------------<br />   <br />   几种q接用到的命令Ş?br />   <br />   1.sqlplus / as sysdba q是典型的操作系l认证,不需要listenerq程<br />   <br />   2.sqlplus sys/oracle q种q接方式只能q接本机数据库,同样不需要listenerq程<br />   <br />   3.sqlplus sys/oracle@orcl q种方式需要listenerq程处于可用状态。最普遍的通过|络q接?br />   <br />   以上q接方式使用sys用户或者其他通过密码文g验证的用户都不需要数据库处于可用状态,操作pȝ认证也不需要数据库可用Q普通用户因为是数据库认证,所以数据库必需处于open状态?br />   <br />   然后是<br />   <br />   #-------------<br />   <br />   qx排错可能会用到的<br />   <br />   1.lsnrctl status查看服务器端listenerq程的状?br />   <br />   LSNRCTL> help<br />   <br />   The following operations are available<br />   <br />   An asterisk (*) denotes a modifier or extended command:<br />   <br />   start stop status<br />   <br />   services version reload<br />   <br />   save_config trace change_password<br />   <br />   quit exit set*<br />   <br />   show*<br />   <br />   LSNRCTL> status<br />   <br />   2.tnsping 查看客户端sqlnet.ora和tnsname.ora文g的配|正与否,及对应的服务器的listenerq程的状态?br />   <br />   C:\>tnsping orcl<br />   <br />   TNS Ping Utility for 32-bit Windows: Version 10.1.0.2.0 - Production on 16-8?-<br />   <br />   2005 09:36:08<br />   <br />   Copyright (c) 1997, 2003, Oracle. All rights reserved.<br />   <br />   Used parameter files:<br />   <br />   E:\oracle\product\10.1.0\Db_2\network\admin\sqlnet.ora<br />   <br />   Used TNSNAMES adapter to resolve the alias<br />   <br />   Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)<br />   <br />   (HOST = 127.0.0.1)(PORT = 1521))) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_<br />   <br />   NAME = orcl)))<br />   <br />   OK (20 msec)<br />   <br />   3.<br />   <br />   SQL>show sga 查看instance是否已经启动<br />   <br />   SQL> select open_mode from v$database; 查看数据库是打开q是mount状态?br />   <br />   OPEN_MODE<br />   <br />   ----------<br />   <br />   READ WRITE<br />   <br />   #-----------------<br />   <br />   使用hostname讉K数据库而不是tnsname的例?br />   <br />   使用tnsname讉K数据库是默认的方式,但是也带来点问题Q那是客户端都是需要配|tnsnames.ora文g的。如果你的数据库服务器地址发生改变Q就需要重新编辑客Lq个文g。通过hostname讉K数据库就没有了这个麻烦?br />   <br />   需要修?br />   <br />   服务器端listener.ora<br />   <br />   #监听器的配置文glistener.ora<br />   <br />   #使用host naming则不再需要tnsname.ora文g做本地解?br />   <br />   # listener.ora Network Configuration File: d:\oracle\product\10.1.0\db_1\NETWORK\ADMIN\listener.ora<br />   <br />   # Generated by Oracle configuration tools.<br />   <br />   SID_LIST_LISTENER =<br />   <br />   (SID_LIST =<br />   <br />   (SID_DESC =<br />   <br />   # (SID_NAME = PLSExtProc)<br />   <br />   (SID_NAME = orcl)<br />   <br />   (GLOBAL_DBNAME = boway)<br />   <br />   (ORACLE_HOME = d:\oracle\product\10.1.0\db_1)<br />   <br />   # (PROGRAM = extproc)<br />   <br />   )<br />   <br />   )<br />   <br />   LISTENER =<br />   <br />   (DESCRIPTION_LIST =<br />   <br />   (DESCRIPTION =<br />   <br />   (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))<br />   <br />   )<br />   <br />   (DESCRIPTION =<br />   <br />   (ADDRESS = (PROTOCOL = TCP)(HOST = boway)(PORT = 1521))<br />   <br />   )<br />   <br />   )<br />   <br />   客户端sqlnet.ora 如果认不会使用TNSNAME讉K的话Q可以去掉TNSNAMES<br />   <br />   # sqlnet.ora Network Configuration File: d:\oracle\product\10.1.0\db_1\NETWORK\ADMIN\sqlnet.ora<br />   <br />   # Generated by Oracle configuration tools.<br />   <br />   SQLNET.AUTHENTICATION_SERVICES= (NTS)<br />   <br />   NAMES.DIRECTORY_PATH= (HOSTNAME)<br />   <br />   Tnsnames.ora文g不需要配|,删除也无所谓?br />   <br />   下面是|络和操作系l的配置问题了,怎么栯够解析我的主机名的问题了<br />   <br />   可以通过下面的方式连?br />   <br />   sqlplus sys/oracle@boway<br />   <br />   q样的话Q会q接bowayq台服务器,q且listener来确定你所要连接的service_name?br /> <img src ="http://www.tkk7.com/msmary/aggbug/174464.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/msmary/" target="_blank">谭明</a> 2008-01-10 22:58 <a href="http://www.tkk7.com/msmary/articles/174464.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JasperReports是一个开源的java报表制作引擎http://www.tkk7.com/msmary/articles/174260.html谭明谭明Thu, 10 Jan 2008 05:43:00 GMThttp://www.tkk7.com/msmary/articles/174260.htmlhttp://www.tkk7.com/msmary/comments/174260.htmlhttp://www.tkk7.com/msmary/articles/174260.html#Feedback0http://www.tkk7.com/msmary/comments/commentRss/174260.htmlhttp://www.tkk7.com/msmary/services/trackbacks/174260.htmlJasperReports是一个开源的java报表制作引擎
http://jasperreports.sourceforge.net

iReport?span class="hilite1">JasperReports的一个GUI工具Q用来生?span class="hilite1">JasperReports的jrxml文g?br /> http://ireport.sourceforge.net



首先使用iReport制作报表的模板(我自pv的名词)Q?br />
    q行iReportQ新Z个report?br />     在Title band中输入报表的名称Q好象用pageheader band也可以,目前我还没有弄明?者具体的差别?br />     在column header band中放|一些static textQ做为报表的列标题?br />     在detal band中放入一些textfieldQ显C报表的详细数据?br />     在summary band中放入类g"合计"之类的textfieldQ这个band是显C在最后一行数据的下放?br />     在LastPageFooter band中放入想在最后一|C的信息Q比如说"审阅人签?之类的?br />
q样报表的框架就基本上搭好了Q然后compile一下检查是否有错误Q如果没有错误那么就可以在程序中使用q个报表模板了?br />
JasperReports介绍Q?br />    
    使用JasperReports生成报表是非常简单的Q仅仅用net.sf.jasperreports.engine包中的几个类卛_完成报表的生成、预览、打印、导出等各个功能?br />
1.  net.sf.jasperreports.engine.JasperCompileManagercR?br />     使用q个cȝ几个静态方法即可完成对报表的编译工作(具体参见api文档Q?br />     ~译完成后可以JasperCompileManager有两U处理方式:
       1> q回一个JasperReport对象
       2> ?jrxml文g所在的目录生成一?jasper文g
    q两U方式是q序员自己选择的。不q我比较們֐使用.jasper文gQ毕竟报表的l构不是每天都在改动Q所以每ơ重新编译报表ƈ不是很划?br />
2.  net.sf.jasperreports.engine.JasperFillManagerc?br />     q个cȝ作用是用数据填充报表。它可以使用JasperReport对象也可以用。jasper文g做ؓ报表模板?br />     它同h2中处理方式:
          1> q回一个JsaperPrint对象?br />           2> ?jasper文g所在目录生成一?jrprint文g
    q个cM用net.sf.jasperreports.engine.JRDataSource接口的实现做为数据源。Q何实CJRDataSource的类均可做ؓ数据源?br />     在net.sf.jasperreports.engine.data包中定义了一些数据源Q可Ҏ自己的需要选择。这里我使用的是JRTableModelDataSource做ؓ
    数据源(因ؓ我的报表q要昄在Table中)?br />
3. net.sf.jasperreports.engine.JasperPrintManager和net.sf.jasperreports.engine.JasperExportManager
   者两个类的作用是打印、导出报?br />    他们使用 JasperPrint ?.jrprint文g做ؓ输入?br />    可以Ҏ自己的需要用里面的Ҏ?br />
例:
       import net.sf.jasperreports.engine.*;
       import net.sf.jasperreports.view.*;
       public class CompileReport {
          public static void main(String args[]) {
             try {
                //~译report.jrxmlq在report.jrxml所在的目录中生成report.jasper文g
                JasperCompileManager.compileReportToFile("report.jrxml");
                //填充数据Q这里用的是JREmptyDataSource
                JasperFillManager.fillReportToFile("report.jasper", null, new JREmptyDataSource(50));
                //预览报表Qfalse代表不是使用xml文g?br />                 JasperViewer view = new JasperViewer("reports.jrprint", false);
                view.pack();
                view.setVisible(true);
             }
             catch (Exception e) {
                e.printStackTrace()
             }
          }
       }


谭明 2008-01-10 13:43 发表评论
]]>
oracle 日期函数 http://www.tkk7.com/msmary/articles/168612.html谭明谭明Tue, 18 Dec 2007 15:15:00 GMThttp://www.tkk7.com/msmary/articles/168612.htmlhttp://www.tkk7.com/msmary/comments/168612.htmlhttp://www.tkk7.com/msmary/articles/168612.html#Feedback0http://www.tkk7.com/msmary/comments/commentRss/168612.htmlhttp://www.tkk7.com/msmary/services/trackbacks/168612.html他日所查也?br />   add_months(d,n) 日期d加n个月
  last_day(d) 包含d的月?的最后一天的日期
  new_time(d,a,b) a?区的日期??d在b?区的日期??
  next_day(d,day) 比日期d?Q由day指定的周几的日期
  sysdate 当前的系?日期??
  greatest(d1,d2,...dn) ?出的日期列表中最后的日期
  least(d1,k2,...dn) ?出的日期列表中最早的日期
  to_char(d [,fmt]) 日期d按fmt指定的格??成字W串
  to_date(st [,fmt]) 字符串st按fmt指定的格?成日?Q若fmt忽略Qst要用~省格式
  round(d [,fmt]) 日期d按fmt指定格式舍入到最q的日期
  trunc(d [,fmt]) 日期d按fmt指定格式截断到最q的日期
  to_date 字符串类型{为换日期cd
字符串中的相应位|上的字W?必须W合旉范围的限?

查询Oracle日期格式
----------------------------------


select * from nls_database_parameters;


得到l果如下? 表中NLS_DATE_FORMAT表示日期格式.
PARAMETER VALUE
----------------------------------- -----------------------------------
NLS_LANGUAGE AMERICAN
NLS_TERRITORY AMERICA
NLS_CURRENCY $
NLS_ISO_CURRENCY AMERICA
NLS_NUMERIC_CHARACTERS .,
NLS_CHARACTERSET ZHS16GBK
NLS_CALENDAR GREGORIAN
NLS_DATE_FORMAT DD-MON-RR
NLS_DATE_LANGUAGE AMERICAN
NLS_SORT  BINARY
NLS_TIME_FORMAT HH.MI.SSXFF AM
NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZH:TZM
NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZH:TZM
NLS_DUAL_CURRENCY $
NLS_COMP  BINARY
NLS_NCHAR_CHARACTERSET ZHS16GBK
NLS_RDBMS_VERSION 8.1.7.0.0

或者查询V$NLS_PARAMETERS?
select * from V$NLS_PARAMETERS;
也有cMl果

SQL>select to_date('2004-11-12 12-07-32','yyyy-mm-dd hh24-mi-ss') value from dual;
VALUE
-------------------
2004.11.12 12:07:32

SQL>select to_date('20041015') value from dual;
VALUE
-------------------
2004.10.15 00:00:00

SQL>select to_date('20041315') value from dual;
ERROR 位于W?1 ?
ORA-01861: 文字与格式字W串不匹?


sysdate 当前日期和时?

SQL>select sysdate value from dual;
VALUE
-------------------
2003.11.23 17:09:01


last_day 本月最后一?

SQL>select last_day(sysdate) value from dual;
VALUE
-------------------
2003.11.30 17:08:17


add_months(d,n) 日期d后推n个月

SQL>select add_months(sysdate,2) value from dual;
VALUE
-------------------
2005.01.23 17:10:21


next_day(d,day) 日期d之后的第一周中,指定的那?指定星期的第几天)是什么日?

SQL>select next_day(sysdate,1) value from dual;
VALUE
-------------------
2004.11.28 17:38:55

 


[oracle/plsql]oracle日期处理完全?/p>

日期处理完全?
TO_DATE格式
Day:
dd number 12
dy abbreviated fri
day spelled out friday
ddspth spelled out, ordinal twelfth
Month:
mm number 03
mon abbreviated mar
month spelled out march
Year:
yy two digits 98
yyyy four digits 1998

24时格式下时间范围ؓQ?0:00:00 - 23:59:59....
12时格式下时间范围ؓQ?1:00:00 - 12:59:59 ....
1.
日期和字W{换函数用法(to_date,to_charQ?

2.
select to_char( to_date(222,'J'),'Jsp') from dual

昄Two Hundred Twenty-Two

3.
求某天是星期?
select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day') from dual;
星期一
select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = American') from

dual;
monday
讄日期语言
ALTER SESSION SET NLS_DATE_LANGUAGE='AMERICAN';
也可以这?
TO_DATE ('2002-08-26', 'YYYY-mm-dd', 'NLS_DATE_LANGUAGE = American')

4.
两个日期间的天数
select floor(sysdate - to_date('20020405','yyyymmdd')) from dual;

5. 旉为null的用?
select id, active_date from table1
UNION
select 1, TO_DATE(null) from dual;

注意要用TO_DATE(null)

6.
a_date between to_date('20011201','yyyymmdd') and to_date('20011231','yyyymmdd')
那么12?1号中?2点之后和12?L12点之前是不包含在q个范围之内的?
所以,当时间需要精的时候,觉得to_charq是必要?
7. 日期格式冲突问题
输入的格式要看你安装的ORACLE字符集的cd, 比如: US7ASCII, date格式的类型就? '01-Jan-01'
alter system set NLS_DATE_LANGUAGE = American
alter session set NLS_DATE_LANGUAGE = American
或者在to_date中写
select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = American') from

dual;
注意我这只是举了NLS_DATE_LANGUAGEQ当然还有很多,
可查?
select * from nls_session_parameters
select * from V$NLS_PARAMETERS

8.
select count(*)
from ( select rownum-1 rnum
from all_objects
where rownum <= to_date('2002-02-28','yyyy-mm-dd') - to_date('2002-
02-01','yyyy-mm-dd')+1
)
where to_char( to_date('2002-02-01','yyyy-mm-dd')+rnum-1, 'D' )
not
in ( '1', '7' )

查找2002-02-28?002-02-01间除星期一和七的天?
在前后分别调用DBMS_UTILITY.GET_TIME, 让后结果相?得到的是1/100U? 而不是毫U?.

9.
select months_between(to_date('01-31-1999','MM-DD-YYYY'),
to_date('12-31-1998','MM-DD-YYYY')) "MONTHS" FROM DUAL;
1

select months_between(to_date('02-01-1999','MM-DD-YYYY'),
to_date('12-31-1998','MM-DD-YYYY')) "MONTHS" FROM DUAL;

1.03225806451613
10. Next_day的用?
Next_day(date, day)

Monday-Sunday, for format code DAY
Mon-Sun, for format code DY
1-7, for format code D

11
select to_char(sysdate,'hh:mi:ss') TIME from all_objects
注意Q第一条记录的TIME 与最后一行是一L
可以建立一个函数来处理q个问题
create or replace function sys_date return date is
begin
return sysdate;
end;

select to_char(sys_date,'hh:mi:ss') from all_objects;
12.
获得时?

SELECT EXTRACT(HOUR FROM TIMESTAMP '2001-02-16 2:38:40') from offer
SQL> select sysdate ,to_char(sysdate,'hh') from dual;

SYSDATE TO_CHAR(SYSDATE,'HH')
-------------------- ---------------------
2003-10-13 19:35:21 07

SQL> select sysdate ,to_char(sysdate,'hh24') from dual;

SYSDATE TO_CHAR(SYSDATE,'HH24')
-------------------- -----------------------
2003-10-13 19:35:21 19

获取q月日与此类?
13.
q月日的处理
select older_date,
newer_date,
years,
months,
abs(
trunc(
newer_date-
add_months( older_date,years*12+months )
)
) days
from ( select
trunc(months_between( newer_date, older_date )/12) YEARS,
mod(trunc(months_between( newer_date, older_date )),
12 ) MONTHS,
newer_date,
older_date
from ( select hiredate older_date,
add_months(hiredate,rownum)+rownum newer_date
from emp )
)

14.
处理月䆾天数不定的办?
select to_char(add_months(last_day(sysdate) +1, -2), 'yyyymmdd'),last_day(sysdate) from dual

16.
扑և今年的天?
select add_months(trunc(sysdate,'year'), 12) - trunc(sysdate,'year') from dual

闰年的处理方?
to_char( last_day( to_date('02' || :year,'mmyyyy') ), 'dd' )
如果?8׃是闰q?

17.
yyyy与rrrr的区?
'YYYY99 TO_C
------- ----
yyyy 99 0099
rrrr 99 1999
yyyy 01 0001
rrrr 01 2001

18.不同时区的处?
select to_char( NEW_TIME( sysdate, 'GMT','EST'), 'dd/mm/yyyy hh:mi:ss') ,sysdate
from dual;

19.
5U钟一个间?
Select TO_DATE(FLOOR(TO_CHAR(sysdate,'SSSSS')/300) * 300,'SSSSS') ,TO_CHAR(sysdate,'SSSSS')
from dual

2002-11-1 9:55:00 35786
SSSSS表示5位秒?

20.
一q的W几?
select TO_CHAR(SYSDATE,'DDD'),sysdate from dual
310 2002-11-6 10:03:51

21.计算时,?U?毫秒
select
Days,
A,
TRUNC(A*24) Hours,
TRUNC(A*24*60 - 60*TRUNC(A*24)) Minutes,
TRUNC(A*24*60*60 - 60*TRUNC(A*24*60)) Seconds,
TRUNC(A*24*60*60*100 - 100*TRUNC(A*24*60*60)) mSeconds
from
(
select
trunc(sysdate) Days,
sysdate - trunc(sysdate) A
from dual
)


select * from tabname
order by decode(mode,'FIFO',1,-1)*to_char(rq,'yyyymmddhh24miss');

//
floor((date2-date1) /365) 作ؓq?
floor((date2-date1, 365) /30) 作ؓ?
mod(mod(date2-date1, 365), 30)作ؓ?
23.next_day函数
next_day(sysdate,6)是从当前开始下一个星期五。后面的数字是从星期日开始算赗?



谭明 2007-12-18 23:15 发表评论
]]>
Oracle开发工具介l?/title><link>http://www.tkk7.com/msmary/articles/168313.html</link><dc:creator>谭明</dc:creator><author>谭明</author><pubDate>Mon, 17 Dec 2007 12:18:00 GMT</pubDate><guid>http://www.tkk7.com/msmary/articles/168313.html</guid><wfw:comment>http://www.tkk7.com/msmary/comments/168313.html</wfw:comment><comments>http://www.tkk7.com/msmary/articles/168313.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/msmary/comments/commentRss/168313.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/msmary/services/trackbacks/168313.html</trackback:ping><description><![CDATA[Oracle工具家族手册<br />   <img src="http://oracle.chinaitlab.com/imgfiles/2002.12.13.12.5.35.tool.gif" alt="" /> <br />   Oracle Designer<br />   一个基于共享信息仓储的建模和生成工P设计和徏立应用与数椐库定义的高效开发环境?br />   Oracle Developer<br />   一个用于徏立企业客户/服务器和Web数椐库应用的、易于用的集成式快速应用开发环QRADQ?br />   Oracle JDeveloper<br />   在个利用java来徏立基于部件的数椐库应用的最L产力的开发环境?br />   Oracle Reporls<br />   一个用于发布和报告的解x案,部门可以利用它在其企业内部网或Internet上动态地发布信息?br />   |络计算工具<br />   Oracle?的开发工兯Z提供最L产力的数椐库应用开发环境。这些应用可以部|在可׾~的专业理服务器上Qƈ能通过M一台运行有标准Interner览器的PC或NC来访问?br />   高生产力<br />   Oracle开发工具利用基于模型的Ҏ设计和实现实际应用,多用戗共享式的Oracle信息仓储Z务、应用模型和规则提供了一个中央存储场地。应用再Ҏq些模型自动生成Q避免了应用彩不兼容的工具和语言通过手工来编Ӟ造成可重用性低Q低质量、高l护的系l。彩业务模型生成的应用,易维护、易调试、高质量Qƈ且可以分布在客户/服务器用|络计算QInterner computingQ应用方式下?br />   <br />   Z服务器的部v<br />   客户/服务器体pȝ构要求应用安装在W一个卓面机上,q得安装和理成本大大的增加。而且Q对于网l具有甚高的要求Q通过q域|(WANQ或Internet来用应用不现实?br />   <br />   利用Oracle开发工h构造的数椐库应用可以部|在伸羃性很强的专业理应用服务器上Q采用基于服务器的部|方式,在服务器上集中管理应用ƈ按需应用下载到瘦客h上,从而上述问题得以圆满解决Q无需理员管理,从而大大降低了成本。Q何运行有标准 Internet览器的PC或NC都可以访问这些应用,甚至通过非常H的|络带宽也能利q行?br />   <br />   充分利用Oracleq_<br />   Oracle工具采用了与数椐库相同的语言Q它允许对应用进行高效分割和高度Q利用Oracle工具构徏的应用可以自动且充分地利用网l带宽,能充分利用Oracle企业U^台各U特性,h较强的可伸羃性、高可靠性?br />   <br />   投资保护<br />   在进入新一代的计算机环境中手工建立的应用,W一行代码都必须重复开发,以便能从C代计环境中完全受益。但使用Oracle的工具对应用q行建模Q部门将真正拥挑战性技术?br />   <br />   决策支持<br />   Oracle的决{支持品家族全面致力于企业决策支持的需求;从生产报告、特D查询,直到高层分析Q以协同工作的方式可共同创徏一个无~的分析和报告环境,从而对手问题l予快速解{。这U集成式解决Ҏh于一般的易用性和无以伦比的性能Q而花费和部v斚w的成本却被大大的降低?br />   <br />   该品家族包括:<br />   <br />    Oracle Reports---企业生报告工具QIS开发者可用它来徏立和开发复杂的高质量报告?br />   <br />    Oracle Discoverer---一个获得了特别奖的查询和分析工P用于讉K数据仓库Q数据集市和   正在动作的数据库?br />   <br />    Oracle Express---世界上最先进的、面向联机分析处理(OLQPQ的计算机引擎和多维数据高速缓存?br />   <br />   企业U工?br />   <br />   Oracle已经为办公室前台和后台提供了丰富而倍受Ƣ迎的应用,q些应用覆盖了制造业、h力资源、销售部门办公自动化Q以及连锁店理。这U规模和复杂度的应用均需企业U工兗这也正是用Oracle工具家族全面开发Oracle应用的原由所在。Oracle借助其工h?Qؓ企业提供q移到客h务器直到web方式Q因此扔有成癄至上行用L客户均可以大大降低企业应用的实现、维护和更新成本及其复杂性?br />   <br />   集用h有需求于一?br />   ZOracle的套件战略,我们正在推出集用h有需求于一体的解决Ҏ。用户将能获?#8220;一ơ到?#8221;的购买方式的所有益处?br />   <br />   所有品均能保证在一起顺利运用。文件亦能交叉参考的机制Q能提供不同产品间的完全兼容?br />   <br />   Oracle Enterprise Developer Suite(Oracle企业开发套?是一基于模型来q行应用开发的产品套g。这一获奖产品可全面用于徏立具有高度׾~性和高可靠性的企业U数据库客户/服务器应用的web应用。对Z部g的开发Oracle JDeveloper Suite可向你提供徏?层和3层java数据库应用和部g的所有之需?br />   <br />   Oracle领导市场新潮?br />   Oracle是当今唯一一个提供适于整个pȝ生命周期的集成式企业开发工具集的厂商。Oracle工具所拥有的生产力和可伸羃能力已经D了其在市Z的领导地位。Oracle拥有部v客户机应用、保护当前体pȝ构投资的独一无二的能力,南昌同时Q?它却降低于Interner计算环境的成本,增加了对Internet计算环境可访问性的利益。Oracle工具已经帮助了客户从字符pȝ转移到客?服务器架构,而今天已l{UdInternet计算环境之中。Oracle工具必将伴你走向末来?br />   <br />   Oracle Developer/2000 <br />   Oracle Developer ?br />   <br />   Oracle Developer/2000可以说是当今最好的开发工P它以其全中文界面和其易于使用的集成式快速应用开发环境而倍受开发h员的Ƣ迎?br />   Oracle Developer ???一 ??????集, ?????开 ?z??????需 求。Oracle Developer ????U??????~?需 求, l?????????需 求, ??????????性? ?a 之,Oracle Developer ????了Internet ?????U?U??望?br />   <br />   ???br />   <br />   Oracle Developer ?U???一 ????????合, ?????根{??告??表??询???????q?E?q?????????????力, ??????????????????需 ~?????码?br />   <br />   Oracle Developer ?q???????开 ?RAD) 技 术?????技 术, ?????????习, ??l?一 ??戗??????????????p?l?构, ??? ???和Web 开 ???????????????准?br />   <br />   l?l??开 ???????????????????????????|?????最 ????力, 开 ???????用Oracle Developer ???????????????的Oracle Developer ?用?br />   <br />   ??~??br />   <br />   Oracle Developer ???????????0 ?000 ??PMB 到GB U??据, ?{?????杂OLTP ??????~??时Oracle Developer ?z?????p?l??q??持Oracle ??????W???????器, 如TP q?????器, q?????????U????U????~?性?br />   <br />   开 ??br />   <br />   在Oracle Developer ???????????????????在OCX/ActiveX ?ӞOLE( ??q????? ?及DDE( ?????? ??的??q?开 放API ??U??????????持,Oracle Developer ?开 ??????z?????用, q??????????q?????中?br />   <br />   Oracle Developer ???????最 ?的Oracle ????成, ??q?????所 ???????括Oracle Developer Rdb、Microsoft SQL Server、Informix、Sybase 和DB/2 ????问???????????q????????????qOracle Developer API 和Oracle Gateways ?现?br />   <br />   Oracle Developer ???????????|???q?3 U??a ?上, ???????力?l????????案, ????????根{??告????换????l?l????????????U??用?对UNICODE ????????????一 ?q???C?????????a?br />   <br />   ?q????_ 开 ???????????????W???????????口?q????????????|????兗????兗??~?????????兗?q?U?????????U??兗?br />   <br />   Web ??br />   <br />   ?天, l?l???所 需 ??????用Web ????????力, ?????????? ????????资?br />   <br />   Oracle Developer Server ???q?一 ?战, ????q??一 ???技 ??????????? ???和Web ??处。Oracle Developer Server ?用Java ?????????面, ??q???了Oracle Developer ???????~??????????????????????互?l?果, ????q??一 ??处, ????一 ??q?行Java ??的Web ????????上, ?? ?????????????????q?行, q???????????????q???????????需 求?br />   <br />   ?q?一 ??是, 开 ?????? <img src ="http://www.tkk7.com/msmary/aggbug/168313.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/msmary/" target="_blank">谭明</a> 2007-12-17 20:18 <a href="http://www.tkk7.com/msmary/articles/168313.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>误删数据库文件的解决之道http://www.tkk7.com/msmary/articles/167990.html谭明谭明Sat, 15 Dec 2007 11:26:00 GMThttp://www.tkk7.com/msmary/articles/167990.htmlhttp://www.tkk7.com/msmary/comments/167990.htmlhttp://www.tkk7.com/msmary/articles/167990.html#Feedback0http://www.tkk7.com/msmary/comments/commentRss/167990.htmlhttp://www.tkk7.com/msmary/services/trackbacks/167990.html ORA-01219: database not open: queries allowed on fixed tables/views only
查了一下资?(使用了如下段Ҏ)
SQL> select * from all_users;
select * from all_users
*
ERROR at line 1:
ORA-01219: database not open: queries allowed on fixed
tables/views only
SQL> select status from v$instance;
STATUS
------------
MOUNTED
SQL>

To open the database for normal access, we can alter the database again.

SQL> alter database open;
Database altered.

The shutdown proccess is the simply opposite of the startup.

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
q行 SQL> alter database open;
ERROR at line 1:
ORA-01157: cannot identify/lock data file 6 - see DBWR trace file
ORA-01110: data file 6: 'E:\SALES_DATA01.DBF'
依次使用
alter   database   datafiel   'E:\SALES_DATA01.DBF'   offline   drop;
alter   database   datafiel   'E:\SALES_DATA02.DBF'   offline   drop;
{方法把数据文g全部脱机删除,再运行SQL>alter database open;可以了
 


谭明 2007-12-15 19:26 发表评论
]]>
վ֩ģ壺 ˾Ʒۺں| ŮƷƵ| 츾ëXXXX| þþƷ㽶| ޸mv| Ļav| ˾ҹƵ| ձѸ| ˻ɫַ| ˬִ̼ëƬ| ޾ƷWWWþþþþ | ѴƬ߹ۿyw| ձ˳ɻҳ߹ۿƵ | Ƶ| 99ƷƵ߹ۿ| ձѲv| ߹ۿĻ| þþƷһ| ߹ۿAVÿո| ˳Ƶ߹ۿ| þþƷѵӰ| 18Ƶѹۿ| պþ| ששר2023| 99Ƶѹۿ| պѾƷƵ| ɫһëƬ޻Ƭȫ| 999þþѾƷ| aëƬѧѹۿ| av뾫ƷϼӰӰԺ| 2017| һѿ| 91ѹۿվ| þþþþ޾Ʒ| ޴רӰԺ| ĻһӰԺַ| 99Ʒѹۿ| ޹Ʒպ| ˳Ƶۿ| ߹ۿ| AëƬ|