转自:http://blog.csdn.net/Didizyp/archive/2007/07/12/1687298.aspx
前段时间从Sybase网站上当的Sybase ASE 15 Windows版(以下简称Sybase),这几天没事,便简单了解了一下。
一、安装
将下载的ase1500_de_win.zip文件解压缩,双击setup.exe。由于整个安装过程都有提示,因此不需要做太多说明,唯一要注意的是在选择安装类型时,如果想使用ODBC、OleDb或者ADO.net进行开发,一定要选择自定义安装,因为在默认情况下被安装的只有JDBC驱动,其他驱动是不会安装的。
安装完之后,可以在“控制面板”->“性能和维护”->“管理工具”的“数据源 (ODBC)”中查看一下:
其中的“Adaptive Server Enterprise”就是Sybase的ODBC驱动。
不过至此我们的安装工作还没有结束,如果不想看到自己输入的中文变成乱码,就按照下面方法去做。
请点击“开始”菜单->“所有程序”->“Sybase”->“Adaptive Server Enterprise”->“Server Config”,打开“Configure Sybase Server”窗口。在窗口左侧的Product栏中选择Adaptive,然后点击“Configure Adaptive Server...”按钮,打开“Existing Servers”窗口。在窗口选中服务器,然后点击Continue按钮进入下一窗口。输入用户名和密码,默认用户名为sa,密码为空,点击Continue。此时如果服务没启,Sybase会提示,点击“确定”,稍等片刻,“Configure Adaptive Server”窗口就出现了。
在窗口中点击“Language”按钮,打开“Language Options”窗口。
点击Character下的“Add/Remove”按钮,打开“Install Character Sets”窗口,在Available栏中选中“Unicode 3.1 UTF-8 CHaracter Set”,即utf8字符集,点击“Add”按钮,点击OK。下面再点击Character下的“Set Default”按钮,打开“Change Default Character Set”窗口,默认选中的是“Code Page 850 (Multilingual) character set”,即cp850字符集。这个字符集不对,请选中刚刚添加的utf8字符集,点击OK,回到“Language Options”窗口,然后再点击OK。由于我们对服务重新进行了设置,因此接下来需要等待一段时间。
设置完成后,打开“运行”窗口,输入命令“services.msc /s”,打开“服务”。请选中“Sybase SQLServer _ IMAGE”,IMAGE是我的Sybase服务名,点击“启动服务”按钮,等待片刻后,系统提示此次启动失败,重启操作系统。重启后,再次在“服务”中启动Sybase,如果还是提示错误,不要管他,再次启动服务一切就OK了。
服务启动后,请点击“开始”菜单->“所有程序”->“Sybase”->“Sybase Central v4.3”,打开Sybase Central,这是一个Sybase客户端工具。在左侧的Folders中点开Adaptive Server Enterprise,选中Default,右建,选择“Connect...”,打开Connect窗口。
在窗口中填写User ID为sa,Password为空,Server name选择IMAGE,Character set和Language分别设置为cp936和Chinese。注意,这里客户端设置的字符集是cp936,而非cp850、utf8或者eucgb。设置好后,点击OK,就可以开始对Sybase的操作了。
二、简单操作
1.创建数据库设备
数据库设备其实就是一个用来保存数据的文件,一个数据库通常会指定保存在一个或多个数据库设备中。
在Sybase Central的Folders中找到Database Devices(数据库设备),选中,然后在Details中双击“Add Database Device”。在弹出窗口的“Device Path”中设置存放路径和文件名称,我设置的是F:/YPJCCK/DataBase/Sybase/zhengTest.dat,点击Next。新界面是用来设置设备编号和文件大小的,这里我只设置Size为64M。点击Next,无需修改,再次点击Next:
这个界面是用来展示设置信息的,用户可以根据这些信息确定自己之前的设置是否正确。请注意Preview按钮,点击该按钮后即通过可查看到创建设备的SQL语句。Sybase Central在创建视图、存储过程及触发器等对象时同样会提供该功能。确认信息无误,点击Finish创建设备。
如果想在设备创建后查看SQL语句,请在Details中选中相应设备,右键,点击Generate DDL就可以了。
如果想删掉设备,请在Details中选中相应设备,右键,点击Delete:
这个界面是用来确认删除对象的,确认后点击Yes即可。这里也请注意Preview按钮,点击该按钮后同样可以查看到删除设备的SQL语句,而且Sybase Central在删除表、视图、存储过程及触发器等对象时也都提供了该功能。
2.创建数据库
在Sybase Central的Folders中找到Databases(数据库),选中,然后在Details中双击“Add Database”。在弹出窗口中设置数据库名称,我设置的是zhengTest,点击Next。新界面是用来为数据库指定设备的,可以指定多个,请点击Add按钮:
在弹出窗口中选中设备zhengTest,然后设置Size为32,点击OK返回,再点击Finish,数据库就被创建了。
如果想在数据库创建后查看SQL语句,请在Details中选中zhengTest,右键,点击Generate DDL。不过数据库的Generate DDL下还有两个子菜单,第一个为Create Database DDL,选择后只会看到创建数据库本身的SQL语句;第二个为Database Object DDL,点击后会出现一个对话框:
这个对话框列出了数据库中的所有对象类型,但要注意,在这个对话框中,选择了哪个类型,属于那个类型的对象的就不会出现在弹出窗口中,而没有选择的则会出现。Sybase Central对表、视图、存储过程、触发器等对象都提供了Generate DDL。
如果想删掉数据库,只要选中zhengTest,右键,点击Delete,或者在Interactive SQL(Sybase自带的一个SQL命令执行工具,) 中执行命令:
drop database zhengTest
即可。Sybase Central对表、视图、存储过程、触发器等对象也都提供了Delete。
3.创建数据表
在Sybase Central的Folders中找到zhengTest->User Tables并选中,然后在Details中双击“Add Table”,打开“New Table”窗口:
在窗口中设置Name为book,添加两个字段:
bookcode nvarchar(10) 主键
bookname nvarchar(50)
然后点击“Save and Close”按钮,这样book表就创建好了。
下面选中book表,右键,点击“View Data in Interactive SQL”,就可以在Interactive SQL中查询book的数据了。不过由于我们还没有向book表中添加过任何数据,因此看到的结果为空。请在Interactive SQL中执行以下命令:
insert into book (bookcode, bookname) values ('0000000001', 'test')
go
insert into book (bookcode, bookname) values ('0000000002', '测试')
go
然后再次执行select * from book,此时就看到刚刚插入的数据了。
不过我现在又有了个新的想法,为book表增加一个anthor,即作者字段。但一个作者似乎可以创作很多书,要是每条记录都将作者信息重复填写一遍,好麻烦啊,该怎么办呢?
请在Sybase Central中创建一个新表author,字段如下:
authorcode nvarchar(10) 主键
authorname nvarchar(20)
创建之后,在Interactive SQL中向author表插入一条数据:
insert into author (authorcode, authorname) values ('0000000001', 'Smile')
下面选中book,右键,点击Edit,修改book表如下:
新增加bookauthor字段,类型为nvarchar(10),由于增加该字段之前表中已有数据,为防止出错须选中Allow Nulls,即允许该字段为空。修改之后,在Interactive SQL中更新book表中的数据:
update book set bookauthor = '0000000001'
这时再次查询数据:
select bookcode, bookname, authorname from book, author where bookauthor *= authorcode
就看到期待已久的结果了。
如果想删掉表,只要选中book,右键,点击Delete,或者在Interactive SQL 中执行命令:
drop table dbo.book
即可。
4.创建视图
视图是虚拟的表,其特点是操作简单、使用安全。
请在Sybase Central的Folders中找到zhengTest->Views并选中,然后在Details中双击“Add View(Wizard)”,打开“Add Trigger”向导。在第一个界面中输入视图名v_book,点击Next进入下一个界面。
这个界面是用来编写代码的,除可以在文本域中编写外,还提供有“SQL Editor”和“Load”两个按钮,前者点击后会调出一个Sybase自带的编辑器,下面在编辑器中编写代码如下:
CREATE VIEW dbo.v_book
AS select bookcode, bookname, authorname
from book, author
where bookauthor *= authorcode
然后点击“Save view and close”回到刚才的界面;后者用于加载已经完成的SQL语句,这里不使用。点击Finish按钮,Sybase提示视图v_book已存在,因为刚才在编辑器中点击的是“Save view and close”,即保存视图并关闭。此时点击OK,然后点击Cancel即可。类似的界面在后面编写存储过程和触发器的时候还会遇到。
下面选中视图v_book,右键,点击“View Data in Interactive SQL”,就可以在Interactive SQL中使用v_book来查询数据了。
如果想删掉视图,只要选中v_book,右键,点击Delete,或者在Interactive SQL 中执行命令:
drop view dbo.v_book
即可。
5.创建存储过程
存储过程是一组存储在数据库服务器段执行特定操作的SQL语句,具有创建时编译、可重复使用、安全性高等特点。
最简单的存储过程(查询):
在Sybase Central的Folders中找到zhengTest->Stored Procedures并选中,然后在Details中双击“Add Procedures(Wizard)”,打开“Add Stored Procedure”向导。在第一个界面中填写存储过程名称,例如simple_query,点击Next。在接下来的两个界面中不必进行任何操作,直接点击Next。在第四个界面中输入代码:
CREATE PROCEDURE dbo.simple_query
AS select bookcode, bookname, authorname
from book, author
where bookauthor *= authorcode
点击Finish。至此,存储过程创建完毕。
这个存储过程最为简单,即没有参数,也没有返回值,更没有任何逻辑处理。
下面选中存储过程simple_query,右键,点击“Execute with Interactive SQL”,在Interactive SQL中会生成一条语句“exec dbo.simple_query”,其中exec全拼为execute,表示执行存储过程。执行后,会返回一个结果集,即SQL语句的执行结果。
下面来看一个内容相对完整的存储过程例子:
CREATE PROCEDURE dbo.simple_demo
(
@i_mesg nvarchar(100) = 'Y', --输入参数,设置默认值为'Y'
@o_mesg nvarchar(100) output --输出参数
)
AS
BEGIN
if @i_mesg = 'Y' --逻辑处理
begin
select @o_mesg = '运行正常!' --在Sybase中需要使用select语句为变量赋值
return 0 --返回值
end
select @o_mesg = '运行异常!'
return -1 --返回值
END
这个存储过程虽然没有调用数据表,但带有输入参数、输出参数、逻辑处理和返回值,因此内容相对完整。这里请注意,返回值只能是整数,而输出参数也可以用来将值传入并设置默认值。
下面在Interactive SQL中执行以下代码:
declare @o_mesg nvarchar(100), --定义变量
@ret int
exec @ret = dbo.simple_demo 'N', @o_mesg output --执行存储过程,注意,输出参数必须标以output,否则不会输出任何值
print '%1!--------%2!', @ret, @o_mesg --输出结果
按F5键执行,输出结果:-1--------运行异常!
下面将这段代码写到存储过程当中:
CREATE PROCEDURE dbo.simple_call
AS
BEGIN
declare @o_mesg nvarchar(100),
@ret int
exec @ret = dbo.simple_demo 'N', @o_mesg output
print '%1!--------%2!', @ret, @o_mesg
END
这是一个存储过程调用存储过程的例子了。
下面再新建一个simple_execute存储过程,代码如下:
CREATE PROCEDURE dbo.simple_execute
AS
BEGIN
execute ('select * from v_book')
END
这个存储过程含有两个内容:一个SQL语句的动态执行,即Sybase中允许将SQL语句处理成一个字符串或字符串变量来执行;一个是对视图的访问。
下面再看几个存储过程的例子。
通过游标读取数据示例:
CREATE PROCEDURE dbo.p_query_list
AS
BEGIN
declare @bc nvarchar(10)
,@bn nvarchar(50)
,@an nvarchar(20)
--定义游标
declare book_curs cursor for
select bookcode, bookname, authorname
from book, author
where bookauthor *= authorcode
order by bookcode
open book_curs --打开游标
--循环游标读取数据
fetch book_curs into @bc, @bn, @an
while (@@sqlstatus = 0)
begin
print '编号:%1!|名称:%2!|作者:%3!', @bc, @bn, @an
fetch book_curs into @bc, @bn, @an
end
close book_curs --关闭游标
deallocate cursor book_curs --释放游标
END
通过变量读取数据示例:
CREATE PROCEDURE dbo.p_query_detail
@query nvarchar(10)
AS
BEGIN
declare @bookcode nvarchar(10),
@bookname nvarchar(50),
@authorname nvarchar(20)
/* top用来指定取得结果集的前n条数据,这里使用top 1即表示取得结果集的第一条记录,否则当结果集中有多条记录时,只有最后一条记录的值才会被赋值给变量 */
select top 1 @bookcode = bookcode, @bookname = bookname, @authorname = authorname from v_book where bookcode = @query
print '编号:%1!|名称:%2!|作者:%3!', @bookcode, @bookname, @authorname
END
执行:在Sybase Central中选中p_query_detail,右键,点击“Execute with Interactive SQL”,由于p_query_detail有一个输入参数,因此Central会弹出一个Call窗口:
在窗口中填值时一定要注意,由于数据类型为nvarchar(10),为字符串,因此一定要在值的两边加上单引号“’”。然后点击OK,在Interactive SQL中按F5键执行该存储过程。