标签:des style blog class tar ext
一、各种设置参数解释
转自http://baike.baidu.com/view/1239908.htm
Sql*plus是一个最常用的工具,具有很强的功能,主要有:
1. 数据库的维护,如启动,关闭等,这一般在服务器上操作。
2. 执行sql语句执行pl/sql。
3. 执行sql脚本。
4. 数据的导出,报表。
5. 应用程序开发、测试sql/plsql。
6. 生成新的sql脚本。
7.
供应用程序调用,如安装程序中进行脚本的安装。
8. 用户管理及权限维护等。
二、下面就介绍一下一些常用的sql*plus命令:
1.
执行一个SQL脚本文件
SQL>start file_name
SQL>@
file_name
我们可以将多条sql语句保存在一个文本文件中,这样当要执行这个文件中的所有的sql语句时,用上面的任一命令即可,这类似于dos中的批处理。
@与@@的区别是什么?
@等于start命令,用来运行一个sql脚本文件。
@命令调用当前目录下的,或指定全路径,或可以通过SQLPATH环境变量搜寻到的脚本文件。该命令使用是一般要指定要执行的文件的全路径,否则从缺省路径(可用SQLPATH变量指定)下读取指定的文件。
@@用在sql脚本文件中,用来说明用@@执行的sql脚本文件与@@所在的文件在同一目录下,而不用指定要执行sql脚本文件的全路径,也不是从SQLPATH环境变量指定的路径中寻找sql脚本文件,该命令一般用在脚本文件中。
如:在c:\temp目录下有文件start.sql和nest_start.sql,start.sql脚本文件的内容为:
@@nest_start.sql - - 相当于@ c:\temp\nest_start.sql
则我们在sql*plus中,这样执行:
SQL> @ c:\temp\start.sql
附注:也可以在shell中运行,例如sqlplus ‘/as sysdba‘ @C:\temp\start.sql
2.
对当前的输入进行编辑
SQL>edit
3. 重新运行上一次运行的sql语句
SQL>/
4. 将显示的内容输出到指定文件
SQL> SPOOL file_name
在屏幕上的所有内容都包含在该文件中,包括你输入的sql语句。
5. 关闭spool输出
SQL> SPOOL OFF
只有关闭spool输出,才会在输出文件中看到输出的内容。
6.显示一个表的结构
SQL> desc table_name
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时,输出行的多于的字符会另起一行显示,否则,会将输出行的多于字符切除,不予显示。(默认为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.
3.修改页面显示和行的默认值
但是这种方法,在你下次进入Sql Plus的时候还要重新设定,很麻烦。所以可以修改默认设置。
在Oracle的安装目录下找到glogin.sql,
我安装的是Oracle 11,这个文件在D:\oracle\product\11.2.0\dbhome_1\sqlplus\admin下,用搜索很容易找到。然后打开这个文件,
得到:
--
-- Copyright (c) 1988, 2005, Oracle. All Rights Reserved.
--
-- NAME
-- glogin.sql
--
-- DESCRIPTION
-- SQL*Plus global login "site profile" file
--
-- Add any SQL*Plus commands here that are to be executed when a
-- user starts SQL*Plus, or uses the SQL*Plus CONNECT command.
set linesize 300 ;
set pagesize 100 ;
更多详细内容参见:http://blog.csdn.net/kkdelta/article/details/7178890
4.对于clob和blob以及to_char和to_clob之间的讨论
(1)clob和blob介绍
(2)实际项目中遇到的问题
在sqlplus中查询clob类型的数据默认是不能显示全的,默认一行显示80个字符(多的会切割掉),不管是否设置set linesize 什么的,这是对clob的限制,例如:
select sql_fulltext from v$sql;就会发现每行只能显示80个字符。
有几种办法显示全:
方法一:select dbms_lob.substr(sql_fulltext) from v$sql;
#注意,这样虽然显示全了,但是在后面还是会出问题,虽然这次不切割了,会在最后提示错误:ERROR:
ORA-06502: PL/SQL: 数字或值错误
: 字符串缓冲区太小
ORA-06512: 在 line 1
所以实际上没有解决。哈哈哈哈
方法二:其实是可以设置参数解决上面的错误
SQLPLUS输出CLOB类型的数据时经常会碰到数据被截断从而无法完全输出的问题,其实这些都是因为sqlplus参数设置的原因,本文将对几个主要的参数进行讨论。
1、set long 2000000000
首先是long参数,该参数的最大值是2000000000(2G),单位是字节。含义是:Sets maximum width (in bytes) for displaying CLOB, LONG, NCLOB and XMLType values; and for copying LONG values.中文含义大概是设置CLOB、LONG、NLOB和XMLType类型的最大显示字节数。
2、set longchunksize 255
与long参数相关的是longchunksize参数,该参数的值应该比long参数的值要小,单位也是字节。含义是:Sets the size (in bytes) of the increments SQL*Plus uses to retrieve a CLOB, LONG, NCLOB or XMLType value.即sqlplus会按照这个参数的值来一段一段的获取上述类型的数据,直到达到long的值或者数据获取完毕。
举例:
数据有10个字节:0123456789
如果set longchunksize 2,那么显示出来的效果就是
01
23
45
67
89
如果set longchunksize 4,那么显示出来的效果就是
0123
4567
89
3、set linesize 255
这个参数用的很频繁,相信含义大家也都知道:Sets the total number of characters that SQL*Plus displays on one line before beginning a new line.这个参数是用来控制sqlplus显示的,而longchunksize是用来控制sqlplus获取数据的,所以如果这个参数设置不当也不能完全显示。
举例:
数据有10个字节:0123456789
set longchunksize 4
set linesize 3
显示效果如下
012 --3无法显示
456 --7无法显示
89
所以想正确显示select sql_fulltext from v$sql; 的方法就是设置set long 2000000000,真的最大2G,换其他的还真不行,嘻嘻。set longchunksize 255。
然后就可以正常查询了,注意不要用dbms_lob.substr了哦,直接select sql_fulltext from v$sql;就可以啦
方法三:编写程序(反正我是没看懂)
给你一个我写的读lob的plsql作为参考:
create or
replace procedure haozhu_getblob(
table_name in varchar2,
field_id in
varchar2,
field_name in varchar2,
v_id in varchar2,
v_pos in number
)
is
lobloc clob;
buffer varchar2(32767);
amount number := 60;
offset number := 1;
query_str varchar2(1000);
create_str
varchar2(1000);
bloblength number;
ddlcursor integer;
begin
query_str :=‘select DBMS_LOB.GETLENGTH(‘||field_name||‘) from ‘||table_name||‘
where ‘||field_id||‘= :id‘;
--dbms_output.put_line(‘query_str is
‘||query_str);
EXECUTE IMMEDIATE query_str INTO bloblength USING v_id;
--dbms_output.put_line(‘The length of blob is ‘||bloblength);
query_str
:=‘select ‘||field_name||‘ from ‘||table_name||‘ where ‘||field_id||‘= :id‘;
EXECUTE IMMEDIATE query_str INTO lobloc USING v_id;
offset:=offset+(v_pos-1)*amount;
while (offset<=bloblength) loop
--dbms_output.put_line(‘offset: ‘||offset);
--read 2000 varchar2 from the
buffer
dbms_lob.read(lobloc,amount,offset,buffer);
dbms_output.put_line(buffer);
offset:=offset+amount;
end loop;
end;
/
O(∩_∩)O哈哈~,这篇完,后面还会用到跟clob相关的内容,当时纠结死了
标签:des style blog class tar ext
原文地址:http://www.cnblogs.com/zmlctt/p/3721121.html