- 浏览: 276916 次
文章分类
最新评论
-
guji528:
oracle的统计函数真的很强大
Oracle 使用LAG和LEAD函数统计 -
haiyangyiba:
受教了
No Dialect mapping for JDBC type: 3 -
elvishehai:
能不能给个完整点的例子呀,我一直都没有试成功过,
简单的使用jackson的annotation -
miaoyue:
如果我想把name属性转成注释之后,之前的注释还在怎么做?
PowerDesigner 中将Comment(注释)及Name(名称)内容互相COPY的VBS代码 -
ianl_zt:
以上方法只适合在hibernate2中使用,现在hiberna ...
Hibernate的批量更新和删除
1. 执行一个SQL脚本文件
SQL>start file_name
SQL>@ file_name
2. 对当前的输入进行编辑
SQL>edit
3. 重新运行上一次运行的sql语句
SQL>/
4. 将显示的内容输出到指定文件
SQL> SPOOL file_name
在屏幕上的所有内容都包含在该文件中,包括你输入的sql语句。
5. 关闭spool输出
SQL> SPOOL OFF
只有关闭spool输出,才会在输出文件中看到输出的内容。
6.显示一个表的结构
SQL> desc table_name
7. COL命令:
主要格式化列的显示形式。
该命令有许多选项,具体如下:
COL[UMN] [{ column|expr} [ option ...]]
Option选项可以是如下的子句:
ALI[AS] alias
CLE[AR]
FOLD_A[FTER]
FOLD_B[EFORE]
FOR[MAT] format
HEA[DING] text
JUS[TIFY]
{L[EFT]|C[ENTER]|C[ENTRE]|R[IGHT]}
LIKE { expr|alias}
NEWL[INE]
NEW_V[ALUE] variable
NOPRI[NT]|PRI[NT]
NUL[L] text
OLD_V[ALUE]
variable
ON|OFF
WRA[PPED]|WOR[D_WRAPPED]|TRU[NCATED]
1).
改变缺省的列标题
COLUMN column_name HEADING column_heading
For example:
Sql>select * from dept;
DEPTNO
DNAME
LOC
---------- ---------------------------- ---------
10
ACCOUNTING
NEW YORK
sql>col LOC heading location
sql>select * from
dept;
DEPTNO
DNAME
location
--------- ---------------------------- -----------
10
ACCOUNTING
NEW YORK
2). 将列名ENAME改为新列名EMPLOYEE NAME并将新列名放在两行上:
Sql>select * from emp
Department
name Salary
---------- ---------- ----------
10
aaa
11
SQL> COLUMN ENAME
HEADING ’Employee|Name’
Sql>select * from emp
Employee
Department
name Salary
---------- ---------- ----------
10
aaa
11
note: the col heading turn into two lines from one line.
3). 改变列的显示长度:
FOR[MAT] format
Sql>select empno,ename,job from
emp;
EMPNO
ENAME
JOB
----------
---------- ---------
7369
SMITH CLERK
7499
ALLEN SALESMAN
7521
WARD SALESMAN
Sql> col
ename format a40
EMPNO
ENAME
JOB
----------
----------------------------------------
---------
7369
SMITH
CLERK
7499
ALLEN
SALESMAN
7521
WARD
SALESMAN
4). 设置列标题的对齐方式
JUS[TIFY]
{L[EFT]|C[ENTER]|C[ENTRE]|R[IGHT]}
SQL> col ename justify center
SQL> /
EMPNO
ENAME
JOB
----------
----------------------------------------
---------
7369
SMITH
CLERK
7499
ALLEN
SALESMAN
7521
WARD
SALESMAN
对于NUMBER型的列,列标题缺省在右边,其它类型的列标题缺省在左边
5). 不让一个列显示在屏幕上
NOPRI[NT]|PRI[NT]
SQL> col job noprint
SQL> /
EMPNO ENAME
---------- ----------------------------------------
7369 SMITH
7499 ALLEN
7521 WARD
6). 格式化NUMBER类型列的显示:
SQL> COLUMN SAL FORMAT $99,990
SQL> /
Employee
Department Name
Salary Commission
---------- ---------- ---------
----------
30
ALLEN $1,600 300
7). 显示列值时,如果列值为NULL值,用text值代替NULL值
COMM NUL[L] text
SQL>COL COMM NUL[L] text
8). 设置一个列的回绕方式
WRA[PPED]|WOR[D_WRAPPED]|TRU[NCATED]
COL1
--------------------
HOW ARE YOU?
SQL>COL COL1 FORMAT A5
SQL>COL COL1
WRAPPED
COL1
-----
HOW A
RE YO
U?
SQL> COL
COL1 WORD_WRAPPED
COL1
-----
HOW
ARE
YOU?
SQL> COL COL1 WORD_WRAPPED
COL1
-----
HOW A
9). 显示列的当前的显示属性值
SQL> COLUMN column_name
10).
将所有列的显示属性设为缺省值
SQL> CLEAR COLUMNS
8. 屏蔽掉一个列中显示的相同的值
BREAK ON break_column
SQL> BREAK ON DEPTNO
SQL> SELECT DEPTNO,
ENAME, SAL
FROM EMP
WHERE SAL < 2500
ORDER BY
DEPTNO;
DEPTNO
ENAME SAL
----------
----------- ---------
10
CLARK 2450
MILLER 1300
20
SMITH 800
ADAMS 1100
9.
在上面屏蔽掉一个列中显示的相同的值的显示中,每当列值变化时在值变化之前插入n个空行。
BREAK ON break_column SKIP n
SQL> BREAK ON DEPTNO SKIP 1
SQL> /
DEPTNO ENAME SAL
---------- ----------- ---------
10 CLARK 2450
MILLER 1300
20 SMITH 800
ADAMS 1100
10. 显示对BREAK的设置
SQL> BREAK
11. 删除6、7的设置
SQL> CLEAR BREAKS
12. Set 命令:
该命令包含许多子命令:
SET system_variable value
system_variable value 可以是如下的子句之一:
APPI[NFO]{ON|OFF|text}
ARRAY[SIZE]
{15|n}
AUTO[COMMIT]{ON|OFF|IMM[EDIATE]|n}
AUTOP[RINT] {ON|OFF}
AUTORECOVERY [ON|OFF]
AUTOT[RACE] {ON|OFF|TRACE[ONLY]} [EXP[LAIN]]
[STAT[ISTICS]]
BLO[CKTERMINATOR] {.|c}
CMDS[EP] {;|c|ON|OFF}
COLSEP
{_|text}
COM[PATIBILITY]{V7|V8|NATIVE}
CON[CAT] {.|c|ON|OFF}
COPYC[OMMIT] {0|n}
COPYTYPECHECK {ON|OFF}
DEF[INE] {&|c|ON|OFF}
DESCRIBE [DEPTH {1|n|ALL}][LINENUM {ON|OFF}][INDENT {ON|OFF}]
ECHO
{ON|OFF}
EDITF[ILE] file_name[.ext]
EMB[EDDED] {ON|OFF}
ESC[APE]
{\|c|ON|OFF}
FEED[BACK] {6|n|ON|OFF}
FLAGGER {OFF|ENTRY
|INTERMED[IATE]|FULL}
FLU[SH] {ON|OFF}
HEA[DING] {ON|OFF}
HEADS[EP]
{||c|ON|OFF}
INSTANCE [instance_path|LOCAL]
LIN[ESIZE] {80|n}
LOBOF[FSET] {n|1}
LOGSOURCE [pathname]
LONG {80|n}
LONGC[HUNKSIZE] {80|n}
MARK[UP] HTML [ON|OFF] [HEAD text] [BODY text]
[ENTMAP {ON|OFF}] [SPOOL
{ON|OFF}] [PRE[FORMAT] {ON|OFF}]
NEWP[AGE]
{1|n|NONE}
NULL text
NUMF[ORMAT] format
NUM[WIDTH] {10|n}
PAGES[IZE] {24|n}
PAU[SE] {ON|OFF|text}
RECSEP
{WR[APPED]|EA[CH]|OFF}
RECSEPCHAR {_|c}
SERVEROUT[PUT] {ON|OFF} [SIZE n]
[FOR[MAT] {WRA[PPED]|WOR[D_
WRAPPED]|TRU[NCATED]}]
SHIFT[INOUT]
{VIS[IBLE]|INV[ISIBLE]}
SHOW[MODE] {ON|OFF}
SQLBL[ANKLINES] {ON|OFF}
SQLC[ASE] {MIX[ED]|LO[WER]|UP[PER]}
SQLCO[NTINUE] {> |text}
SQLN[UMBER] {ON|OFF}
SQLPRE[FIX] {#|c}
SQLP[ROMPT] {SQL>|text}
SQLT[ERMINATOR] {;|c|ON|OFF}
SUF[FIX] {SQL|text}
TAB {ON|OFF}
TERM[OUT] {ON|OFF}
TI[ME] {ON|OFF}
TIMI[NG] {ON|OFF}
TRIM[OUT]
{ON|OFF}
TRIMS[POOL] {ON|OFF}
UND[ERLINE] {-|c|ON|OFF}
VER[IFY]
{ON|OFF}
WRA[P] {ON|OFF}
1). 设置当前session是否对修改的数据进行自动提交
SQL>SET AUTO[COMMIT] {ON|OFF|IMM[EDIATE]| n}
2).在用start命令执行一个sql脚本时,是否显示脚本中正在执行的SQL语句
SQL> SET ECHO {ON|OFF}
3).是否显示当前sql语句查询或修改的行数
SQL> SET FEED[BACK] {6|n|ON|OFF}
默认只有结果大于6行时才显示结果的行数。如果set feedback 1 ,则不管查询到多少行都返回。当为off
时,一律不显示查询的行数
4).是否显示列标题
SQL> SET HEA[DING] {ON|OFF}
当set heading off 时,在每页的上面不显示列标题,而是以空白行代替
5).设置一行可以容纳的字符数
SQL> SET LIN[ESIZE] {80|n}
如果一行的输出内容大于设置的一行可容纳的字符数,则折行显示。
6).设置页与页之间的分隔
SQL> SET
NEWP[AGE] {1|n|NONE}
当set newpage 0 时,会在每页的开头有一个小的黑方框。
当set newpage n
时,会在页和页之间隔着n个空行。
当set newpage none 时,会在页和页之间没有任何间隔。
7).显示时,用text值代替NULL值
SQL> SET NULL text
8).设置一页有多少行数
SQL> SET PAGES[IZE] {24|n}
如果设为0,则所有的输出内容为一页并且不显示列标题
9).是否显示用DBMS_OUTPUT.PUT_LINE包进行输出的信息。
SQL> SET SERVEROUT[PUT]
{ON|OFF}
在编写存储过程时,我们有时会用dbms_output.put_line将必要的信息输出,以便对存储过程进行调试,只有将serveroutput变量设为on后,信息才能显示在屏幕上。
10).当SQL语句的长度大于LINESIZE时,是否在显示时截取SQL语句。
SQL> SET WRA[P]
{ON|OFF}
当输出的行的长度大于设置的行的长度时(用set linesize n命令设置),当set wrap
on时,输出行的多于的字符会另起一行显示,否则,会将输出行的多于字符切除,不予显示。
11).是否在屏幕上显示输出的内容,主要用与SPOOL结合使用。
SQL> SET TERM[OUT] {ON|OFF}
在用spool命令将一个大表中的内容输出到一个文件中时,将内容输出在屏幕上会耗费大量的时间,设置set termspool
off后,则输出的内容只会保存在输出文件中,不会显示在屏幕上,极大的提高了spool的速度。
12).将SPOOL输出中每行后面多余的空格去掉
SQL> SET TRIMS[OUT] {ON|OFF}
13)显示每个sql语句花费的执行时间
set TIMING {ON|OFF}
14). 遇到空行时不认为语句已经结束,从后续行接着读入。
SET SQLBLANKLINES ON
Sql*plus中,
不允许sql语句中间有空行, 这在从其它地方拷贝脚本到sql*plus中执行时很麻烦. 比如下面的脚本:
select deptno, empno,
ename
from emp
where empno = '7788';
如果拷贝到sql*plus中执行, 就会出现错误。这个命令可以解决该问题
15).设置DBMS_OUTPUT的输出
SET SERVEROUTPUT ON BUFFER
20000
用dbms_output.put_line('strin_content');可以在存储过程中输出信息,对存储过程进行调试
如果想让dbms_output.put_line('
abc');的输出显示为:
SQL> abc,而不是SQL>abc,则在SET
SERVEROUTPUT ON后加format wrapped参数。
16). 输出的数据为html格式
set markup html
在8.1.7版本(也许是816? 不太确定)以后,
sql*plus中有一个set markup html的命令, 可以将sql*plus的输出以html格式展现.
注意其中的spool on,
当在屏幕上输出的时候, 我们看不出与不加spool on有什么区别, 但是当我们使用spool filename 输出到文件的时候,
会看到spool文件中出现了等tag.
14.修改sql buffer中的当前行中,第一个出现的字符串
C[HANGE] /old_value/new_value
SQL> l
1* select * from dept
SQL> c/dept/emp
1* select * from emp
15.编辑sql buffer中的sql语句
EDI[T]
16.显示sql buffer中的sql语句,list n显示sql
buffer中的第n行,并使第n行成为当前行
L[IST] [n]
17.在sql buffer的当前行下面加一行或多行
I[NPUT]
18.将指定的文本加到sql buffer的当前行后面
A[PPEND]
SQL>
select deptno,
2 dname
3 from
dept;
DEPTNO DNAME
---------- --------------
10 ACCOUNTING
20 RESEARCH
30 SALES
40 OPERATIONS
SQL> L 2
2* dname
SQL> a ,loc
2*
dname,loc
SQL> L
1 select deptno,
2 dname,loc
3* from dept
SQL> /
DEPTNO
DNAME LOC
----------
-------------- -------------
10
ACCOUNTING NEW YORK
20
RESEARCH DALLAS
30
SALES CHICAGO
40
OPERATIONS BOSTON
19.将sql
buffer中的sql语句保存到一个文件中
SAVE file_name
20.将一个文件中的sql语句导入到sql
buffer中
GET file_name
21.再次执行刚才已经执行的sql语句
RUN
or
/
22.执行一个存储过程
EXECUTE procedure_name
23.在sql*plus中连接到指定的数据库
CONNECT user_name/passwd@db_alias
24.设置每个报表的顶部标题
TTITLE
25.设置每个报表的尾部标题
BTITLE
26.写一个注释
REMARK [text]
27.将指定的信息或一个空行输出到屏幕上
PROMPT [text]
28.将执行的过程暂停,等待用户响应后继续执行
PAUSE [text]
Sql>PAUSE Adjust paper and press RETURN to continue.
29.将一个数据库中的一些数据拷贝到另外一个数据库(如将一个表的数据拷贝到另一个数据库)
COPY {FROM
database | TO database | FROM database TO database}
{APPEND|CREATE|INSERT|REPLACE} destination_table
[(column, column,
column, ...)] USING query
sql>COPY FROM SCOTT/TIGER@HQ TO JOHN/CHROME@WEST
create emp_temp
USING SELECT * FROM EMP
30.不退出sql*plus,在sql*plus中执行一个操作系统命令:
HOST
Sql> host hostname
该命令在windows下可能被支持。
31.在sql*plus中,切换到操作系统命令提示符下,运行操作系统命令后,可以再次切换回sql*plus:
!
sql>!
$hostname
$exit
sql>
该命令在windows下不被支持。
32.显示sql*plus命令的帮助
HELP
如何安装帮助文件:
Sql>@ ?\sqlplus\admin\help\hlpbld.sql ?\sqlplus\admin\help\helpus.sql
Sql>help index
33.显示sql*plus系统变量的值或sql*plus环境变量的值
Syntax
SHO[W] option
where option represents one of the following
terms or clauses:
system_variable
ALL
BTI[TLE]
ERR[ORS]
[{FUNCTION|PROCEDURE|PACKAGE|PACKAGE BODY|
TRIGGER|VIEW|TYPE|TYPE BODY}
[schema.]name]
LNO
PARAMETERS [parameter_name]
PNO
REL[EASE]
REPF[OOTER]
REPH[EADER]
SGA
SPOO[L]
SQLCODE
TTI[TLE]
USER
1) . 显示当前环境变量的值:
Show all
2) .
显示当前在创建函数、存储过程、触发器、包等对象的错误信息
Show error
当创建一个函数、存储过程等出错时,变可以用该命令查看在那个地方出错及相应的出错信息,进行修改后再次进行编译。
3) .
显示初始化参数的值:
show PARAMETERS [parameter_name]
4) . 显示数据库的版本:
show REL[EASE]
5) . 显示SGA的大小
show SGA
6).
显示当前的用户名
show user
34.查询一个用户下的对象
SQL>select * from tab;
SQL>select * from
user_objects;
35.查询一个用户下的所有的表
SQL>select * from user_tables;
36.查询一个用户下的所有的索引
SQL>select * from user_indexes;
37. 定义一个用户变量
方法有两个:
a. define
b. COL[UMN] [{column|expr}
NEW_V[ALUE] variable
[NOPRI[NT]|PRI[NT]]
OLD_V[ALUE] variable [NOPRI[NT]|PRI[NT]]
下面对每种方式给予解释:
a. Syntax
DEF[INE] [variable]|[variable =
text]
定义一个用户变量并且可以分配给它一个CHAR值。
assign the value MANAGER to the variable POS, type:
SQL> DEFINE POS =
MANAGER
assign the CHAR value 20 to the variable DEPTNO, type:
SQL> DEFINE
DEPTNO = 20
list the definition of DEPTNO, enter
SQL> DEFINE
DEPTNO
―――――――――――――――
DEFINE
DEPTNO = ”20” (CHAR)
定义了用户变量POS后,就可以在sql*plus中用&POS或&&POS来引用该变量的值,sql*plus不会再提示你给变量输入值。
b. COL[UMN] [{column|expr} NEW_V[ALUE] variable
[NOPRI[NT]|PRI[NT]]
NEW_V[ALUE] variable
指定一个变量容纳查询出的列值。
例:column
col_name new_value var_name noprint
select col_name from
table_name where ……..
将下面查询出的col_name列的值赋给var_name变量.
一个综合的例子:
得到一个列值的两次查询之差(此例为10秒之内共提交了多少事务):
column redo_writes new_value
commit_count
select sum(stat.value) redo_writes
from v$sesstat stat, v$statname
sn
where stat.statistic# = sn.statistic#
and sn.name = 'user commits';
-- 等待一会儿(此处为10秒);
execute dbms_lock.sleep(10);
set veri off
select sum(stat.value) - &commit_count
commits_added
from v$sesstat stat, v$statname sn
where stat.statistic# =
sn.statistic#
and sn.name = 'user commits';
38. 定义一个绑定变量
VAR[IABLE] [variable [NUMBER|CHAR|CHAR (n)|NCHAR|NCHAR
(n) |VARCHAR2 (n)|NVARCHAR2
(n)|CLOB|NCLOB|REFCURSOR]]
定义一个绑定变量,该变量可以在pl/sql中引用。
可以用print命令显示该绑定变量的信息。
如:
column
inst_num heading "Inst Num" new_value inst_num format
99999;
column inst_name heading "Instance" new_value inst_name format
a12;
column db_name heading "DB Name" new_value
db_name format a12;
column dbid
heading "DB Id" new_value
dbid format 9999999999 just c;
prompt
prompt Current Instance
prompt ~~~~~~~~~~~~~~~~
select
d.dbid
dbid
,
d.name
db_name
, i.instance_number
inst_num
, i.instance_name
inst_name
from v$database d,
v$instance i;
variable dbid number;
variable
inst_num number;
begin
:dbid := &dbid;
:inst_num :=
&inst_num;
end;
/
说明:
在sql*plus中,该绑定变量可以作为一个存储过程的参数,也可以在匿名PL/SQL块中直接引用。为了显示用VARIABLE命令创建的绑定变量的值,可以用print命令
注意:
绑定变量不同于变量:
1.
定义方法不同
2.
引用方法不同
绑定变量::variable_name
变量:&variable_name or
&&variable_name
3.在sql*plus中,可以定义同名的绑定变量与用户变量,但是引用的方法不同。
39.
&与&&的区别
&用来创建一个临时变量,每当遇到这个临时变量时,都会提示你输入一个值。
&&用来创建一个持久变量,就像用用define命令或带new_vlaue字句的column命令创建的持久变量一样。当用&&命令引用这个变量时,不会每次遇到该变量就提示用户键入值,而只是在第一次遇到时提示一次。
如,将下面三行语句存为一个脚本文件,运行该脚本文件,会提示三次,让输入deptnoval的值:
select count(*) from emp
where deptno = &deptnoval;
select count(*) from emp where deptno =
&deptnoval;
select count(*) from emp where deptno = &deptnoval;
将下面三行语句存为一个脚本文件,运行该脚本文件,则只会提示一次,让输入deptnoval的值:
select count(*) from emp
where deptno = &&deptnoval;
select count(*) from emp where deptno =
&&deptnoval;
select count(*) from emp where deptno =
&&deptnoval;
40.在输入sql语句的过程中临时先运行一个sql*plus命令(摘自www.itpub.com)
#
有没有过这样的经历?
在sql*plus中敲了很长的命令后, 突然发现想不起某个列的名字了, 如果取消当前的命令,待查询后再重敲, 那太痛苦了.
当然你可以另开一个sql*plus窗口进行查询, 但这里提供的方法更简单.
比如说, 你想查工资大于4000的员工的信息, 输入了下面的语句:
SQL> select deptno, empno, ename
2 from emp
3 where
这时,
你发现你想不起来工资的列名是什么了.
这种情况下, 只要在下一行以#开头, 就可以执行一条sql*plus命令, 执行完后, 刚才的语句可以继续输入
SQL>> select deptno, empno, ename
2 from emp
3 where
6 #desc
emp
Name Null? Type
----------------------------------------- --------
--------------
EMPNO NOT NULL NUMBER(4)
ENAME VARCHAR2(10)
JOB
VARCHAR2(9)
MGR NUMBER(4)
HIREDATE DATE
SAL NUMBER(7,2)
COMM
NUMBER(7,2)
DEPTNO NUMBER(2)
6 sal > 4000;
DEPTNO EMPNO ENAME
---------- ---------- ----------
10 7839 KING
41. SQLPlus中的快速复制和粘贴技巧(摘自www.cnoug.org)
1) 鼠标移至想要复制内容的开始
2)
用右手食指按下鼠标左键
3) 向想要复制内容的另一角拖动鼠标,与Word中选取内容的方法一样
4)
内容选取完毕后(所选内容全部反显),鼠标左键按住不动,用右手中指按鼠标右键
5) 这时,所选内容会自动复制到SQL*Plus环境的最后一行
Sql*plus中蕴藏着好多技巧,如果掌握这些技巧,对于在oracle数据库下进行快速开发与有效维护数据库都是有益的。
下面就接受一二,
1.使用SQL*PLUS动态生成批量脚本
将spool与select命令结合起来使用,可以生成一个脚本,脚本中包含有可以批量执行某一任务的语句。
例1:
生成一个脚本,删除SCOTT用户下的所有的表:
a.
创建gen_drop_table.sql文件,包含如下语句:
SPOOL c:\drop_table.sql
SELECT 'DROP TABLE '|| table_name ||';' FROM
user_tables;
SPOOL OFF
b.
以SCOTT用户登录数据库
SQLPLUS > @ …..\gen_dorp_table.sql
c.
在c盘根目录下会生成文件drop_table.sql文件,包含删除所有表的语句,如下所示:
SQL>
SELECT 'DROP TABLE '|| table_name ||';' FROM
user_tables;
'DROPTABLE'||TABLE_NAME||';'
--------------------------------------------------------------------------------
DROP TABLE
DEPT;
DROP TABLE
EMP;
DROP TABLE
PARENT;
DROP TABLE
STAT_VENDER_TEMP;
DROP TABLE
TABLE_FORUM;
5 rows selected.
SQL> SPOOL OFF
d.
对生成的drop_table.sql文件进行编辑去掉不必要的部分,只留下drop table …..语句
e.
在scott用户下运行dorp_table.sql文件,删除scott用户下所有的表。
SQLPLUS > @
c:\dorp_table.sql
在上面的操作中,在生成的脚本文件中会有多余的字符,如运行的sql语句,标题,或返回的行数,需要我们编辑该脚本后再运行,给实际的操作带来诸多不便。懒惰是人的本性,这促使我们用更简单的办法来实现上面的任务。
a.
创建gen_drop_table.sql文件,包含如下语句:
set
echo off
set feedback off
set newpage none
set pagesize 5000
set
linesize 500
set verify off
set pagesize 0
set term off
set trims
on
set linesize 600
set heading off
set timing off
set verify
off
set numwidth 38
SPOOL c:\drop_table.sql
SELECT 'DROP TABLE '|| table_name ||';' FROM
user_tables;
SPOOL OFF
b.
以SCOTT用户登录数据库
SQLPLUS > @ …..\gen_dorp_table.sql
c.
在c盘根目录下会生成文件drop_table.sql文件,包含删除所有表的语句,如下所示:
DROP TABLE
DEPT;
DROP TABLE
EMP;
DROP TABLE
PARENT;
DROP TABLE
STAT_VENDER_TEMP;
DROP TABLE
TABLE_FORUM;
d. 在scott用户下运行dorp_table.sql文件,删除scott用户下所有的表。
SQLPLUS > @
c:\dorp_table.sql
2.将一个表中的数据导出生成一个文本文件,列与列之间以”,”隔开
set echo off
set feedback
off
set newpage none
set pagesize 5000
set linesize 500
set verify
off
set pagesize 0
set term off
set trims on
set linesize 600
set
heading off
set timing off
set verify off
set numwidth
38
SPOOL c:\drop_table.sql
select DEPTNO
|| ',' || DNAME FROM DEPT;
SPOOL OFF
将上面的内容保存为一个文本文件后,以scott登录,执行该文件后显示结果:
10,ACCOUNTING
20,RESEARCH
30,SALES
40,OPERATIONS
通过上面的两个例子,我们可以将:
set echo off
set feedback off
set newpage
none
set pagesize 5000
set linesize 500
set verify off
set pagesize
0
set term off
set trims on
set linesize 600
set heading off
set timing off
set verify off
set numwidth 38
SPOOL c:\具体的文件名
你要运行的sql语句
SPOOL
OFF
作为一个模版,只要将必要的语句假如这个模版就可以了。
在oracle的较新版本中,还可以用set colsep命令来实现上面的功能:
SQL> set colsep ,
SQL>
select * from dept;
10,ACCOUNTING ,NEW
YORK
20,RESEARCH
,DALLAS
30,SALES
,CHICAGO
40,OPERATIONS
,BOSTON
35,aa ,bb
3.动态生成spool命令所需的文件名
在我们上面的例子中,spool命令所需要的文件名都是固定的。有时我们需要每天spool一次,并且每次spool的文件名都不相同,如文件名包含当天的日期,该如何实现呢?
column
dat1 new_value filename;
select to_char(sysdate,'yyyymmddhh24mi') dat1 from
dual;
spool c:\&&filename..txt
select * from
dept;
spool off;
4.如何从脚本文件中得到WINDOWS环境变量的值:
在windos中:
spool c:\temp\%ORACLE_SID%.txt
select * from dept;
...
spool off
在上面的例子中,通过%ORACLE_SID%的方式引用环境变量ORACLE_SID的值,如果ORACLE_SID的值为orcl,则生成的spool文件名为:orcl.txt
在UNIX中:
spool c:\temp\$ORACLE_SID.txt
select * from dept;
...
spool off
在上面的例子中,通过$ORACLE_SID的方式引用环境变量ORACLE_SID的值,如果ORACLE_SID的值为orcl,则生成的spool文件名为:orcl.txt
5.如何指定缺省的编辑脚本的目录
在sql*plus中,可以用save命令,将上一条执行的sql语句保存到一个文件中,但是如何设置该文件的缺省目录呢?
通过SQL> set
editfile c:\temp\file.sql 命令,可以设置其缺省目录为c:\tmpe,缺省文件名为file.sql。
6.如何除去表中相同的行
找到相同的行:
SELECT * FROM dept a
WHERE ROWID
<> (SELECT
MAX(ROWID)
FROM dept
b
WHERE a.deptno =
b.deptno
AND a.dname = b.dname -- Make sure all columns are
compared
AND a.loc = b.loc);
注释:
如果只找deptno列相同的行,上面的查询可以改为:
SELECT * FROM dept a
WHERE ROWID <> (SELECT
MAX(ROWID)
FROM dept
b
WHERE a.deptno = b.deptno)
删除相同的行:
DELETE FROM dept a
WHERE ROWID <> (SELECT
MAX(ROWID
FROM dept
b
WHERE a.deptno =
b.deptno
AND a.dname = b.dname -- Make sure all columns are
compared
AND a.loc = b.loc);
注意:上面并不删除列值为null的行。
7.如何向数据库中插入两个单引号(’’)
Insert inot dept values(35,’aa’’’’bb’,’a’’b’);
在插入时,用两个’表示一个’。
8.如何设置sql*plus的搜寻路径,这样在用@命令时,就不用输入文件的全路径。
设置SQLPATH环境变量。
如:
SQLPATH
= C:\ORANT\DBS;C:\APPS\SCRIPTS;C:\MYSCRIPTS
9.@与@@的区别是什么?
@等于start命令,用来运行一个sql脚本文件。
@命令调用当前目录下的,或指定全路径,或可以通过SQLPATH环境变量搜寻到的脚本文件。
@@用在脚本文件中,用来指定用@@执行的文件与@@所在的文件在同一目录,而不用指定全路径,也不从SQLPATH环境变量指定的路径中寻找文件,该命令一般用在嵌套脚本文件中。
10.&与&&的区别
&用来创建一个临时变量,每当遇到这个临时变量时,都会提示你输入一个值。
&&用来创建一个持久变量,就像用用define命令或带new_vlaue字句的column命令创建的持久变量一样。当用&&命令引用这个变量时,不会每次遇到该变量就提示用户键入值,而只是在第一次遇到时提示一次。
如,将下面三行语句存为一个脚本文件,运行该脚本文件,会提示三次,让输入deptnoval的值:
select count(*) from emp
where deptno = &deptnoval;
select count(*) from emp where deptno =
&deptnoval;
select count(*) from emp where deptno = &deptnoval;
将下面三行语句存为一个脚本文件,运行该脚本文件,则只会提示一次,让输入deptnoval的值:
select count(*) from emp
where deptno = &deptnoval;
select count(*) from emp where deptno =
&deptnoval;
select count(*) from emp where deptno = &deptnoval;
11.引入copy的目的
Copy命令在两个数据库之间拷贝数据时特别有用,特别是该命令可以在两个数据库之间传递long型字段的数据。
缺点:
在两个数据库之间传递数据时,有可能丢失精度(lose
precision)。
12.问什么在修改大量的行时,我的脚本会变得很慢?
当通过PL/SQL块修改一个表中的许多行时,你会创建在表上创建一个cursor,但是只有在你关闭cursor时,才会释放ROLLBACK
SEGMENT,这样,当cursor仍然打开时,修改过程会变慢,这是因为数据库不得不搜寻大量的rollback
segment以便于维护读一致性。为了避免这样情况,试着在表上加一个标志字段来描述该行是否已经被修改,然后关闭该cursor,然后再打开该cursor。每次可以修改5000行.
发表评论
-
30个Oracle语句优化规则详解
2009-06-18 10:35 31101.选用适合的Oracle优化 ... -
30个Oracle语句优化规则详解
2009-06-18 10:35 28651.选用适合的Oracle优化 ... -
Oracle RBO、CBO简介
2009-06-18 10:34 4160Rule Based Optimizer(RBO)基于规则Co ... -
索引什么时候不工作
2009-06-18 10:33 3673首先要声明两个知识点: (1)RBO& ... -
Oracle DBA在新环境下必须了解的事情
2009-06-18 10:28 1863面对一个全新的环境,作为一个Oracle DBA,首先应 ... -
三招让Oracle表列管理更加简单
2009-06-18 10:27 3017Oracle数据库是目前为止最复杂的一个数据库之一。也正是这种 ... -
oracle lead 使用实践
2009-06-18 10:26 5594oracle 统计分析函数 lead 语法结构: ... -
oracle count计数的优化
2009-06-18 10:25 9575在9i,我们知道count(*)的时候,如果表上有pk,那co ... -
Oracle HINT的常见用法
2009-06-18 10:23 2924提示(hint)从Oracle7中引入,目的是弥补基于成本优化 ... -
利用Oracle内置分析函数进行高效统计汇总(2)
2009-06-18 10:22 2227问题5 求按登记注册类 ... -
利用Oracle内置分析函数进行高效统计汇总(1)
2009-06-18 10:21 2452分析函数是Oracle从8.1.6开始引入的一个新的概念,为我 ... -
奇怪的ora-01722错误
2009-06-18 10:12 3073一个和子查询,视图有 ...
相关推荐
oracle sqlplus所有的命令的集合大全,复制过来的,没有目录,SORRY
这个"SQLPLUS命令查询文档"很可能是一个详细介绍了SQLPLUS使用方法的CHM(Compiled HTML Help)文件,这种文件格式将HTML页面集合在一起,形成一个有索引的帮助文档,便于用户查阅。 在SQLPLUS中,掌握一些基本的...
这个“Oracle帮助文档 带SQL*Plus命令”压缩包显然包含了关于Oracle数据库管理和SQL*Plus使用的详细指南。 首先,Oracle帮助文档通常会包含以下几个方面的内容: 1. **Oracle数据库架构**:讲解Oracle数据库的核心...
以下将详细介绍标题和描述中提到的Oracle命令操作集合,以及与之相关的知识点。 1. **Oracle常用操作命令**: - `sqlplus`:Oracle的命令行工具,用于执行SQL语句和PL/SQL块。 - `connect`:连接到Oracle数据库,...
可以使用 `help set` 命令来查看可以用 `SET` 命令控制的整个环境变量的集合。 HELP 命令 使用 `HELP` 命令可以查看 SQLPlus 中的帮助信息,例如:`SQL> help index`,可以查看 SQLPlus 下的常用命令。
### Oracle数据库操作命令详解 #### 一、SQLPlus启动与用户连接 - **启动SQLPlus:** - 在DOS环境下通过`sqlplus 用户名/密码 as sysdba`来启动SQLPlus并登录到Oracle数据库。例如,登录系统账户时可使用`c:>...
以上内容涵盖了 Oracle 的安装过程、基本操作命令、数据字典的使用、默认账号及其密码、如何使用 SQL Developer 连接数据库、如何创建新用户以及如何启动 SQL Plus 和了解 Oracle 的默认端口等关键知识点。...
1. **切换用户至ORACLE**: 使用`su - oracle`命令切换到ORACLE用户环境。 2. **启动SVRMGRL**: 输入`svrmgrl`进入SVRMGRL管理工具。 3. **连接内部用户**: 输入`connect internal`连接内部用户。 4. **启动数据库**:...
使用`START`或`@`命令来执行保存在文本文件中的SQL语句集合。`START file_name`和`@ file_name`都能完成这一任务。`@`命令可以直接调用当前目录下的文件,或者通过`SQLPATH`环境变量找到脚本文件。`@@`命令则用于在...
- `sqlplus username/password@database`:使用SQL*Plus工具连接到指定的Oracle数据库,username是用户名,password是密码,database是服务名或连接字符串。 2. **查询数据库状态**: - `SELECT * FROM v$version...
在CMD下操作Oracle数据库涉及多个命令和概念,这些在"在CMD下使用ORACLE的命令集合.pdf"中有所概述。以下是一些关键知识点的详细解释: 1. **启动与关闭Oracle服务**: - `net start oracleservice 服务名` 用于...
在"ORCL数据库相关文档.rar"这个压缩包中,我们可以找到一系列关于Oracle数据库的重要资料,尤其是"Oracle命令集合"部分,它涵盖了Oracle数据库管理和操作的各种常见命令。 首先,创建实例是Oracle数据库管理的基础...
### Oracle命令查询大全知识点概述 根据提供的文件信息,“Oracle命令查询大全”主要涵盖了Oracle数据库管理系统的各类命令,包括但不限于数据定义语言(DDL)、数据操纵语言(DML)、事务控制、查询语言等方面的...
本文将基于给定的文件信息,深入解析如何使用Oracle的基本命令来创建用户,并对相关的知识点进行详细说明。 ### Oracle创建用户的步骤与命令详解 #### 1. 登录SQL*Plus工具 首先,我们需要通过SQL*Plus工具登录到...
ORACLE常用命令 一、ORACLE的启动和关闭 1、在单机环境下 要想启动或关闭ORACLE系统必须首先切换到ORACLE用户,如下 su - oracle a、启动ORACLE系统 oracle>svrmgrl SVRMGR>connect internal SVRMGR>startup ...
使用`START`或`@`命令可以执行保存在文本文件中的SQL语句集合。例如: ``` SQL> START file_name SQL> @ file_name ``` 这样做的好处是可以将多条SQL语句组织在一起,形成批处理,便于管理和执行。 2. **编辑...
本文将详细介绍几个常用的Oracle DOS命令及其应用。 1. **进入SQL*Plus**:在Windows环境下,可以通过“开始”菜单的“运行”选项输入`cmd`打开命令行,然后输入`sqlplus`,按回车键。接着,系统会提示输入用户名和...
- 在双机环境下,通常使用集群资源管理器命令来启动或关闭 Oracle 实例。 - **启动 Oracle**:`hareg -y oracle` - **关闭 Oracle**:`hareg -n oracle` #### 四、Oracle 数据库启动方式 - **非安装启动 ...
Oracle的数据字典是存储关于数据库元数据的信息集合,包括用户信息、权限、数据对象详情等。了解并利用数据字典,可以极大提升数据库管理效率。 **1. 查询数据字典信息** - 查看与索引相关的数据字典:`select * ...
- **关闭ORACLE系统**: 使用`hareg -n oracle`命令。 ##### Oracle数据库的启动方式 Oracle数据库提供了多种启动方式,每种方式都有其特定的用途。 - **非安装启动(startup nomount)**: 此方式下可以执行重建控制...