存档
Sybase ASE自15.0.2后增加了用户自定义函数的功能。
在Sybase中,以 2010-10-18 12:30:01格式显示日期数据时,用convert函数不能实现,需要替换一下字符。
select convert(varchar,getdate(),117)
go
------------------------------
2010/10/18 20:51:10
(1 row affected)
利用函数str_replace替换上面返回的日期字符串中的/为-
str_replace(convert(char(19),getdate(),117),'/','-')
1> select str_replace(convert(char(19),getdate(),117),'/','-')
2> go-------------------
2010-10-18 20:53:13(1 row affected)
在oracle的sqlplus中有一个命令:desc,能够简要的显示基表、视图等的结构。desc的显示结果简单明了,比较实用。虽然在Sybase ASE中的存储过程sp_help也能实现查看表结构的目的;但是,显示结果很多尤其换行混乱,让人看得眼花缭乱。显示的存储过程:sp_desc能够实现oracle的sqlplus中desc相同的功能,仅仅多了一列:列序号。
效果图如下:
存储过程sp_desc的语法如下:
前面有篇文章中,介绍利用游标和sp_spaceused来查看数据库内所有表占用的空间,并倒序排序。
统计SQL SERVER数据库内所有表占用空间并排序
下面介绍另外一种方法:利用sp_MSforeachtable替代游标来实现上篇文章中的类似功能。
use ossdb
go--------查看所有表空间使用情况
CREATE TABLE #T(
name nvarchar(256),
rows varchar(11),
reserved varchar(18),
data varchar(18),
index_size varchar(18),
unused varchar(18)
)EXEC sp_MSforeachtable "INSERT #T EXEC sp_spaceused '?'"
SELECT * FROM #T ORDER BY Convert(int,SubString(data,1,Len(data)-3)) DESC
drop table #T
go
测试通过,将ossdb改成用户数据库名字即可。
把从Sybase或其它类型数据库导出的文本文件再次导入到sybase数据库的时候,bcp是个很好的工具。
本博客已有3篇关于bcp的文章:
如果要用bcp导入很多的表,对每一个表都要写一条语句是件很费劲的事情,尤其表数量很多的时候。简单的方法呢?
第一种方法: 利用SQL语句
在bcp out导出数据的时候,也就是生成相应的bcp out命令语句的时候,也同时生成bcp in导入的命令语句。
生成导出语句的SQL为:
select "bcp "+db_name()+"."+user_name(uid)+"."+name+" out /tmp/databcpout/" +name+ ".txt -Usa -P<sa_passwd> -S<server_name> -c -T10000000 " from sysobjects where type='U' order by name
其中: 将<sa_passwd>,server_name> 分别替换成sa的密码和数据库服务器名。或者用对想要导出的表有查询权限的用户也行。
在solaris系统中,tar命令中排除指定目录和文件的参数与linux中tar命令不同。
在solaris 10中,可以这么用。
比如:我想打开目录/sybase到/tmp/sybase.tar,排除目录/sybase下的两个文件:EBF17156.tar和
cd /sybase
echo /sybase/EBF17156.tar > excludefile
echo /sybase/ase1503_solsparc64_2.tar >> excludefile
tar cvfX /tmp/sybase.tar excludefile /sybase
Java数据库连接(JDBC)由一组用 Java 编程语言编写的类和接口组成。JDBC 为工具/数据库开发人员提供了一个标准的 API,使他们能够用纯Java API 来编写数据库应用程序。然而各个开发商的接口并不完全相同,所以开发环境的变化会带来一定的配置变化。本文主要集合了不同数据库的连接方式。
一、连接各种数据库方式速查表
下面罗列了各种数据库使用JDBC连接的方式,可以作为一个手册使用。
1、Oracle8/8i/9i数据库(thin模式)
Java代码
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
String url="jdbc:oracle:thin:@localhost:1521:orcl"; //orcl为数据库的SID
String user="test";
String password="test";
Connection conn= DriverManager.getConnection(url,user,password);
2、DB2数据库
Java代码
Class.forName("com.ibm.db2.jdbc.app.DB2Driver").newInstance();
String url="jdbc:db2://localhost:5000/sample"; //sample为你的数据库名
String user="admin";
String password="";
Connection conn= DriverManager.getConnection(url,user,password);
演示在用java连接Sybase ASE数据库。用了一个简单的java程序作试验。
第一步:获得jdbc for sybase驱动程序
下载JDBC驱动:http://www.sybase.com/detail?id=1009726
也可到CSDN下载:http://download.csdn.net/source/2697077
有jConnect6.05和jConnect5.5两种。jConnect6.05中包含jconn3.jar包,jConnect5.5中包含jconn2.jar包。建议最新的Sybase驱动jconn3.jar。不过我的这个例子很简单,两者都可以用。
下载:jconn3.jar ,下载:jconn2.jar
第二步:设置环境变量CLASSPATH
将下载下来的jconn2.jar或jconn3.jar放到目录D:\sybase\Shared\lib下。将环境变量CLASSPATH设置为:D:\sybase\Shared\lib\jconn2.jar
set CLASSPATH=.;d:\sybase\shared\lib\jconn2.jar; (注意:第一个“.”,这个代表当前目录。)
第三步:编写一段简单的java程序。
下面的这段程序用jconn2.jar连接Sybase ASE15.0.3数据库并提取master数据库中的用户表的ID和name两列信息。
Sybase ASE数据库的ip地址为:192.168.0.168,端口:5000。登录sa的密码为:sybase
执行:select id,name,crdate from dbo.sysobjects where type='U' 这条语句返回当前数据库(这在url中指定!)中的用户表的id和name列。
以下存储过程能够自动批量删除数据库库内的所有用户表。
可以修改存储过程内的条件来删除指定的表。
删除表时请谨慎!
CREATE PROCEDURE sp_drop_tbl
AS
BEGIN
DECLARE @tblname varchar(80)
DECLARE @dropsql varchar(100)
DECLARE cur1 CURSOR FOR
SELECT name FROM dbo.sysobjects WHERE type = 'U'
OPEN cur1
FETCH cur1 INTO @tblname
WHILE (@@SQLSTATUS = 0)
BEGIN
SELECT @dropsql = "DROP TABLE " + @tblname
EXEC (@dropsql)
FETCH cur1 INTO @tblname
END
CLOSE cur1
DEALLOCATE cursor cur1
END