2005年05月07日

 /*————————————————————————

作者:翁彦 

时间:2004-3-9

欢迎转载,请保留作者信息

/*—————————————————————————————————–

(3)   Break命令

利用Break你可以打印出报表需要的一些内容,如小计,重复的列值不显示,或者每个分组插入一个空行等等。

清除break设置,clear breaks

语法:

BREAK

 —–

 

 Specifies where and how to make format changes to a report.

 

 BRE[AK] [ON report_element [action [action]]] …

 

 where report_element has the following syntax:

     {column | expression | ROW | REPORT}

 

 and where action has the following syntax:

[SKI[P] n | [SKI[P]] PAGE] [NODUP[LICATES] | DUP[LICATES]]

说明如下:

sql>break on deptno

得到的结果如图4

4

通过对某个列设置break命令,我们去掉了重复显示deptno的值。请仔细对比一下没有break的情况。这种用法称为break column的用法。BREAK命令中的列应该要出现在SQL语句的order by中,如果order by中有多个列,也有多个列的break用法。如图5

Break参数的说明

¨         Skip[n],在每个分组值出现前,自动插入n个空行

¨         Skip page, 在每个分组值出现前,自动换页

¨         BREAK ON ROW SKIP[n],每一行后面插入n个空行。

¨         Nodup重复的显示空,dup重复的也显示。

BREAK好比定义了一个事件,当值发生了变化后,可以对查询的结果执行一个特定的操作。BREAKCOMPUTE命令一起用,就可以产生小计等报表效果。

5

 

(4)  COMPUTE命令

在结果的最后显示一行统计行。如果有多个COMPUTE,那么只有最后一个COMPUTE才起作用。Clear computes删除所有设定的compute

语法:

COMPUTE

 ——-

 

 Calculates and prints summary lines, using various standard

 computations, on subsets of selected rows. It also lists all

 COMPUTE definitions.

 

 COMP[UTE] [function [LAB[EL] text] …

   OF {expr|column|alias} …

   ON {expr|column|alias|REPORT|ROW} …]

 

COMPUTEBREAK一起使用的。没有BREAK语句的COMPUTE没有任何效果。一般的用法如下:

BREAK ON break_column

COMPUTE function LABEL label_name OF column column column

… ON break_column

COMPUTE执行的计算操作主要有:

SUM


Computes the sum of the values in the column.

MINIMUM


Computes the minimum value in the column.

MAXIMUM


Computes the maximum value in the column.

AVG


Computes the average of the values in the column.

STD


Computes the standard deviation of the values in the column.

VARIANCE


Computes the variance of the values in the column.

COUNT


Computes the number of non-null values in the column.

NUMBER


Computes the number of rows in the column.

下面是一个COMPUTE计算的例子。如图6

6

COMPUTE参数的说明

¨             LABEL为计算指定一个名称。如COMPUTE SUM LABEL ‘TOTAL’ OF SAL ON JOB,那么在小计这一行,会显示TOTAL,而不是缺省的sum

不需要打印任何标签,就使用DUMMY。如图7dummy的使用在sql*plus报表制作上还是很有用的。

图7

未完待续。。。。。

利用Break你可以打印出报表需要的一些内容,如小计,重复的列值不显示,或者每个分组插入一个空行等等。

清除break设置,clear breaks

语法:

BREAK

 —–

 

 Specifies where and how to make format changes to a report.

 

 BRE[AK] [ON report_element [action [action]]] …

 

 where report_element has the following syntax:

     {column | expression | ROW | REPORT}

 

 and where action has the following syntax:

[SKI[P] n | [SKI[P]] PAGE] [NODUP[LICATES] | DUP[LICATES]]

说明如下:

sql>break on deptno

得到的结果如图4

4

通过对某个列设置break命令,我们去掉了重复显示deptno的值。请仔细对比一下没有break的情况。这种用法称为break column的用法。BREAK命令中的列应该要出现在SQL语句的order by中,如果order by中有多个列,也有多个列的break用法。如图5

Break参数的说明

¨         Skip[n],在每个分组值出现前,自动插入n个空行

¨         Skip page, 在每个分组值出现前,自动换页

¨         BREAK ON ROW SKIP[n],每一行后面插入n个空行。

¨         Nodup重复的显示空,dup重复的也显示。

BREAK好比定义了一个事件,当值发生了变化后,可以对查询的结果执行一个特定的操作。BREAKCOMPUTE命令一起用,就可以产生小计等报表效果。

5

 

(4)  COMPUTE命令

在结果的最后显示一行统计行。如果有多个COMPUTE,那么只有最后一个COMPUTE才起作用。Clear computes删除所有设定的compute

语法:

COMPUTE

 ——-

 

 Calculates and prints summary lines, using various standard

 computations, on subsets of selected rows. It also lists all

 COMPUTE definitions.

 

 COMP[UTE] [function [LAB[EL] text] …

   OF {expr|column|alias} …

   ON {expr|column|alias|REPORT|ROW} …]

 

COMPUTEBREAK一起使用的。没有BREAK语句的COMPUTE没有任何效果。一般的用法如下:

BREAK ON break_column

COMPUTE function LABEL label_name OF column column column

… ON break_column

COMPUTE执行的计算操作主要有:

SUM


Computes the sum of the values in the column.

MINIMUM


Computes the minimum value in the column.

MAXIMUM


Computes the maximum value in the column.

AVG


Computes the average of the values in the column.

STD


Computes the standard deviation of the values in the column.

VARIANCE


Computes the variance of the values in the column.

COUNT


Computes the number of non-null values in the column.

NUMBER


Computes the number of rows in the column.

下面是一个COMPUTE计算的例子。如图6

6

COMPUTE参数的说明

¨             LABEL为计算指定一个名称。如COMPUTE SUM LABEL ‘TOTAL’ OF SAL ON JOB,那么在小计这一行,会显示TOTAL,而不是缺省的sum

不需要打印任何标签,就使用DUMMY。如图7dummy的使用在sql*plus报表制作上还是很有用的。

图7

未完待续。。。。。


作者Blog:http://blog.csdn.net/enhydraboy/

 /*欢迎转载,请保留这部分信息

/*翁彦      2004-1-15

/*————————————————————————————

报表制作命令

报表制作命令是最重要的SQL*PLUS命令,也是DBA经常用到的。下面,就让我简单地说明一下。

(1)    TTITLE命令

放置一个报表的标题。

语法:

TTITLE

——

 

Places and formats a title at the top of each report page.

Enter TTITLE with no clause to list its current definition.

 

The old form of TTITLE is used if only a single word or

a string in quotes follows the TTITLE command.

 

TTI[TLE] [printspec [text|variable] …] | [ON|OFF]

 

where printspec is one or more of the following clauses:

 

    COL n          LE[FT]        BOLD

    S[KIP] [n]     CE[NTER]      FORMAT text

TAB n          R[IGHT]

主要参数的说明:

¨         报表标题的显示的位置,有LEFT,CENTER决定

¨         还可以使用用户的变量(内容有系统来维护),如SQL.PNO页号, SQL.LNO行号等等

¨         COL[N] 就是在第几个字符位置开始显示标题。

 

(2)    COLUMN命令

这个命令主要用途,是规范查询的结果的输出格式。输出格式包括了数字也可以指定显示的宽度。COLUMN设置后,一直保持有效。除非,你重新使用COLUMN设置该列或者用COLUMN <column name> CLEAR

语法:

COLUMN

——

 

Specifies display attributes for a given column, such as:

    - column heading text

    - column heading alignment

    - NUMBER data format

    - column data wrapping

 

Also lists the current display attributes for a single column

or all columns.

 

COL[UMN] [{column | expr} [option...] ]

 

where option is one of the following clauses:

    ALI[AS] alias

    CLE[AR]

    ENTMAP {ON|OFF}

    FOLD_A[FTER]

    FOLD_B[EFORE]

    FOR[MAT] format

    HEA[DING] text

    JUS[TIFY] {L[EFT] | C[ENTER] | C[ENTRE] | R[IGHT]}

    LIKE {expr | alias}

    NEWL[INE]

    NEW_V[ALUE] variable

    NOPRI[NT] | PRI[NT]

    NUL[L] text

    OLD_V[ALUE] variable

    ON|OFF

WRA[PPED] | WOR[D_WRAPPED] | TRU[NCATED]

 

下面就举例说明:

SQL> COLUMN SAL ALIAS Salary FORMAT $99,990.90

我们指定了SAL这个列的一个别名和数字的MONEY显示格式,下面的显示结果显示了设置后的效果。


1

关于FORMAT的提示:

¨         文字各式的设置,用A[n]来表示,n表示显示的长度。那么这个文字列的显示长度就按照N个字符的宽度,如果内容>N,就会自动转行。如图2

¨         日期格式,sqlplus缺省显示的日期格式按照nls_lang设置来显示。缺省是A9。那么,你可以通过设置数据库启动参数,或者sqlplus的环境变量,或者用alter session命令来规范日期的显示;也可以通过to_char来转换显示内容;也可以用column命令来指定显示长度。

¨         数字格式,说明一些常用的符号。如图3

9             代表一个数字字符

0                           在指定的位置显示前导0或后置0

$             美元货币符号

B             显示一个空,如果是0的话

MI            显示负号,如果小于0的话

,                     显示千分位分隔符

.                     显示小数点

G             ,一样,显示千分位分组符号

L              显示本地区域的货币符号

2

 

3

关于其他参数的提示

Justify主要规定了列显示内容的对齐方式。Left ,right,center

Like指定该列的显示参照某个其他列的显示方法。如:COLUMN COMM LIKE SAL

NEW LINE 换行显示这个列的内容

NULL text  如果是null,显示一个字符串,相当于ISNULL函数。

 

未完待续。。。。


作者Blog:http://blog.csdn.net/enhydraboy/

熟悉oracle的朋友都知道,SQL PLUS是一个重要的和ORACLE打交道的工具。SQL PLUS本身有很多命令,可以帮助我们做很多事情,包括产生一些规格化的报表、提供人机交互等等。下面,我就简单地说明一下,供大家参考:

帮助命令

   HELP可以帮助我们,查找SQL PLUS每个命令的用法

举例:

SQL> help accept

 

 ACCEPT

 ——

 

 Reads a line of input and stores it in a given user variable.

 

 ACC[EPT] variable [NUM[BER] | CHAR | DATE] [FOR[MAT] format]

   [DEF[AULT] default] [PROMPT text | NOPR[OMPT]] [HIDE]

 

  SQLPLUS的人机交互命令

SQLPLUS里可以接受用户的输入,最常用的命令有:

(1)   ACCEPT

接受整行的数据。

语法:ACC[EPT] variable [NUM[BER]|CHAR|DATE] [FOR[MAT] format]
    [DEF[AULT] default] [PROMPT text|NOPR[OMPT]] [HIDE]

举例说明:

角本1.sql,查出工资大于输入金额的雇员。

SET FEEDBACK OFF

SET PAUSE OFF

ACCEPT sal NUMBER PROMPT ‘Please input salary(weekly): ‘

select employee_id,last_name,first_name,salary from employee

where salary>&sal;

SQLPLUS 中运行

SQL> @c:\1.sql

Please input salary(weekly): 1000

old   2: where salary>&sal

new   2: where salary>      1000

 

EMPLOYEE_ID LAST_NAME    FIRST_NAME          SALARY

—————– ——————- —————————– ———-

       7499 ALLEN           KEVIN                 1600

       7505 DOYLE           JEAN                  2850

       7506 DENNIS          LYNN                  2750

       7507 BAKER           LESLIE                2200

       7521 WARD            CYNTHIA               1250

       7555 PETERS          DANIEL                1250

       7557 SHAW            KAREN                 1250

       7560 DUNCAN          SARAH                 1250

       7564 LANGE           GREGORY               1250

       7566 JONES           TERRY                 2975

7569 ALBERTS         CHRIS                 3000

注:

ACCEPT接受一行的输入,并且把输入的数据根据指定按照指定的类型存放到变量(如不存在,自动创建一个)中。

FOMRAT用于制定输入的数据格式,如数字可以指定’999.99’,字符可以指定长度’A10’

如果类型是CHAR,长度最大240

 

(2)   PROMPT

输出提示信息。

语法:PRO[MPT] [text]

举例:

SQL> PROMPT Hello,world

Hello,world

(3)   PAUSE

输出一行信息,并等待用户输入回车。

语法:PAU[SE] [text]

举例:

SQL> PAUSE Please press [RETURN]

Please press [RETURN]

 

SQL>

 

编辑命令

通过SQL PLUS发送的最后一次SQL语句都会保存在SQL PLUS的一个数据缓冲区内,而SQLPLUS命令不包括在内可以通过编辑命令进行编辑。

(1)   /

重新执行一下sql 语句。

(2)   APPEND

在命令缓冲区内,追加字符。

举例:

SQL> select * from tab;

….

SQL> A  WHERE tabtype=’VIEW’

  1* select * from tabwhere tabtype=’VIEW’

SQL> /

 

TNAME                          TABTYPE  CLUSTERID

—————————— ——- ———-

PLSQL_PROFILER_GRAND_TOTAL     VIEW

PLSQL_PROFILER_LINES_CROSS_RUN VIEW

PLSQL_PROFILER_NOTEXEC_LINES   VIEW

PLSQL_PROFILER_UNITS_CROSS_RUN VIEW

SALES                          VIEW

 

(3)   LIST;

列出缓冲区内的内容,list可以列出某行的内容,;则是所有的。

举例:

SQL> ;

  1  select * from tab WHERE tabtype=’VIEW’

  2* ORDER BY tname

SQL> l 2

  2* ORDER BY tname

(4)   INPUT

增加一行内容

举例:

SQL> i  ORDER BY tname

SQL> l

  1  select * from tab WHERE tabtype=’VIEW’

  2* ORDER BY tname

(5)   CHANGE

把当前行的第一个艘索到的内容替换新的内容,

语法:C[HANGE] sepchar old [sepchar [new[sepchar]]]

举例:

SQL> l

  1* select * from employee where salary>1000 and salary<2000

SQL> c/salary/sal

  1* select * from employee where sal>1000 and salary<2000

注意,当缓冲区有两行的时候,用C替换的是最后一行里的内容。

(6)   Edit

在指定的文本编辑器里,编辑缓冲区的内容。Windows上,缺省是NOTEPAD

(7)   SPOOL

把输出结果,指定到一个文件中,有点像DOS命令下的>

SPO[OL] [file_name[.ext] | OFF | OUT]

SQL> spool c:\1.txt

SQL> select * from tab;

SQL> spool off

 

执行命令

(1)   @

载入角本,运行。

举例:

SQL>@C:\1.SQL

(2)   EXECUTE

运行PL/SQL过程和程序包。

 

待续。

2005年04月18日

看了sun网站上的一篇技术文章"Painting in AWT and Swing",感觉解决了许多长时间来困扰的问题,而且文章里的一些推荐非常不错,虽然有些地方还不是很明白。

翻译了一下关键文字,如下:

 

重量级组件(heavyweight):

JDK1.0中的原始的AWT API只拥有“重量级”组件,即有属于自己的不透明的原生(native

窗口,这使得AWT很大程度上依赖于原生平台的paint子系统,这种形式注重了比如damage

detection, clip calculation, z-ordering等细节。

轻量级组件(lightweight):

JDK1.1中的“轻量级”组件,即它重用了与它最相近的重量级组件的原生窗口,所以AWT需要为轻量级组件实现一些共享的java代码来完成paint的过程。

 

系统触发paint

    系统请求组件绘制其内容,经常发生在:

a)         组件第一次显示在屏幕上的时候

b)        组件被重新指定大小的时候

c)        组件被损坏需要重新修复(比如此组件部分被遮掩上)

 应用程序触发paint  

    因为组件内部状态的改变,自己决定是否要更新内容。

    系统请求组件绘制其内容,经常发生在:

a)         组件第一次显示在屏幕上的时候

b)        组件被重新指定大小的时候

c)        组件被损坏需要重新修复(比如此组件部分被遮掩上)

 

Painting in AWT

AWT的重量级组件在系统触发paint,应用程序触发paint上有些细微的差别。

1  系统触发paint

a)         AWT决定要被重画的是部分还是全部组件

b)        AWT使用事件调度线程(event dispatching thread)来触发paint方法

2  应用程序触发paint:

a)         当内部状态有变化时,由程序来决定要被重画的是部分还是全部组件

b)        程序触发repaint方法,它向AWT注册了一个异步请求,表明此组件需要重画

c)  AWT使用事件调度线程(event dispatching thread)来触发update方法

d)  如果程序没有重载update方法的话,那么默认动作是先擦除组件背景,然后调用paint方法(必须是重量级组件)

问:为什么有了paint方法还要有update方法?

答:程序调用paint方法意味着组件区域已经被“损坏”需要全部重画;但是update“钩子”能使程序作进一步(incremental)painting个人理解:重载update方法可以达到一些特殊的功能,比如说不重画全部背景,只重画部分待刷新的东西,例程:http://java.sun.com/products/jfc/tsc/articles/painting/src/UpdateDemo.java

    轻量级组件和重量级组件的paint机制仍有细微的不同。当重量级父类组件被告知要重画窗口的时候,它必须要将此paint调用翻译成轻量级子类组件的paint调用,这个过程由java.awt.Containerpaint方法实现,所以所有的Container类的子类(无论重量级轻量级)必须在覆盖的paint方法中写入:super.paint(g); 否则Container上的轻量级组件不会被显示。并且,Container的重量级子类在使用update方法作进一步painting的时候,一定要保证容器上的轻量级组件被循环重画。

轻量级组件的系统触发paint

1  当触发请求由原生系统生成的时候(如与轻量级对应的重量级组件第一次显示的时候),相当于直接调用paint方法

2  当触发请求由轻量级组件生成的时候(如轻量级组件重新调整大小),那么会先调用update方法,当然默认还会调用paint方法

重量级组件背景是不透明的;因为轻量级组件的paint是从后到前的,所以如果保留一些像素不画的话,下面的组件就不会被遮住,于是有了透明的效果。这也是为什么轻量级组件的默认update方法并没有擦除背景。例程:http://java.sun.com/products/jfc/tsc/articles/painting/src/LightweightDemo.java

AWT Painting Guidelines

1  所有的用户paint代码都应该书写在组件的paint方法里;

2  重画要调用repaint方法,而不能直接调用paint方法;

3  在有一些复杂组件的时候,repaint方法应该添加一些参数决定哪一部分区域需要被重画,而不是完全重画,这样会提高效率;

4  Repaint方法会先调用update方法,然后才是paint方法;所以重量级组件可以覆盖update方法来实现进一步的绘制,而轻量级组件不支持进一步的绘制;

5  Java.awt.Containter的子类在覆盖paint方法的时候,必须要调用super.paint()来保证容器上组件的绘制;

6  简化绘制操作:只重画一部分区域;只重画一部分子组件(只适用于轻量级)。

 

 

Painting in Swing

Swing组件和AWT组件一样支持callback机制,拥有repaint方法,而且swing组件还内置了双缓冲机制和附加结构,如边界和UI delegate,还提供了RepaintManager API

Swing组件默认是不透明的

不透明:会形成屏幕垃圾

透明:不会形成屏幕垃圾,降低效率

Swing组件的paint方法实际上是调用三个独立的方法,即:

1  protected void paintComponent(Graphics g)

2  protected void paintBorder(Graphics g)

3  protected void paintChildren(Graphics g) 

swing组件应该重载paintComponent方法而不是paint方法,而且尽量不要重载paintBorderpaintComponents方法(虽然这是允许的)。

UI delegates标准swing组件实现的外观(look-and-feel

UI delegates相关联的标准组件的paint遵循下列步骤:

1  paint方法调用paintComponent方法

2  如果ui属性非空,paintComponent方法调用ui.update方法

3  如果组件opaque属性为真,即不透明的话,ui.update方法会使用背景色填充背景,然后调用ui.paint方法

4  ui.paint方法绘制组件内容

所以在重载的paintComponent方法中要调用super.paintComponent()方法,否则在不透明的前提下,组件必须负责填充背景。

Swingpaint调用的两种途径:

A.      由第一个重量级的祖先(ancestor)调用paint请求(通常是JFrame, JDialog, JWindow, JApplet

1  事件调度线程调用paint方法

2  Container.paint方法默认操作是循环调用所有轻量级子类(descendents)的paint方法

3  当绘制到第一个swing组件的时候,JComponent.paint方法的默认操作如下:

1.         如果组件实现了双缓冲的话,自动在内存中分配一个Graphics对象的副本;

2.         调用paintComponent方法(如果双缓冲的话就作用在后台(offscreengraphics对象)

3.         调用paintBorder方法(如果双缓冲的话就作用在后台(offscreengraphics对象)

4.         调用paintChildren方法(如果双缓冲的话就作用在后台(offscreengraphics对象)

5.         如果组件实现了双缓冲的话,将后台graphics复制到前台来

B.      javax.swing.JComponent的扩展的repaint方法产生的paint请求:

(详见原文) 主要是调用paintImmediately方法,对于swing组件来说,决定不会调用update方法。

Swing Painting Guidelines

1  swing组件中,paint方法通常是被系统或者应用程序触发,update方法决不会被swing组件触发;

2  程序要调用repaint方法来实现paint功能,而不能直接调用paint方法;

3  如果组件有复杂输出的话,应该使用带参数的repaint方法,即只重画需要重画的矩形区域,否则就要重新绘制全部组件;

4  Swing组件的paint方法依次调用下列函数:

       1.       paintComponent()

       2.       paintBorder()

       3.       paintChildren()

swing组件的子类如果想实现绘制代码的话,需要重载paintComponent方法,而不是paint方法;

5  swing推荐两个属性用来提高绘制效率:

       1.       opaque:组件是否绘制所有像素点,即透明与否,默认不透明

       2.       optimizedDrawingEnabled:是否组件的子类有交迭,只重画交迭部分提高效率,默认true,有交迭;

6  如果swing组件的opaque属性设为真,即不透明的话,那么就会绘制所有的像素点(包括使用paintComponent方法清除背景),否则会保留屏幕垃圾(透明);

7  opaqueoptimizedDrawingEnabled的任何一个属性设成false,会增加绘制的处理过程;

8  Swing组件的拥有UI delegates的子类(包括JPanel),应该在他们的paintComponent()方法里调用super.paintComponent()方法,因为UI delegates要负责重画背景的工作,还要注意第五点;

9  Swing组件支持双缓冲机制,可以靠JComponent.doubleBuffered属性来设置,默认为true

10 强烈推荐将swing的所有组件设成双缓冲;

11 有着复杂输出的组件应该合理使用要重绘的区域来减少有覆盖时候的绘制操作。

 

 

 

 

 

 

101. 如何搜索出前N条记录?

SELECT * FROM empLOYEE WHERE ROWNUM < n
ORDER BY empno;

  102. 如何知道机器上的Oracle支持多少并发用户数?

  SQL>conn internal ;
  SQL>show parameter processes ;

  103. db_block_size可以修改吗?

  一般不可以﹐不建议这样做的。

  104. 如何统计两个表的记录总数?

  select (select count(id) from aa)+(select count(id) from bb) 总数 from dual;

  105. 怎样用Sql语句实现查找一列中第N大值?

select * from
(select t.*,dense_rank() over (order by sal) rank from employee)
where rank = N;

        106. 如何在给现有的日期加上2年?

  select add_months(sysdate,24) from dual;

  107. USED_UBLK为负值表示什么意思?

  It is "harmless".

  108. Connect string是指什么?

  应该是tnsnames.ora中的服务名后面的内容

  109. 怎样扩大REDO LOG的大小?

  建立一个临时的redolog组,然后切换日志,删除以前的日志,建立新的日志。

  110. tablespace 是否不能大于4G?

  没有限制.

91. 怎样估算SQL执行的I/O数 ?

  SQL>SET AUTOTRACE ON ;

  SQL>SELECT * FROM TABLE;

  OR

  SQL>SELECT * FROM v$filestat ;

  可以查看IO数

 92. 如何在sqlplus下改变字段大小?

  alter table table_name modify (field_name varchar2(100));

  改大行,改小不行(除非都是空的)

  93. 如何查询某天的数据?

  select * from table_name where trunc(日期字段)=to_date(‘2003-05-02′,’yyyy-mm-dd’);

  94. sql 语句如何插入全年日期?

create table BSYEAR (d date);
insert into BSYEAR
select to_date(‘20030101′,’yyyymmdd’)+rownum-1
from all_objects
where rownum <= to_char(to_date(‘20031231′,’yyyymmdd’),’ddd’);

  95. 如果修改表名?

  alter table old_table_name rename to new_table_name;

  96. 如何取得命令的返回状态值?

  sqlcode=0

  97. 如何知道用户拥有的权限?

  SELECT * FROM dba_sys_privs ;

  98. 从网上下载的ORACLE9I与市场上卖的标准版有什么区别?

  从功能上说没有区别,只不过oracle公司有明文规定;从网站上下载的oracle产品不得用于 商业用途,否则侵权。

        99. 怎样判断数据库是运行在归档模式下还是运行在非归档模式下?

  进入dbastudio,历程–〉数据库—〉归档查看。

  100. sql>startup pfile和ifile,spfiled有什么区别?

  pfile就是Oracle传统的初始化参数文件,文本格式的。ifile类似于c语言里的include,用于把另一个文件引入spfile是9i里新增的并且是默认的参数文件,二进制格式startup后应该只可接pfile

        81. 内连接INNER JOIN?

  Select a.* from bsempms a,bsdptms b where a.dpt_no=b.dpt_no;

  82. 如何外连接?

  Select a.* from bsempms a,bsdptms b where a.dpt_no=b.dpt_no(+);

  Select a.* from bsempms a,bsdptms b wherea.dpt_no(+)=b.dpt_no;

  83. 如何执行脚本SQL文件?

  SQL>@$PATH/filename.sql;

  84. 如何快速清空一个大表?

  SQL>truncate table table_name;

  85. 如何查有多少个数据库实例?

  SQL>SELECT * FROM V$INSTANCE;

  86. 如何查询数据库有多少表?

  SQL>select * from all_tables;

  87. 如何测试SQL语句执行所用的时间?

  SQL>set timing on ;

  SQL>select * from tablename;

        88. CHR()的反函数是?

  ASCII()

  SELECT CHAR(65) FROM DUAL;

  SELECT ASCII(‘A’) FROM DUAL;

  89. 字符串的连接

  SELECT CONCAT(COL1,COL2) FROM TABLE ;

  SELECT COL1||COL2 FROM TABLE ;

  90. 怎么把select出来的结果导到一个文本文件中?

  SQL>SPOOL C:\ABCD.TXT;

  SQL>select * from table;

  SQL >spool off;

  91. 怎样估算SQL执行的I/O数 ?

  SQL>SET AUTOTRACE ON ;

  SQL>SELECT * FROM TABLE;

  OR

  SQL>SELECT * FROM v$filestat ;

  可以查看IO数

71. 内核参数的应用?

  shmmax
  
  含义:这个设置并不决定究竟Oracle数据库或者操作系统使用多少物理内存,只决定了最多可以使用的内存数目。这个设置也不影响操作系统的内核资源。
  
  设置方法:0.5*物理内存
  
  例子:Set shmsys:shminfo_shmmax=10485760
  
  shmmin
  
  含义:共享内存的最小大小。
  
  设置方法:一般都设置成为1。
  
  例子:Set shmsys:shminfo_shmmin=1:
  
  shmmni
  
  含义:系统中*共享内存段的最大个数。
  
  例子:Set shmsys:shminfo_shmmni=100
  
  shmseg
  
  含义:每个用户进程可以使用的最多的共享内存段的数目。
  
  例子:Set shmsys:shminfo_shmseg=20:
  
  semmni
  
  含义:系统中semaphore identifierer的最大个数。
  
  设置方法:把这个变量的值设置为这个系统上的所有Oracle的实例的init.ora中的最大的那个processes的那个值加10。
  
  例子:Set semsys:seminfo_semmni=100
  
  semmns
  
  含义:系统中emaphores的最大个数。
  
  设置方法:这个值可以通过以下方式计算得到:各个Oracle实例的initSID.ora里边的processes的值的总和(除去最大的Processes参数)+最大的那个Processes×2+10×Oracle实例的个数。
  
  例子:Set semsys:seminfo_semmns=200
  
  semmsl:
  
  含义:一个set中semaphore的最大个数。
  
  设置方法:设置成为10+所有Oracle实例的InitSID.ora中最大的Processes的值。
  
  例子:Set semsys:seminfo_semmsl=-200

    
        72. 怎样查看哪些用户拥有SYSDBA、SYSOPER权限?

  SQL>conn sys/change_on_install

  SQL>select * from V_$PWFILE_USERS;

  73. 如何单独备份一个或多个表?

  exp 用户/密码 tables=(表1,…,表2)

  74. 如何单独备份一个或多个用户?

  exp system/manager owner=(用户1,用户2,…,用户n) file=导出文件

  75. 如何对CLOB字段进行全文检索?

  SELECT * FROM A WHERE dbms_lob.instr(a.a,’K',1,1)>0;

  76. 如何显示当前连接用户?

  SHOW USER

  77. 如何查看数据文件放置的路径 ?

  col file_name format a50

  SQL> select tablespace_name,file_id,bytes/1024/1024,file_name from dba_data_files order by file_id;

  78. 如何查看现有回滚段及其状态 ?

  SQL> col segment format a30

  SQL> SELECT SEGMENT_NAME,OWNER,TABLESPACE_NAME,SEGMENT_ID,FILE_ID,STATUS FROM DBA_ROLLBACK_SEGS
        

         79. 如何改变一个字段初始定义的Check范围?

  SQL> alter table xxx drop constraint constraint_name;
之后再创建新约束:

  SQL> alter table xxx add constraint constraint_name check();

  80. Oracle常用系统文件有哪些?

  通过以下视图显示这些文件信息:v$database,v$datafile,v$logfile v$controlfile v$parameter;

61. 怎样查看ORACLE中有哪些程序在运行之中?

  查看v$sessions表

62. 怎幺可以看到数据库有多少个tablespace?

  select * from dba_tablespaces;

  63. 如何修改oracle数据库的用户连接数?

  修改initSID.ora,将process加大,重启数据库.

  64. 如何查出一条记录的最后更新时间?

  可以用logminer 察看

  65. 如何在PL/SQL中读写文件?

  UTL_FILE包允许用户通过PL/SQL读写操作系统文件。

  66. 怎样把“&”放入一条记录中?

  insert into a values (translate (‘at{&}t’,'at{}’,'at’));

  67. EXP 如何加QUERY参数?

  EXP USER/PASS FILE=A.DMP TABLES(BSEMPMS)
  
  QUERY=’"WHERE EMP_NO=\’S09394\’\" ﹔

  68. 关于oracle8i支持简体和繁体的字符集问题?

  ZHS16GBK可以支

  69. Data Guard是什幺软件?

  就是Standby的换代产品

  70. 如何创建SPFILE?

  SQL> connect / as sysdba

  SQL> select * from v$version;

  SQL> create pfile from spfile;

  SQL> CREATE SPFILE FROM PFILE=’E:\ora9i\admin\eygle\pfile\init.ora’;

  文件已创建。

  SQL> CREATE SPFILE=’E:\ora9i\database\SPFILEEYGLE.ORA’ FROM

  PFILE=’E:\ora9i\admin\eygle\pfile\init.ora’;
  
  文件已创建。

        51. 如何将小表放入keep池中?

  alter table xxx storage(buffer_pool keep);

  52. 如何检查是否安装了某个patch?

  check that oraInventory

  53. 如何使select语句使查询结果自动生成序号?

  select rownum,COL from table;

  54. 如何知道数据裤中某个表所在的tablespace?

  select tablespace_name from user_tables where table_name=’TEST’;

  select * from user_tables中有个字段TABLESPACE_NAME,(oracle);

  select * from dba_segments where …;

  55. 怎幺可以快速做一个和原表一样的备份表?

  create table new_table as (select * from old_table);
       

        55. 怎幺在sqlplus下修改procedure?

  select line,trim(text) t from user_source where name =’A’ order by line;

  56. 怎样解除PROCEDURE被意外锁定?

  alter system kill session ,把那个session给杀掉,不过你要先查出她的session id

  or

  把该过程重新改个名字就可以了。

  57. SQL Reference是个什幺东西?

  是一本sql的使用手册,包括语法、函数等等,oracle官方网站的文档中心有下载.

  58. 如何查看数据库的状态?

  unix下

  ps -ef | grep ora

  windows下看服务是否起来,是否可以连上数据库

  59. 请问如何修改一张表的主键?

  alter table aaa

  drop constraint aaa_key ;

  alter table aaa

  add constraint aaa_key primary key(a1,b1) ;

  60. 改变数据文件的大小?

  用 ALTER DATABASE …. DATAFILE …. ;

  手工改变数据文件的大小,对于原来的 数据文件有没有损害。