存档

‘Sybase ASE’ 分类的存档,文章数:183

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相同的功能,仅仅多了一列:列序号。

效果图如下:

实现类似oracle的sqlplus中desc想类似功能的sp_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