﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-关注基于J2EE的系统设计与实现,总结项目经验与思考。-随笔分类-数据库相关</title><link>http://www.blogjava.net/NeonWay/category/8257.html</link><description>spring、hibernate、webwork框架实践与探索。</description><language>zh-cn</language><lastBuildDate>Thu, 01 Mar 2007 01:31:29 GMT</lastBuildDate><pubDate>Thu, 01 Mar 2007 01:31:29 GMT</pubDate><ttl>60</ttl><item><title>摘：SQL Server 数据行大小</title><link>http://www.blogjava.net/NeonWay/archive/2006/11/03/78863.html</link><dc:creator>王彦锋的技术实践</dc:creator><author>王彦锋的技术实践</author><pubDate>Fri, 03 Nov 2006 02:20:00 GMT</pubDate><guid>http://www.blogjava.net/NeonWay/archive/2006/11/03/78863.html</guid><wfw:comment>http://www.blogjava.net/NeonWay/comments/78863.html</wfw:comment><comments>http://www.blogjava.net/NeonWay/archive/2006/11/03/78863.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/NeonWay/comments/commentRss/78863.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/NeonWay/services/trackbacks/78863.html</trackback:ping><description><![CDATA[
		<div id="articleContent">
				<p>
						<font size="2">我们看到有些数据库表中有两个字段，类型分别为 varchar(8000)、varchar(8000)，我们说这种设计是错误的，为什么呢？</font>
				</p>
				<p>
						<font size="2">SQL Server 存储中有个“页”的概念，一个“页”是 8K 大小，而一个数据行（一条记录）必须存储在一个页中，不能拆开存储在多个页中，也就是说一个数据行（一条记录）的大小最多是 8K，实际上由于 SQL Server 的页还具有页头，某些类型的字段还要额外占用一些空间，<strong>一个数据行（一条记录）的最大大小常常也只有七千多字节</strong>。</font>
				</p>
				<p>
						<font size="2">上述表设计中一个字段就达到了 8000 字节，不要说一个数据行（一条记录）了。</font>
				</p>
				<p>
						<font size="2">有人说，我虽然指定的是 8000 字节，但我存储时不存储满总可以了吧。技术上是允许的，但既然我们用不了那么多字节，为什么要写那么大呢？是不是考虑我们得用 text 字段，或者修改一下表结构。</font>
				</p>
				<p>
						<font size="2">如果一个数据行（一条记录）足够的小，一个页就可以存储更多的数据行（记录），SQL Server 查询时就不用翻太多的页，查询起来就会更快。<br /><br />引用地址：<a href="http://www.cftea.com/c/2006/10/TNRWRCF871NS33K4.asp">http://www.cftea.com/c/2006/10/TNRWRCF871NS33K4.asp</a></font>
				</p>
		</div>
<img src ="http://www.blogjava.net/NeonWay/aggbug/78863.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/NeonWay/" target="_blank">王彦锋的技术实践</a> 2006-11-03 10:20 <a href="http://www.blogjava.net/NeonWay/archive/2006/11/03/78863.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> 转－SQL Server开发人员应聘常被问的问题妙解汇总</title><link>http://www.blogjava.net/NeonWay/archive/2006/11/01/78415.html</link><dc:creator>王彦锋的技术实践</dc:creator><author>王彦锋的技术实践</author><pubDate>Wed, 01 Nov 2006 02:00:00 GMT</pubDate><guid>http://www.blogjava.net/NeonWay/archive/2006/11/01/78415.html</guid><wfw:comment>http://www.blogjava.net/NeonWay/comments/78415.html</wfw:comment><comments>http://www.blogjava.net/NeonWay/archive/2006/11/01/78415.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/NeonWay/comments/commentRss/78415.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/NeonWay/services/trackbacks/78415.html</trackback:ping><description><![CDATA[
		<div style="MARGIN-TOP: 1px; MARGIN-LEFT: 15px">
				<span class="dark_c" style="FONT-WEIGHT: bold; FONT-SIZE: 14pt">转－SQL Server开发人员应聘常被问的问题妙解汇总 </span>
		</div>
		<div style="MARGIN-TOP: 5px; MARGIN-LEFT: 15px">
				<b>关键字:</b> 工作        </div>
		<div style="MARGIN-TOP: 10px; MARGIN-LEFT: 15px">
				<table width="100%">
						<tbody>
								<tr>
										<td>
												<p>
														<br />目前在职场中很难找到非常合格的数据库开发人员。我的一个同事曾经说过:“SQL开发是一门语言，它很容易学，但是很难掌握。”</p>
												<p>　　在面试应聘的SQL Server数据库开发人员时，我运用了一套标准的基准技术问题。下面这些问题是我觉得能够真正有助于淘汰不合格应聘者的问题。它们按照从易到难的顺序排列。当您问到关于主键和外键的问题时，后面的问题都十分有难度，因为答案可能会更难解释和说明，尤其是在面试的情形下。</p>
												<p>　　您能向我简要叙述一下SQL Server 2000中使用的一些数据库对象吗?</p>
												<p>　　您希望听到的答案包括这样一些对象:表格、视图、用户定义的函数，以及存储过程;如果他们还能够提到像触发器这样的对象就更好了。如果应聘者不能回答这个基本的问题，那么这不是一个好兆头。</p>
												<p>　　什么是索引?SQL Server 2000里有什么类型的索引?</p>
												<p>　　任何有经验的数据库开发人员都应该能够很轻易地回答这个问题。一些经验不太多的开发人员能够回答这个问题，但是有些地方会说不清楚。</p>
												<p>　　简单地说，索引是一个数据结构，用来快速访问数据库表格或者视图里的数据。在SQL Server里，它们有两种形式:聚集索引和非聚集索引。聚集索引在索引的叶级保存数据。这意味着不论聚集索引里有表格的哪个(或哪些)字段，这些字段都会按顺序被保存在表格。由于存在这种排序，所以每个表格只会有一个聚集索引。非聚集索引在索引的叶级有一个行标识符。这个行标识符是一个指向磁盘上数据的指针。它允许每个表格有多个非聚集索引。</p>
												<p>　　NULL是什么意思?</p>
												<p>　　NULL(空)这个值是数据库世界里一个非常难缠的东西，所以有不少应聘者会在这个问题上跌跟头您也不要觉得意外。</p>
												<p>　　NULL这个值表示UNKNOWN(未知):它不表示“”(空字符串)。假设您的SQL Server数据库里有ANSI_NULLS，当然在默认情况下会有，对NULL这个值的任何比较都会生产一个NULL值。您不能把任何值与一个 UNKNOWN值进行比较，并在逻辑上希望获得一个答案。您必须使用IS NULL操作符。</p>
												<p>　　什么是主键?什么是外键?</p>
												<p>　　主键是表格里的(一个或多个)字段，只用来定义表格里的行;主键里的值总是唯一的。外键是一个用来建立两个表格之间关系的约束。这种关系一般都涉及一个表格里的主键字段与另外一个表格(尽管可能是同一个表格)里的一系列相连的字段。那么这些相连的字段就是外键。</p>
												<p>　　什么是触发器?SQL Server 2000有什么不同类型的触发器?</p>
												<p>　　让未来的数据库开发人员知道可用的触发器类型以及如何实现它们是非常有益的。</p>
												<p>　　触发器是一种专用类型的存储过程，它被捆绑到SQL Server 2000的表格或者视图上。在SQL Server 2000里，有INSTEAD-OF和AFTER两种触发器。INSTEAD-OF触发器是替代数据操控语言(Data Manipulation Language，DML)语句对表格执行语句的存储过程。例如，如果我有一个用于TableA的INSTEAD-OF-UPDATE触发器，同时对这个表格执行一个更新语句，那么INSTEAD-OF-UPDATE触发器里的代码会执行，而不是我执行的更新语句则不会执行操作。</p>
												<p>　　AFTER触发器要在DML语句在数据库里使用之后才执行。这些类型的触发器对于监视发生在数据库表格里的数据变化十分好用。</p>
												<p>　　您如何确一个带有名为Fld1字段的TableB表格里只具有Fld1字段里的那些值，而这些值同时在名为TableA的表格的Fld1字段里?</p>
												<p>　　这个与关系相关的问题有两个可能的答案。第一个答案(而且是您希望听到的答案)是使用外键限制。外键限制用来维护引用的完整性。它被用来确保表格里的字段只保存有已经在不同的(或者相同的)表格里的另一个字段里定义了的值。这个字段就是候选键(通常是另外一个表格的主键)。</p>
												<p>　　另外一种答案是触发器。触发器可以被用来保证以另外一种方式实现与限制相同的作用，但是它非常难设置与维护，而且性能一般都很糟糕。由于这个原因，微软建议开发人员使用外键限制而不是触发器来维护引用的完整性。</p>
												<p>对一个投入使用的在线事务处理表格有过多索引需要有什么样的性能考虑?</p>
												<p>　　您正在寻找进行与数据操控有关的应聘人员。对一个表格的索引越多，数据库引擎用来更新、插入或者删除数据所需要的时间就越多，因为在数据操控发生的时候索引也必须要维护。</p>
												<p>　　您可以用什么来确保表格里的字段只接受特定范围里的值?</p>
												<p>　　这个问题可以用多种方式来回答，但是只有一个答案是“好”答案。您希望听到的回答是Check限制，它在数据库表格里被定义，用来限制输入该列的值。</p>
												<p>　　触发器也可以被用来限制数据库表格里的字段能够接受的值，但是这种办法要求触发器在表格里被定义，这可能会在某些情况下影响到性能。因此，微软建议使用Check限制而不是其他的方式来限制域的完整性。</p>
												<p>　　返回参数和OUTPUT参数之间的区别是什么?</p>
												<p>　　如果应聘者能够正确地回答这个问题，那么他的机会就非常大了，因为这表明他们具有使用存储过程的经验。</p>
												<p>　　返回参数总是由存储过程返回，它用来表示存储过程是成功还是失败。返回参数总是INT数据类型。</p>
												<p>　　OUTPUT参数明确要求由开发人员来指定，它可以返回其他类型的数据，例如字符型和数值型的值。(可以用作输出参数的数据类型是有一些限制的。)您可以在一个存储过程里使用多个OUTPUT参数，而您只能够使用一个返回参数。</p>
												<p>　　什么是相关子查询?如何使用这些查询?</p>
												<p>　　经验更加丰富的开发人员将能够准确地描述这种类型的查询。</p>
												<p>　　相关子查询是一种包含子查询的特殊类型的查询。查询里包含的子查询会真正请求外部查询的值，从而形成一个类似于循环的状况。</p>
												<p>　　关于面试过程的思考</p>
												<p>　　这些问题只不过是确定一个SQL Server数据库开发人员是否合格的起点。根据应聘者对上面这些问题的回答情况，我可能会要求他们参加我的TSQL编程考试，这一般是一套根据不同情况进行的10到12个数据库查询。</p>
												<p>　　您需要自己决定将要雇用的开发人员具有什么样的专业技能。然后，需要通过自己的经验、判断以及在面试时对应聘者的感受(来做最终决定)。</p>
												<p>　　您在面试数据库开发人员时一般会问哪些问题呢?让我们一起来讨论一下吧。</p>
												<p>　　Tim Chapman是肯塔基州路易维尔市一家银行的SQL Server数据库管理员，他有超过7年的行业经验。他还通过了微软SQL Server 2000和SQL Server 2005的认证。 </p>
										</td>
								</tr>
						</tbody>
				</table>
		</div>引：<a href="http://jaaacky.javaeye.com/blog/31571">http://jaaacky.javaeye.com/blog/31571</a><img src ="http://www.blogjava.net/NeonWay/aggbug/78415.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/NeonWay/" target="_blank">王彦锋的技术实践</a> 2006-11-01 10:00 <a href="http://www.blogjava.net/NeonWay/archive/2006/11/01/78415.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jtds 比微软的jdbc驱动好太多了。</title><link>http://www.blogjava.net/NeonWay/archive/2006/09/13/69491.html</link><dc:creator>王彦锋的技术实践</dc:creator><author>王彦锋的技术实践</author><pubDate>Wed, 13 Sep 2006 14:30:00 GMT</pubDate><guid>http://www.blogjava.net/NeonWay/archive/2006/09/13/69491.html</guid><wfw:comment>http://www.blogjava.net/NeonWay/comments/69491.html</wfw:comment><comments>http://www.blogjava.net/NeonWay/archive/2006/09/13/69491.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/NeonWay/comments/commentRss/69491.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/NeonWay/services/trackbacks/69491.html</trackback:ping><description><![CDATA[
		<p>性能有提高，很明显。</p>
<img src ="http://www.blogjava.net/NeonWay/aggbug/69491.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/NeonWay/" target="_blank">王彦锋的技术实践</a> 2006-09-13 22:30 <a href="http://www.blogjava.net/NeonWay/archive/2006/09/13/69491.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于 java 连接oracle的 Io 异常: Got minus one from a read call</title><link>http://www.blogjava.net/NeonWay/archive/2006/08/04/61773.html</link><dc:creator>王彦锋的技术实践</dc:creator><author>王彦锋的技术实践</author><pubDate>Fri, 04 Aug 2006 07:43:00 GMT</pubDate><guid>http://www.blogjava.net/NeonWay/archive/2006/08/04/61773.html</guid><wfw:comment>http://www.blogjava.net/NeonWay/comments/61773.html</wfw:comment><comments>http://www.blogjava.net/NeonWay/archive/2006/08/04/61773.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/NeonWay/comments/commentRss/61773.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/NeonWay/services/trackbacks/61773.html</trackback:ping><description><![CDATA[
		<p>
				<font size="1">今日无意中用java连接oracle时，竟出现以下异常，甚是奇怪：<br />Caused by: java.sql.SQLException: Io 异常: Got minus one from a read call<br /> at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)<br /> at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:179)<br /> at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:333)<br /> at oracle.jdbc.driver.OracleConnection.&lt;init&gt;(OracleConnection.java:404)<br /> at oracle.jdbc.driver.OracleDriver.getConnectionInstance(OracleDriver.java:468)<br /> at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:314)<br /> at org.apache.commons.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:37)<br /> at org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:290)<br /> at org.apache.commons.dbcp.BasicDataSource.validateConnectionFactory(BasicDataSource.java:877)<br /> at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:851)<br />.....<br />经检查，原来是连接端口配置错误，奇怪的是为什么不是 Io 异常: The Network Adapter could not establish the connection呢,用端口1433会出现该现象。</font>
		</p>
<img src ="http://www.blogjava.net/NeonWay/aggbug/61773.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/NeonWay/" target="_blank">王彦锋的技术实践</a> 2006-08-04 15:43 <a href="http://www.blogjava.net/NeonWay/archive/2006/08/04/61773.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQL*Plus系统环境变量有哪些？如何修改？</title><link>http://www.blogjava.net/NeonWay/archive/2006/03/08/34320.html</link><dc:creator>王彦锋的技术实践</dc:creator><author>王彦锋的技术实践</author><pubDate>Wed, 08 Mar 2006 10:20:00 GMT</pubDate><guid>http://www.blogjava.net/NeonWay/archive/2006/03/08/34320.html</guid><wfw:comment>http://www.blogjava.net/NeonWay/comments/34320.html</wfw:comment><comments>http://www.blogjava.net/NeonWay/archive/2006/03/08/34320.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/NeonWay/comments/commentRss/34320.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/NeonWay/services/trackbacks/34320.html</trackback:ping><description><![CDATA[<P>show和set命令是两条用于维护SQL*Plus系统变量的命令</P>
<P>&nbsp;&nbsp;SQL&gt; show all --查看所有68个系统变量值</P>
<P>&nbsp;&nbsp;SQL&gt; show user --显示当前连接用户</P>
<P>&nbsp;&nbsp;SQL&gt; show error　　　　　　　　　　　　　　　 --显示错误</P>
<P>&nbsp;&nbsp;SQL&gt; set heading off --禁止输出列标题，默认值为ON</P>
<P>&nbsp;&nbsp;SQL&gt; set feedback off --禁止显示最后一行的计数反馈信息，默认值为"对6个或更多的记录，回送ON"</P>
<P>&nbsp;&nbsp;SQL&gt; set timing on --默认为OFF，设置查询耗时，可用来估计SQL语句的执行时间，测试性能</P>
<P>&nbsp;&nbsp;SQL&gt; set sqlprompt "SQL&gt; " --设置默认提示符，默认值就是"SQL&gt; "</P>
<P>&nbsp;&nbsp;SQL&gt; set linesize 1000 --设置屏幕显示行宽，默认100</P>
<P>&nbsp;&nbsp;SQL&gt; set autocommit ON --设置是否自动提交，默认为OFF</P>
<P>&nbsp;&nbsp;SQL&gt; set pause on --默认为OFF，设置暂停，会使屏幕显示停止，等待按下ENTER键，再显示下一页</P>
<P>&nbsp;&nbsp;SQL&gt; set arraysize 1 --默认为15</P>
<P>&nbsp;&nbsp;SQL&gt; set long 1000 --默认为80</P>
<P>&nbsp;&nbsp;说明：<BR>&nbsp;&nbsp;long值默认为80，设置1000是为了显示更多的内容，因为很多数据字典视图中用到了long数据类型，如：</P>
<P>&nbsp;&nbsp;SQL&gt; desc user_views<BR>&nbsp;&nbsp;列名 可空值否 类型<BR>&nbsp;&nbsp;------------------------------- -------- ----<BR>&nbsp;&nbsp;VIEW_NAME NOT NULL VARCHAR2(30)<BR>&nbsp;&nbsp;TEXT_LENGTH NUMBER<BR>&nbsp;&nbsp;TEXT LONG</P>
<P>&nbsp;&nbsp;SQL&gt; define a = '''20000101 12:01:01''' --定义局部变量，如果想用一个类似在各种显示中所包括的回车那样的常量，<BR>&nbsp;&nbsp;--可以用define命令来设置<BR>&nbsp;&nbsp;SQL&gt; select &amp;a from dual;<BR>&nbsp;&nbsp;原值 1: select &amp;a from dual<BR>&nbsp;&nbsp;新值 1: select '20000101 12:01:01' from dual</P>
<P>&nbsp;&nbsp;'2000010112:01:01<BR>&nbsp;&nbsp;-----------------<BR>&nbsp;&nbsp;20000101 12:01:01</P>
<P><BR>&nbsp;&nbsp;问题提出：<BR>&nbsp;&nbsp;1、用户需要对数据库用户下的每一张表都执行一个相同的SQL操作，这时，一遍、一遍的键入SQL语句是很麻烦的</P>
<P>&nbsp;&nbsp;实现方法：<BR>&nbsp;&nbsp;SQL&gt; set heading off --禁止输出列标题<BR>&nbsp;&nbsp;SQL&gt; set feedback off --禁止显示最后一行的计数反馈信息</P>
<P>&nbsp;&nbsp;列出当前用户下所有同义词的定义，可用来测试同义词的真实存在性<BR>&nbsp;&nbsp;select 'desc '||tname from tab where tabtype='SYNONYM';</P>
<P>&nbsp;&nbsp;查询当前用户下所有表的记录数<BR>&nbsp;&nbsp;select 'select '''||tname||''',count(*) from '||tname||';' from tab where tabtype='TABLE';</P>
<P>&nbsp;&nbsp;把所有符合条件的表的select权限授予为public<BR>&nbsp;&nbsp;select 'grant select on '||table_name||' to public;' from user_tables where 《条件》;</P>
<P>&nbsp;&nbsp;删除用户下各种对象<BR>&nbsp;&nbsp;select 'drop '||tabtype||' '||tname from tab;</P>
<P>&nbsp;&nbsp;删除符合条件用户<BR>&nbsp;&nbsp;select 'drop user '||username||' cascade;' from all_users where user_id&gt;25;</P>
<P>&nbsp;&nbsp;快速编译所有视图<BR>&nbsp;&nbsp;----当在把数据库倒入到新的服务器上后(数据库重建)，需要将视图重新编译一遍，<BR>&nbsp;&nbsp;----因为该表空间视图到其它表空间的表的连接会出现问题，可以利用PL/SQL的语言特性，快速编译。</P>
<P>&nbsp;&nbsp;SQL&gt; SPOOL ON.SQL<BR>&nbsp;&nbsp;SQL&gt; SELECT'ALTER VIEW '||TNAME||' COMPILE;' FROM TAB;<BR>&nbsp;&nbsp;SQL&gt; SPOOL OFF<BR>&nbsp;&nbsp;然后执行ON.SQL即可。<BR>&nbsp;&nbsp;SQL&gt; @ON.SQL<BR>&nbsp;&nbsp;当然，授权和创建同义词也可以快速进行，如：<BR>&nbsp;&nbsp;SQL&gt; SELECT 'GRANT SELECT ON '||TNAME||' TO 用户名;' FROM TAB;<BR>&nbsp;&nbsp;SQL&gt; SELECT 'CREATE SYNONYM '||TNAME||' FOR 用户名.'||TNAME||';' FROM TAB;</P>
<P>&nbsp;&nbsp;SQL*PLUS常用命令列表</P>
<P>&nbsp;&nbsp;[ 天堂之水 2002年9月18日，阅读人数36人 ]</P>
<P>&nbsp;</P>
<P><BR>&nbsp;&nbsp;软件环境：<BR>&nbsp;&nbsp;1、Windows 98 第二版<BR>&nbsp;&nbsp;2、Oracle数据库版本为：Personal Oracle7 Release 7.3.4.0.0<BR>&nbsp;&nbsp;3、Oracle安装路径为：C:\ORAWIN95</P>
<P>&nbsp;&nbsp;命令列表：<BR>&nbsp;&nbsp;假设当前执行命令为：select * from tab;</P>
<P>&nbsp;&nbsp;(a)ppend　　　　 添加文本到缓冲区当前行尾　　　　a order by tname　结果：select * from tab order by tname;<BR>&nbsp;&nbsp;　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　（注：a后面跟2个空格）<BR>&nbsp;&nbsp;(c)hange/old/new 在当前行用新的文本替换旧的文本　c/*/tname　　　　　结果：select tname from tab;<BR>&nbsp;&nbsp;(c)hange/text　　从当前行删除文本　　　　　　　　c/tab　　　　　　　结果：select tname from ;<BR>&nbsp;&nbsp;del　　　　　　　删除当前行<BR>&nbsp;&nbsp;del n　　　　　　删除第n行<BR>&nbsp;&nbsp;(i)nput 文本　　 在当前行之后添加一行<BR>&nbsp;&nbsp;(l)ist　　　　　 显示缓冲区中所有行<BR>&nbsp;&nbsp;(l)ist n　　　　 显示缓冲区中第 n 行<BR>&nbsp;&nbsp;(l)ist m n　　　 显示缓冲区中 m 到 n 行<BR>&nbsp;&nbsp;run　　　　　　　执行当前缓冲区的命令<BR>&nbsp;&nbsp;/　　　　　　　　执行当前缓冲区的命令<BR>&nbsp;&nbsp;r　　　　　　　　执行当前缓冲区的命令<BR>&nbsp;&nbsp;@文件名　　　　　运行调入内存的sql文件，如：</P>
<P>&nbsp;&nbsp;SQL&gt; edit s&lt;回车&gt;<BR>&nbsp;&nbsp;如果当前目录下不存在s.sql文件，则系统自动生成s.sql文件，<BR>&nbsp;&nbsp;在其中输入“select * from tab;”，存盘退出。</P>
<P>&nbsp;&nbsp;SQL&gt; @s&lt;回车&gt;<BR>&nbsp;&nbsp;系统会自动查询当前用户下的所有表、视图、同义词。</P>
<P>&nbsp;&nbsp;@@文件名　　　　 在.sql文件中调用令一个.sql文件时使用</P>
<P>&nbsp;&nbsp;save 文件名　　　将缓冲区的命令以文件方式存盘，缺省文件扩展名为.sql<BR>&nbsp;&nbsp;get 文件名　　　 调入存盘的sql文件<BR>&nbsp;&nbsp;start 文件名　　 运行调入内存的sql文件</P>
<P>&nbsp;&nbsp;spool 文件名　　 把这之后的各种操作及执行结果“假脱机”即存盘到磁盘文件上，默认文件扩展名为.lst<BR>&nbsp;&nbsp;spool　　　　　　显示当前的“假脱机”状态<BR>&nbsp;&nbsp;spool off　　　　停止输出</P>
<P>&nbsp;&nbsp;例：<BR>&nbsp;&nbsp;SQL&gt; spool a<BR>&nbsp;&nbsp;SQL&gt; spool<BR>&nbsp;&nbsp;正假脱机到 A.LST<BR>&nbsp;&nbsp;SQL&gt; spool off<BR>&nbsp;&nbsp;SQL&gt; spool<BR>&nbsp;&nbsp;当前无假脱机</P>
<P><BR>&nbsp;&nbsp;exit　　　　　　 退出SQL*PLUS<BR>&nbsp;&nbsp;desc 表名　　　　显示表的结构<BR>&nbsp;&nbsp;show user　　　　显示当前连接用户<BR>&nbsp;&nbsp;show error　　　 显示错误<BR>&nbsp;&nbsp;show all　　　　 显示所有68个系统变量值<BR>&nbsp;&nbsp;edit　　　　　　 打开默认编辑器，Windows系统中默认是notepad.exe，把缓冲区中最后一条SQL语句调入afiedt.buf文件中进行编辑<BR>&nbsp;&nbsp;edit 文件名　　　把当前目录中指定的.sql文件调入编辑器进行编辑</P>
<P>&nbsp;&nbsp;clear screen　　 清空当前屏幕显示</P><img src ="http://www.blogjava.net/NeonWay/aggbug/34320.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/NeonWay/" target="_blank">王彦锋的技术实践</a> 2006-03-08 18:20 <a href="http://www.blogjava.net/NeonWay/archive/2006/03/08/34320.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ORACLE相关 用户常用数据字典的查询使用方法</title><link>http://www.blogjava.net/NeonWay/archive/2006/03/08/34319.html</link><dc:creator>王彦锋的技术实践</dc:creator><author>王彦锋的技术实践</author><pubDate>Wed, 08 Mar 2006 10:18:00 GMT</pubDate><guid>http://www.blogjava.net/NeonWay/archive/2006/03/08/34319.html</guid><wfw:comment>http://www.blogjava.net/NeonWay/comments/34319.html</wfw:comment><comments>http://www.blogjava.net/NeonWay/archive/2006/03/08/34319.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/NeonWay/comments/commentRss/34319.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/NeonWay/services/trackbacks/34319.html</trackback:ping><description><![CDATA[<P>&nbsp; 查看当前用户的缺省表空间<BR>&nbsp;&nbsp;SQL&gt;select username,default_tablespace from user_users;</P>
<P>&nbsp;&nbsp;&nbsp;查看当前用户的角色<BR>&nbsp;&nbsp; SQL&gt;select * from user_role_privs;</P>
<P>&nbsp;&nbsp; 查看当前用户的系统权限和表级权限<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SQL&gt;select * from user_sys_privs;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SQL&gt;select * from user_tab_privs;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 查看用户下所有的表<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SQL&gt;select * from user_tables;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 显示用户信息(所属表空间)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; select default_tablespace,temporary_tablespace from dba_users where username='GAME';</P>
<P><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1、用户&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 查看当前用户的缺省表空间&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SQL&gt;select username,default_tablespace from user_users;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 查看当前用户的角色&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SQL&gt;select * from user_role_privs;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 查看当前用户的系统权限和表级权限&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SQL&gt;select * from user_sys_privs;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SQL&gt;select * from user_tab_privs;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 显示当前会话所具有的权限<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SQL&gt;select * from session_privs; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 显示指定用户所具有的系统权限<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SQL&gt;select * from dba_sys_privs where grantee='GAME';<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 显示特权用户<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; select * from v$pwfile_users;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 显示用户信息(所属表空间)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; select default_tablespace,temporary_tablespace from dba_users where username='GAME';<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 显示用户的PROFILE<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; select profile from dba_users where username='GAME';&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp; </P>
<P>&nbsp;&nbsp;&nbsp;&nbsp; 2、表&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 查看用户下所有的表&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SQL&gt;select * from user_tables;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 查看名称包含log字符的表&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SQL&gt;select object_name,object_id from user_objects where instr(object_name,'LOG')&gt;0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 查看某表的创建时间&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SQL&gt;select object_name,created from user_objects where object_name=upper('&amp;table_name');&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 查看某表的大小&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SQL&gt;select sum(bytes)/(1024*1024) as "size(M)" from user_segments&nbsp;&nbsp; where segment_name=upper('&amp;table_name');&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 查看放在ORACLE的内存区里的表&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SQL&gt;select table_name,cache from user_tables where instr(cache,'Y')&gt;0;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp; </P>
<P>&nbsp;&nbsp;&nbsp;&nbsp; 3、索引&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 查看索引个数和类别&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SQL&gt;select index_name,index_type,table_name from user_indexes order by table_name;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 查看索引被索引的字段&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SQL&gt;select * from user_ind_columns where index_name=upper('&amp;index_name');&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 查看索引的大小&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SQL&gt;select sum(bytes)/(1024*1024) as "size(M)" from user_segments&nbsp;&nbsp;&nbsp;&nbsp; where segment_name=upper('&amp;index_name');&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp; 4、序列号&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 查看序列号，last_number是当前值&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SQL&gt;select * from user_sequences;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp; 5、视图&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 查看视图的名称&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SQL&gt;select view_name from user_views;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 查看创建视图的select语句&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SQL&gt;set view_name,text_length from user_views;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SQL&gt;set long 2000;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 说明：可以根据视图的text_length值设定set long 的大小&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SQL&gt;select text from user_views where view_name=upper('&amp;view_name');&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp; 6、同义词&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 查看同义词的名称&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SQL&gt;select * from user_synonyms;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp; 7、约束条件&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 查看某表的约束条件&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SQL&gt;select constraint_name, constraint_type,search_condition, r_constraint_name&nbsp; from user_constraints where table_name = upper('&amp;table_name');&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SQL&gt;select c.constraint_name,c.constraint_type,cc.column_name&nbsp; from user_constraints c,user_cons_columns cc&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; where c.owner = upper('&amp;table_owner') and c.table_name = upper('&amp;table_name')&nbsp; and c.owner = cc.owner and c.constraint_name = cc.constraint_name order by cc.position;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp; 8、存储函数和过程&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 查看函数、过程、触发器的状态&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SQL&gt;select object_name,status from user_objects where object_type='FUNCTION';&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SQL&gt;select object_name,status from user_objects where object_type='PROCEDURE';&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SQL&gt;select object_name,status from user_objects where object_type='TRIGGER';<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 查看函数和过程的源代码&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SQL&gt;select text from all_source where owner=user and name=upper('&amp;plsql_name');</P>
<P>thit's ok!</P><img src ="http://www.blogjava.net/NeonWay/aggbug/34319.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/NeonWay/" target="_blank">王彦锋的技术实践</a> 2006-03-08 18:18 <a href="http://www.blogjava.net/NeonWay/archive/2006/03/08/34319.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>