SQLPlus :http://www.orafaq.com/wiki/SQL*Plus_FAQ
http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14261/sqloperations.htm
1. Transfer values from a sql scripts:
CNT=`sqlplus -s username/password1@dbname @getUVQuery_NULLCNT`;
Note : Remeber to use option "-s" (-s or -silent -- start sqlplus in silent mode. Not recommended for beginners!)
if not use "-s" , will return something as below :
SQL*Plus: Release 10.2.0.3.0 - Production on Tue Feb 9 11:03:08 2010
Copyright (c) 1982, 2006, Oracle. All Rights Reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
0
Disconnected from Oracl ......
最近在搞性能优化,由于项目的需要,我们必须尽可能的减少数据库的调用,于是我们做了不少的优化,比如原先需要3个数据库调用的,现在我们把它整合到一个存储过程中,这样只需要一个方法即可。
但这也产生了另外一个问题,之前我们是使用MS SQL Profiler去跟踪数据库的调用的,由于整合了不少存储过程,比如原先需要三个存储过程做三件事,之后我们新增加了一个存储过程,在这个存储过程中调用这三个原有的存储过程,这样在MS SQL Profiler就会显示出4个存储过程,那这样测试下来,反而性能下降了,因为调用的存储过程多了。
如何把这些内嵌的存储过程过滤掉呢?
其实很简单,只要在MS SQL Profiler里面增加一列,NestLevel,把它的过滤设置为等于1即可,这样就可以过滤掉内嵌的存储过程了。 ......
AspNetPager是一个比较好的分页控件,该控件使用过程分页十分方便,过程如下:
Create PROCEDURE [dbo].[pt_AspNetPager]
(
@tableName varchar(255), -- 表名
@fieldName varchar(400)= '*', -- 字段名
@strWhere varchar(255) = Null,
@fieldOrder varchar(100), --不能为空
@startIndex int,
@endIndex int
)
AS
declare @strSQL varchar(4000)
begin
set @strSQL='WITH temp AS (SELECT ROW_NUMBER() OVER (ORDER BY '+@fieldOrder+') as row,'+@fieldName+' from '+@tableName
if @strWhere<>''
SELECT @strSQL=@strSQL+' where '+@strWhere
SELECT @strSQL=@strSQL+')'
SELECT @strSQL=@strSQL+' SELECT * from temp where row between '+cast(@startIndex as varchar(10))+' and '+cast(@endIndex as varchar(10))
print @strSQL
exec (@strSQL)
END
......
远程连接sql server 2000服务器的解决方案
----转自:飞狐小屋
由于特定需求,最近实验室需要远程连接外地的sql server 2000服务器,最开始怎么连也连不上,出现了很多问题,但是在今天上午,借用实验室的测试条件(一个公网IP,两个教育网静态IP),终于调试通过,也算是完成了老师的任务,在这里写下自己的心得,参考了很多网上的文章和论坛里的问题,希望对有此需要的有帮助。不完善之处,也请留言。废话少说,进入主题。
步骤:
一 看ping 服务器IP能否ping通。
这个实际上是看和远程sql server 2000服务器的物理连接是否存在。如果不行,请检查网络,查看配置,当然得确保远程sql server 2000服务器的IP拼写正确。
二 在Dos或命令行下输入telnet 服务器IP 端口,看能否连通。
如telnet 202.114.100.100 1433
通常端口值是1433,因为1433是sql server 2000的对于Tcp/IP的默认侦听端口。如果有问 ......
CREATE proc page
@RecordCount int output,
@QueryStr nvarchar(100)='table1',--表名、视图名、查询语句
@PageSize int=20, --每页的大小(行数)
@PageCurrent int=2, --要显示的页 从0开始
@FdShow nvarchar (1000)='*', --要显示的字段列表
@IdentityStr nvarchar (100)='id', --主键
@WhereStr nvarchar (200)='1=1',
@FdOrder nvarchar(100)='desc' --排序 只能取desc或者asc
as
declare
@sql nvarchar(2000)
set @sql = ''
if @WhereStr = ''
set @WhereStr = '1=1'
if @PageCurrent = 0 begin
set @sql = 'select top ' + cast(@PageSize as nvarchar(3)) + ' ' + @FdShow + ' from ' + @QueryStr + ' where ' + @WhereStr + ' order by ' + @IdentityStr + ' ' + @FdOrder
end
else begin
if upper(@FdOrder) = 'DESC' begin
set @sql = 'select top ' + cast(@PageSize as nvarchar(3)) + ' ' + @FdShow + ' from ' + @QueryStr + ' where ' + @WhereStr + ' and ' + @IdentityStr + '< ( select min(' + @IdentityStr + ') from (select top ' + cast(@PageSize*@PageCurrent as nvarchar(10)) + ' ' + @IdentityStr + ......
输入: select ID as 编号, NAME as 姓名, AGE as 年龄 from XXX
输出:
编号
姓名
年龄
要求是如果SQL变动, 仍然要显示出来所有的别名字段信息和数据.
因为现在Hibernate用的比较广泛, 所以优先考虑用Hibernate来实现, 结果发现如果是实体映射查询语句, 可以方便的用:List<String> Query.getReturnAliases() 获得别名, 然而我们知道查询时有时候语句是很复杂的, 不全是HQL, 这时候用SQLQuery的时候, 惊讶的提示这个方法尚未实现(最新版的Hibernate 3.3 是否实现尚未测试), 用的版本是Hibernate 3.2, 对应的代码是:
DAO
/**
* 根据查询语句返回结果, 并包含结果的列名
* @param hql
* @param args
* @return
*/
public List queryAllForReport( final String hql, final Object... args) {
List list = getHibernateTemplate().executeFind(new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query query = session.createQuery(hql);
for(int i =0; i < args.length; i++) {
q ......
输入: select ID as 编号, NAME as 姓名, AGE as 年龄 from XXX
输出:
编号
姓名
年龄
要求是如果SQL变动, 仍然要显示出来所有的别名字段信息和数据.
因为现在Hibernate用的比较广泛, 所以优先考虑用Hibernate来实现, 结果发现如果是实体映射查询语句, 可以方便的用:List<String> Query.getReturnAliases() 获得别名, 然而我们知道查询时有时候语句是很复杂的, 不全是HQL, 这时候用SQLQuery的时候, 惊讶的提示这个方法尚未实现(最新版的Hibernate 3.3 是否实现尚未测试), 用的版本是Hibernate 3.2, 对应的代码是:
DAO
/**
* 根据查询语句返回结果, 并包含结果的列名
* @param hql
* @param args
* @return
*/
public List queryAllForReport( final String hql, final Object... args) {
List list = getHibernateTemplate().executeFind(new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query query = session.createQuery(hql);
for(int i =0; i < args.length; i++) {
q ......