SYBASE學習筆記(zt)

zhouwf0726發表於2019-05-14
簡介:
對學習
sybase和ms-sqlserver的體會,包括安裝、初始化、sql學習,過程和觸發子建立,db-library和ct-library以及同oracle的不同之處,和細節注意對比。
第一大塊:Sybase安裝 [redhat 7.2]
Sybase rpm 包安裝順序 12.5.0.1 for linux
sybase-common-12.5.0.1DE-1.i386.rpm
sybase-ase-12.5.0.1ESD-1.i386.rpm
sybase-efts-12.5.0.1ESD-1.i386.rpm
sybase-openclient-12.5.0.1ESD-1.i386.rpm
sybase-esql-12.5.0.1ESD-1.i386.rpm
sybase-sqlremote-7.0.2-1.i386.rpm
sybase-chinese-12.5.0.1ESD-1.i386.rpm
安裝
rpm -ivh sybase-common-12.5.0.3-7.i386.rpm
rpm -ivh sybase-ase-12.5.0.3-7.i386.rpm [ -Uhv --nodeps]
rpm -ivh sybase-efts-12.5.0.3-7.i386.rpm [ -Uhv --nodeps]
rpm -ivh sybase-openclient-12.5.0.3-7.i386.rpm
rpm -ivh sybase-esql-12.5.0.3-7.i386.rpm
rpm -ivh sybase-sqlremote-7.0.2-1.i386.rpm
解除安裝
rpm -e sybase-efts-12.5.0.3-7
rpm -e sybase-sqlremote-7.0.2-1
rpm -e sybase-esql-12.5.0.3-7
rpm -e sybase-openclient-12.5.0.3-7
rpm -e sybase-openclient-12.5.0.3-7
rpm -e sybase-ase-12.5.0.3-7
rpm -e sybase-chinese-12.5.0.3-7
rpm -e sybase-doc-12.5.0.3-7
rpm -e sybase-common-12.5.0.3-7
rpm -ql libstdc++
安裝順序和依賴關係說明:
sybase-common-12.5.0.1DE-1.i386.rpm The common package is a prerequisite to all other packages. It creates and installs the default runtime environment required by other packages, and includes tools to configure, install, and administer Adaptive Server and related components.
NOTE: The sybase-common-12.5-3.i386.rpm is a pre-required package. You must install it before you install any other rpm package as all depend on the common package.

sybase-ase-12.5.0.1ESD-1.i386.rpm This package installs all binary server components required to run Adaptive Server, Backup Server, XP Server, Monitor Server, Historical Server and related utilities and tools for database development and maintenance.

sybase-efts-12.5.0.1ESD-1.i386.rpm The efts package installs the Enhanced Full-Text Search Specialty Data Store, which provides the capability to do complex searches on character and text data stored in the ASE. The performance of the searches can be orders of magnitude faster than using standard SQL searches.

sybase-openclient-12.5.0.1ESD-1.i386.rpm The Open Client package installs the Sybase Open Client Software Development Kit (SDK). Open Client consists of programming interfaces and networking services for writing client applications for point-to-point communication to Sybase server products.

sybase-esql-12.5.0.1ESD-1.i386.rpm The Embedded SQL package installs the Sybase ESQL binaries, libraries, include files and sample programs. It consists of the programming interfaces and networking services for writing client application in Embedded-SQL for point-to-point communication to ASE.
NOTE: The sybase-esql-12.5.0.1ESD-1.i386.rpm package requires the sybase-openclient-12.5.0.1ESD-1.i386.rpm package.

sybase-sqlremote-7.0.2-1.i386.rpm The SQL Remote package installs the Sybase SQL Remote for Adaptive Server Enterprise. SQL Remote is a data-replication technology designed for two-way replication between a consolidated data server and large numbers of remote databases, typically including many mobile databases.

sybase-chinese-12.5.0.1ESD-1.i386.rpm
sybase-french-12.5.0.1ESD-1.i386.rpm
sybase-german-12.5.0.1ESD-1.i386.rpm
sybase-japanese-12.5.0.1ESD-1.i386.rpm
sybase-korean-12.5.0.1ESD-1.i386.rpm
sybase-polish-12.5.0.1ESD-1.i386.rpm
sybase-portuguese-12.5.0.1ESD-1.i386.rpm
sybase-thai-12.5.0.1ESD-1.i386.rpm
sybase-spanish-12.5.0.1ESD-1.i386.rpm
NOTE: These packages cannot be installed on a platform that is running an incorrect version of Linux, kernel and run-time. These packages do allow for upgrade of previous released versions under Linux. These packages do not allow for degrading later installs.

Consistency Check: Once the files have been transferred to the target machine, perform a consistency check before installing the packages. Enter:

#rpm -- checksig *.rpm

You should receive the following output:
sybase-common-12.5.0.1DE-1.i386.rpm: md5 OK
sybase-ase-12.5.0.1ESD-1.i386.rpm: md5 OK
sybase-efts-12.5.0.1ESD-1.i386.rpm: md5 OK
sybase-esql-12.5.0.1ESD-1.i386.rpm: md5 OK
sybase-openclient-12.5.0.1ESD-1.i386.rpm: md5 OK
sybase-sqlremote-12.5.0.1ESD-1.i386.rpm: md5 OK
sybase-french-12.5.0.1ESD-1.i386.rpm: md5 OK
sybase-german-12.5.0.1ESD-1.i386.rpm: md5 OK

Refer to the Installation Guide for detailed installation instructions

usage: isql [-b] [-e] [-F] [-p] [-n] [-v] [-X] [-Y] [-Q]
[-a display_charset] [-A packet_size] [-c cmdend] [-D database]
[-E editor [-h header [-H hostname [-i inputfile]
[-I interfaces_file] [-J client_charset] [-K keytab_file]
[-l login_timeout] [-m errorlevel] [-M labelname labelvalue]
[-o outputfile] [-P password] [-R remote_server_principal]
[-s col_separator] [-S server_name] [-t timeout] [-U username]
[-V [security_options]] [-w column_width] [-z localename]
[-Z security_mechanism]

1、 Root使用者,先將rpm包解壓,解壓後的目錄為/opt/Sybase-12.5
rpm -ivh *.rpm 順序為前面所述的順序。
如果以前安裝過,用
rpm -e 'rpm -qa|grep sybase'解除安裝
2、 執行$SYBASE/install/sybinstall.sh,它將建立sybase使用者和口令,用passwd將sybase的使用者口令修改為所要設定的口令。
3、 在root使用者登入檔案中加入以下語句(以bash使用者,.bash_profile為例。更改系統記憶體值為60M):echo "62914560" > /proc/sys/kernel/shmmax
{
1、 改/etc/sysctl.conf檔案加入
kernel.shmmax=10000
fs.aio-max-size=10000
2、 編輯$SYBASE/ASE/init/ sample_resource_files/ srvbuild.adaptive_server.rs檔案
其他服務建立檔案也如此。
注意輸入資料檔案時,如果沒有建立raw device 將要指定存放的目錄和資料庫資料檔案。
3、 修改後用svrbuildres -r $SYBASE/ASE/init/sample_resource_files/
srvbuild.adaptive_server.rs執行將建立資料庫。
} /opt/sybase-12.5/ASE-12_5/bin/srvbuildres -r /opt/sybase-12.5/ASE-12_5/init/
sample_resource_files/leon.adapative_server.rs
4、 設定完成後,重新用sybase登陸[他會自動設定完成環境變數],建一個目錄存放日後的資料庫檔案
5、 重新restart computer
6、 sybase登陸x-windows,執行$SYBASE/ASE-12_5/bin/srvbuild,選擇完四個伺服器,鍵入資料,執行建立。
[
在X-Windows中使用srvbuild工具配置ASE產品
1、用sybase使用者登入X-Windows,執行sybase安裝目錄(/opt/sybase-11.9.2)下/bin/srvbuild命令。
2、在srvbuild視窗中,選擇要安裝Server型別。把四種Server都選上。
3、給Server命名。將Adaptive Server命名為TEST,相應地,Backup Server自動命名為TEST_back,Monitor Server命名為TEST_mon,XP Server命名為TEST_XP。點選OK按鈕,進入各Server的配置過程。
4、配置Adaptive Server。填寫或選擇以下內容:
Master device path(主裝置路徑):/db/sybsystem/master.dat
Master device size(MB)(主裝置大小):60
Master database size(MB)(主資料庫大小):20
Sybsystemprocs device path(系統儲存過程裝置路徑):/db/sybsystem/systemprocs.dat
Sybsystemprocs device size(MB)(系統儲存過程裝置大小):60
Sybsystemprocs database size(MB)(系統儲存過程資料庫大小):60
Error log path(錯誤日誌路徑):/opt/sybase-11.9.2/install/TEST.log
Transport type(傳輸協議型別):tcp
Host name(主機名):192.168.0.1
Port number(監聽埠號):4100
點選OK按鈕,進入下一配置過程。
5、配置Backup Server。填寫或選擇以下內容:
Error log path:/opt/sybase-11.9.2/install/TEST_back.log
Tape configuration file:/opt/sybase-11.9.2/backup_tape.cfg
Language:(不填)
Character set:(不填)
Maximum number of network connections:25
Maximum number of server connections:20
Transport type:tcp
Host name:192.168.0.1
Port number:4200
點選OK按鈕,進入下一配置過程。
6、配置Monitor Server。填寫或選擇以下內容:
Maximum number of connections:5
Error log path:/opt/sybase-11.9.2/install/TEST_mon.log
Configuration file path:/opt/sybase-11.9.2/install/TEST_mon.cfg
Share memory directory:/opt/sybase-11.9.2
Transport type:tcp
Host name:192.168.0.1
Port number:4300
點選OK按鈕,進入下一配置過程。
7、配置XP Server。填寫或選擇以下內容:
Transport type:tcp
Host name:192.168.0.1
Port number:4400
點選Build Server按鈕,開始建立Server,這時出現一個視窗,你可以看到整個建立過程。如果有顯示以下類似資訊,表示建立Server成功:
……
Server TEST was successfully created.
Done.
……
8、建立Server成功後,系統就會問你是否將Server本地化(Localize),即是用另外一種語言代替預設的us_english language,以及改變預設的iso_1字符集和Binary索引順序。選擇是NO。為什麼呢?曾經把中文(eucgb)設為預設字符集,反而不支援中文大字集,因為eucgb是基於GB2312標準的。查了Sybase的手冊中一些關於本地化的說明,得出的印象是,在ASE中有Unicode轉換機制,可以轉換來自不同字符集的伺服器或客戶端的資料。應用也證明,使用ASE的預設的語言、字符集、索引順序來處理中文是可行的。
9、安裝成功後要做的幾件事。首先在Linux控制檯模式下以sybase使用者登入。
① 確認Server是否在執行。使用$SYBASE/install/下的showserver命令($SYBASE表示sybase的安裝目錄),應該可看見系統有幾個sybase相關程式。或者用$SYBASE/bin/下的isql -Usa -P -STEST命令來登入Server,應該可以看見isql的提示符"1>",再鍵入exit就可以退出了。
② 用sp_password null, 新口令
go將sa的使用者口令改掉。
]
7、 成功後將自動啟動資料庫。可用isql -Usa -Ppassword -Sserver_name連進資料庫。
isql -Usa -P -Ssybase
8、 執行1>sp_diskdefault master , defaultoff
2>go
將以後使用者資料庫資料檔案不要建立在master所在的資料檔案中。
9、 用sp_password oldpassword,newpassword設定sa的使用者口令。
a) sp_password null,Sybase
b) go
10、 用shutdown關閉資料庫。
11、 重新啟動資料庫用$SYBASE/ASE/install/RUN_sybase啟動,這為前臺啟動方式。後臺啟動方式用。
$SYBASE/ASE/install/startserver -f RUN_Sybase
RUN_sybase例子:
#!/bin/sh
#
# ASE page size (KB): 2048
# Master device path: /opt/sybase-12.5/data/nextip.dat
# Error log path: /opt/sybase-12.5/ASE/install/sybase.log
# Configuration file path: /opt/sybase-12.5/ASE/sybase.cfg
# Directory for shared memory files: /opt/sybase-12.5/ASE
# Adaptive Server name: sybase
#
/opt/sybase-12.5/ASE/bin/dataserver
-d/opt/sybase-12.5/data/nextip.dat
-e/opt/sybase-12.5/ASE/install/sybase.log
-c/opt/sybase-12.5/ASE/sybase.cfg
-M/opt/sybase-12.5/ASE
-ssybase

關閉資料庫:
用sa使用者進入資料庫執行shutdown命令即可完成資料庫的關閉。

資料庫裝置的建立
重啟在sybase使用者下,
1> use master
2> go
3> sp_diskdefault master , defaultoff
4> go
5> sp_helpdevice
6> go
1> disk init
2> ''''sybsynxe'''',
3> phyae''''/opt/sybase-12.5/data/user_data/test.a'''',
4> vdevno=4,
5> =''0''''
6>
7> go
建立資料庫裝置後就可以建立使用者資料庫
sa
create database userdb on db_dev_name=size M

1> disk init
2> ''''tesbe'''',
3> phyae''''/opt/sybase-12.5/data/user_data/test.a'''',
4> vdevno=6,
5> size
6> go
8> use master
9> go
10> create database testdb on testdbdev=10
11> go
建立使用者資料庫的使用者
1>sa connenction into database
2>use testdb
3>go
4>sp_addlogin ldai, password, null, null,bp''''daimn''''
5>go
6>sp_adduser ldai,dlm
7>go
isql -Uldai -Ppassword1 -Ssybase就可以連進testdb使用者資料庫了。
注意口令長度不得小於6位,如果口令以數字開頭,還需要以單引號括起來。
Sp_addlogin提供使用者能訪問資料庫的許可權,如果沒有指定使用者具體訪問那個資料庫,則還需要在相應資料庫中用sp_adduser user_name, user_password建一個相同名和口令的使用者。
例如
1> sp_adduser ldai, dlm
2> go
3>

如果用sa使用者建立了一個使用者資料庫,想將他的所有者由sa改為其他使用者。
確定其他使用者只具有addlogin,不具有adduesr。如果有addusers則要sp_dropuser刪除掉,否則不能賦給他所有者許可權。
Isql -Usa
1> use testdb
2> go
3> sp_changedbowner ldai, testdb
4> go
5> sp_default ldai, testdb
6> go
7> sp_helpdb testdb
8> go
將更改資料庫owner了,注master不能更改

建使用者有兩中方式,上面這一種是建立使用者帳號,再在具體資料庫中建立該資料庫應用帳號。較為繁瑣。可通過sp_addlogin加其他引數,一步到位將資料庫使用者建立起來。
Sp_addlogin user_name,user_password,所用資料庫名稱,null,bp''''全備''''
例如:
sp_addlogin nextip, nextip, NEXTIPDB, null,bp''''neid''''s&nb;b''''

Msg 5106, Level 16, State 6:
Serverbp''''bs'''', Line 1:
Parameterbp;''SZ'''' requires value of typebp;''n''''.
1> disk init
2> ''''sybsynxe'''',
3> phyae''''/opt/sybase-12.5/data/user_data/sybsyntaxd.a'''',
4> vdevno=4,
5> =''0''''
6> go
00:00000:00008:2003/10/22 14:33:19.21 kernel Initializing virtual device 4,bp''''/opt/sybase-12.5/data/user_data/sybsyntaxd.a'''' with dsyn&s'''o''''.
00:00000:00008:2003/10/22 14:33:19.21 kernel Virtual device 4 started using asynchronous i/o.
00:00000:00008:2003/10/22 14:33:19.22 kernel Initializing device /opt/sybase-12.5/data/user_data/sybsyntaxdev.dat from offset 0 with zeros.
00:00000:00008:2003/10/22 14:33:19.25 kernel Finished initialization.
1>

初次建立資料庫對sa的口令要進行修改。
sp_password old_password, new_password, login name
1> sp_password null, nextip, sa
2> go
3>

sp_dboption 是用來開啟或關閉資料庫的選項 [select into/bulkcopy]。只用這樣資料?菘獠拍苤蔥腥鐂elect identity(int) id0,* into&nbssp;#temp1 from tablename這樣的sql語句。檢視是否開啟option用sp_helpdb就可以檢視。Sp_dboption只能在master 資料庫中引用。是否允許列欄位為空還是不為空也是用這個命令。
1> use nextipdb
2> go
3> master..sp_dboption nextipdb,"select into/bulkcopy","true"
4> go
5> checkpoint
6> go

1> dbcc checkdb
2> go
3> dbcc checkcatalog
4> go

1、增加自定義的資料型別為sp_addtype datatypename ,"length",
FE: sp_addtype tid, "char(6)", "not null"
2、檢視某一使用者是否有什麼許可權,sp_helprotect user_name
4、 修改使用者出始登陸的資料庫,命令為sp_modifylogin
5、 檢索identity欄位可以用syb_identity=指定值來檢索,如
t_dns_rezo_gs中有且一個identity欄位[rzgs_id ],則可如下檢索
select count(*) from t_dns_rezo_gs where syb_indentity=1
6、 sp_dboption可設定資料庫通用的一些選項。
7、 當想要對錶進行手工插入identity時,如果沒有set identity_insert table_name on/off開啟,
就要開啟,如果一旦開啟,每一筆記錄都要手工指明identity值,而不是自動插入形式,切記。如果變回off後,則identity記數從表中最大的identity值開始記數。例最大值為10,則記數從11開始,中間就有gap出現了。
8、 identity預設精度為18位,如果達到了,就需要增加其精度。可用alter table table-name
modify identity_col_name, numeric(20,0)進行修改精度。
9、 使資料庫自動為新建表建立一個隱藏的identity欄位為sp_dboption db_name , "auto identity", "true"
為identity設定精度,由管理員操作sp_configure "size of auto identity", 精度位數
如sp_configure "size of auto identity",15
10、 在當前資料庫中建立另外一個資料庫的表或其他物件, create other_db_name..object_name
如: create table newdb..t_dns_gs (name varchar(255))
11、 select user_name() /user / db_name() 返回當前使用者或資料庫
12、 col_length("表名", "欄位名") 返回指定欄位的長度/ datalength("列名")實際儲存長度對varchar/期於是建立時指定的長度
13、 isNull(exp1, exp_value) 為如果exp1為null則用exp_value替代
14、 convert(轉換後的型別和長度,要轉換的型別值)
如:select "my Test" + ""+convert(varchar(20),1211333)
1> select mmm="my Test" + ""+convert(varchar(20),1211333)
2> go
mmm
----------------------------
my Test 1211333

(1 row affected)
15、 獲取當前時間為select getdate()
16、 當前變數申明 declare @變數名 型別
賦值操作select @變數名=變數值
如:
declare @sIpad varchar(20),@iNum numeric(2,0)
select @pd''''0A00'''',@iNum=32
17、 看過程的原始碼sp_helptext 過程名
例子:
1> sp_helptext p_convert_num_to_char
2> go
# Lines of Text
---------------
1
(1 row affected)
text
----------------------------------------------------------------------------------------------------------------------
create procedure p_convert_num_to_char
@cint numeric, @outchar varchar(10) output
as
if (@cint=4)
select @ouhr=''Fu''''
if (@cint=5)
select @ouhr=''Fv''''
if (@cint=6)
select @ouhr=''i''''
(1 row affected)
(return status = 0)

18、 oracle中檢視原始碼,檢視該sources表
19、 在一個過程中呼叫另外一個過程,
例如:
create procedure test_one @test_proc_name varchar(255)
as exec @test_proc_name
20、 記住在sybase中行l'''go'不''''''為結束兼執行
21、 建立資料庫使用者:sa使用者 master庫中,sp_addlogin user,password,dbname
22、 變更資料屬主::sa使用者進入要變更的資料庫執行 sp_changedbowner user,dbname
23、 設定使用者的預設登陸資料庫::sa使用者進入要設定的資料庫執行:
sp_defaultdb user,dbname
24、 以#開頭返牧偈北碇皇竊諛騁還?袒騭ql操作中存在,一旦過程或sql操作結束,則臨時表就不存在了,如果再要訪問就回出錯。解決是不建立以#為preffix的表。
25、 要想直接手工插入值到表中identity欄位,需要開啟該表的identity_insert選項。
Set identity_insert 表名 on/off
如:
set identity_insert t_dns_rezo_gs on
這樣insert into t_dns_rezo_gs(rzgs_id,rzgs_name) value99'''22'''')才會成功。
26、 指定某個過程什麼時候執行後用waitfor delay "hh24:mi:ss",並且用了這種方式後該connection不會有什麼響應直到過程被執行完成。
如半個小時後執行過程test_p
begin
waitfor delay "0:30:00"
exec test_p
end
27、 呼叫帶返回引數的過程完整例子
create procedure p_convert_num_to_char
@cint numeric, @outchar varchar(10) output
as
if (@cint=4)
select @ouhr=''Fu''''
if (@cint=5)
select @ouhr=''Fv''''
if (@cint=6)
select @ouhr=''i''''
go

declare @getchar varchar(10)
exec p_convert_num_to_char 4,@outchar=@getchar output
28、 過程中有返回引數時,如果預先設定引數值,最終都會改變
如:
declare @First int
select @First=123
exec test_p @second=@First output
//執行結果為999
則@second和@First 都為999
29、 過程名改名sp_rename oldname, newName
30、 ct-library程式設計,在sybase提供的linux中有,環境搭建要點,要確定$SYBASE設定了,$SYBASE_OCS設定open client所在目錄即可不要是全目錄,還要設定平臺$SYBPLATFORM=linux; 具有這三個環境變數,open client提供的sample才可大部分編譯通過;其中有幾個程式由於找不到-lsrv,而編譯通不過。推測可能涉及了open server的東西,所以沒有通過。
例子程式可以單獨編譯,如make 例子名 &np; [F.E make firstapp
]
設定LD_LIBRARY_PATH=$ATH=$SYBASE/$SYBASE_OCS/lib

編譯形式例如firstapp.c
$SYBASE=/opt/sybase-12.5
$SYBASE_OCS= OCS-12_5
cc -o fist firstapp.c -I. -I/opt/sybase-12.5/OCS-12_5/include -L/opt/sybase-12.5/OCS-12_5/lib -rdynamic -ldl -lnsl -lm -lct -lcs -lsybtcl -lcomn -lintl
31、 db-library編譯語句:
cc -I. -I/opt/sybase-12.5/OCS/include example1.c /opt/sybase-12.5/OCS/lib/libsybdb.a -lm -o example1
同樣要設好SYBASE SYBASE_OCS SYBPLATFORM
並且要保證interface檔案中連線伺服器是對的。
同時對於想要連線的伺服器名要在環境變數DSQUERY中設好。
如:
export DSQUERY=accunetsvr

注意,用hostname作為連線名時,確保/etc/hosts中的IP和hostname有對應且對應正確。

32、 db-library 經實驗資料庫連線結構支援執行緒間的傳遞,將函式打包用下列樣式:
gcc -c -I. -I/opt/sybase-12.5/OCS/include s_fcts.c
ar r libleon.a s_fcts.o
rm -rf *.o
打包完畢
呼叫函式進行編譯樣式:
cc -I. -I/opt/sybase-12.5/OCS/include ss_nip_checkUGandUser.c libleon.a
/opt/sybase-12.5/OCS/lib/libsybdb.a -lm -o leon4
或者
cc -I. -I/opt/sybase-12.5/OCS/include -o leon4 ss_nip_checkUGandUser.c libleon.a
/opt/sybase-12.5/OCS/lib/libsybdb.a -lm
33、 DB-library的應用程式執行其他機上訪問另一臺機(資料庫所在的機器).在客戶機上需要裝sybase-comom 和syabse-openclient元件。需要設定對SYBASE / DSQUERY. 其中sybase要設定為指向interfaces檔案的路徑,DSQUERY要設定為要遠端訪問的主機名(adapative_server_name).將遠端主機的interfaces拷貝到客戶機上SYBASE指定的目錄即可。注意如果沒有設定DSQUERY,則程式預設去找sybase的資料庫,這時如果沒有該資料庫名字在interfaces檔案中,程式就會不行。
[實際只需設定好DSQUERY環境變數和interface檔案即可]
34、 DB-library應用在多執行緒中每次都要重新連線資料庫,否則一定時間後連線會被
作業系統重置掉。 Connection reset by peer
35、 DB-library的錯誤捕捉。系統提供一種系統錯誤資訊函式自動在出現錯誤時去捕捉顯示錯誤資訊。
int msg_handler(dbproc, msgno, msgstate, severity, msgtext,
srvname, procname, line)
DBPROCESS *dbproc;
DBINT msgno;
int msgstate;
int severity;
char *msgtext;
char *srvname;
char *procname;
int line;
{};
int err_handler(dbproc, severity, dberr, oserr, dberrstr, oserrstr)
DBPROCESS *dbproc;
int severity;
int dberr;
int oserr;
char *dberrstr;
char *oserrstr;
{};

  dbmsghandle(msg_handler);
dberrhandle(err_handler);

除此之外,使用者如果想要自己控制錯誤資訊可在dbsqlexec() 呼叫後並且while()處理完後,呼叫dbcount(dbproc)進行錯誤資訊判斷,如果等於-1則出現錯誤。特例呼叫沒有select的過程::dbnocount設為on::沒有select的sql語句::sql寫錯::sql執行錯誤等都可以出現-1所以要小心判斷處理。
36、 Jdbc連線sybase。首先需要jconn2.jar和jTDS2.jar檔案,在環境變數CLASSPATH設定好。
Class.forName("com.sybase.jdbc2.jdbc.SybDriver");
url結構為: jdbc:sybase:Tds:dbserver_ip/dbserver_hostname:dbserver_port/dbname
dbserver的埠為資料庫伺服器上的interfaces檔案中對應的資料庫埠。
例子:
192.168.0.6
interfaces
[root@accunetsvr sybase-12.5]# more interfaces
accunetsvr_text
master tcp ether accunetsvr 4500
query tcp ether accunetsvr 4500


accunetsvr
master tcp ether accunetsvr 4100
query tcp ether accunetsvr 4100


accunetsvr_back
master tcp ether accunetsvr 4200
query tcp ether accunetsvr 4200


accunetsvr_mon
master tcp ether accunetsvr 4300
query tcp ether accunetsvr 4300


ACCUNETSVR_XP
master tcp ether accunetsvr 4400
query tcp ether accunetsvr 4400

可知dbserver_name是accunetsvr
dbserver_ip 是192.168.0.6
dbserver_port 是4100
dbname為nextip
url為 jdbc:sybase:Tds:192.168.0.6:4100/nextip
37、 建立identity列,如果是create table 時一定是numeric型。如果想要建立資料庫自動為新建的所有表增加一個隱藏的identity欄位,用[sp_dboption database_name, "auto identity", "true"]。在檢索資料的時候必須隱式加上SYB_IDENTITY_COL作為隱藏的identity列,例如select SYB_IDENTITY_COL, sn_name from t-subnet
預設的隱藏精度大小為10如果使用者想要增大其精度,可用[sp_configure "size of auto identity", 新的精度],例如: sp_configure "size of auto identity",15
38、 從select into 建立一個新的idenetity列,這在sql語句分頁檢索用。
Select idenetity_name=identity(精度) , * into new_table from old_table;
如:
select id0=identity(18),* into #subnets from t_subnet where sn_type=10;
39、 實現用sql語句進行分頁查詢方法:
A. 建立一個臨時錶帶identity欄位 select id=indentity(20), * into #table_anme from table_name where 條件
B. 然後根據id進行檢索第n條到m條資料 (也可用between and)
C. 最後Drop掉該臨時表
D. 注意要開啟資料庫的select into /bulk copy屬性 sp_dboption database_name, "select into/bulk copy", "true"才能進行select into操作
E. mssql中格式為select identity(int) id, * from #table_name from table_name where 條件
40、 linux下訪問sql-server用db-library與sybase相同要素。只是遠端訪問埠為sql-server指定的1433

41、 JDBC訪問MS-SQLSERVER
連線資料庫:[需要這三個jar檔案msbase.jar msutil.jar mssqlserver.jar]
JDBC DRIVER:com.microsoft.jdbc.sqlserver.SQLServerDriver
URL:jdbc:microsoft:sqlserver://Ip Or Name:1433;DatabaseName=XXX
42、 Oracle中的外連線符為=(+) 或(+)= 在Sybase中為=* 或 *=
43、 執行sybase過程中會有日誌滿了或儲存空間不夠了,出現supsend狀態,可用
isql -Usa -Ppassword -Sdbservername
進去執行dump tran db_name with truncate_only進行清空操作
或者dump tran db_name tobp''''patfl''''進行備份在執行清空。
44、 ms-sql中的substring(string, start, length)函式引數,start和length為INT型不能為numeric型。
45、 select * into 在oracle中的用法在ms-sql和sybase中的用法為select @變數=column
from 表名 where 條件
46、 遊標在ms-sql和sybase中差別主要為while 判斷的全域性變數不同。
Sybase中為@@sqlstatus = 0
Ms-sql中為@@FETCH_STATUS = 0
關閉遊標時在ms-sql中除了[close 遊標名] 還要增加[deallocate 遊標名]

47、 MS-SQL對於sql語句大小寫不敏感,sybase對大小寫敏感。

48、 oracle同sybase和mssql的常用函式對比
ORACLE SYBASE MS-SQLSERVER
SysdateTo_char(&s'''格'''')格式:yyyymmddhh24miss任意組合 getdate()可用year() month() day()分解獲得年月日 convert(varchar, getdate(), 108)是hh:mm:ss getdate()可用year() month() day()分解獲得年月日convert(varchar, getdate(), 108)108是hh:mm:ss120是yyyy-mm-dd
Length() Datalength() Datalength()
Ltrim() rtrim() Ltrim() rtrim() Ltrim() rtrim()
Substr() Substring() Substring(varchar, INT, INT)
Reae(''2''''&s'''''',bp''''A) Reae(''2''''&s'''''',bp''''A)
instr
Lpad() rpad() Repit'''''', 32) Repit'''''', 32)
Upper() lower() Upper() lower() Upper() lower()

49、 日期計算在ms-sql中
dateadd(日期程式碼,日期值, 日期)
select convert(varchar,getdate(),120) as year,convert(varchar,dateadd(ss, 1200,getdate()),120) as nYear
go
日期部分 簡寫 &nbbsp; 值
year yy 1753--9999
quarter qq 1--4
month mm 1--12
day of year dy 1--366
day dd 1--31
week wk 1--53
weekday dw 1--7(Sunday--Saturday)
hour hh 0--23
minute mi 0--59
second ss 0--59
milisecond ms 0-999

也可
select convert(varchar, getdate(), )''''bp''''+convert(varchar,getdate(),108) as oldtime,convert(varchar,dateadd(ss,1200,getdate())1)''''bp''''+convert(varchar,dateadd(ss,1200,getdate()),108) as date
也可
select convert(varchar,convert(datie''''2012''''),111)
go


50、 PostgreSQL中的lib程式設計時,select 和update /delete的成功失敗條件判斷是不同的。
Update/delete:: strcmp(PQcmdStatus(temp_res), "")==0
select :: !temp_res||PQresultStatus(temp_res) != PGRES_TUPLES_OK
51、 日期各格式的引用模式ms-sql和sybase中都通用
yyyy/mm/dd hh24:mi:ss
select convert(varchar, getdate(), )''''bp''''+convert(varchar,getdate(),108) as oldtime,convert(varchar,dateadd(ss,1200,getdate())1)''''bp''''+convert(varchar,dateadd(ss,1200,getdate()),108) as date
select name,text from all_source where ''''FUTO'''' and ''''F_CHECK_IBCP'''';
select convert(varchar,convert(datie''''2012''''),111)
go
Select count(ipgs_host_ne|''''ot''''||f_ipad_chang_c'''s''''''') From t_ipdev_gs

yyyy/mm/ddhh24miss
Select CO_DESC,to_char(sysdate - /8''''yyyymmddhhms'''') co_date from T_LICENSE
dateadd(ss, -1800, getdate())
select co_desc, convert(varchar, dateadd(ss, -1800, getdate()),111)+convert(varchar,dateadd(ss, -1800, getdate()),108) as co_date from t_license
select convert(varchar, getdate(), )''''bp''''+convert(varchar,getdate(),108) as oldtime,convert(varchar, dateadd(ss, -1800, getdate()),111)+convert(varchar,dateadd(ss, -1800, getdate()),108) as co_date

yymmddhh:mi:ss
select convert(varchar,getdate(),112)+convert(varchar,getdate(),8)
go
52、 顯示sql執行時間用: isql -Unextip -Pnextip -Sleon1 -p
進入即可,加小寫-p引數
53、 MS-SQL中建立資料庫
create database NEXTIPDB
on primary
(
name = DEVDB,
filename =bp''''d:mssql_datadev.d'''',
size = 30MB,
maxsize = 100MB,
filegrowth = 10MB
),
(
name = DEVDB1,
filename =bp''''d:mssql_datadevd.d'''',
size = 10MB,
filegrowth = 10MB
)
Log on
(
name = DEVDBLOG,
filename =bp''''e:mssql_logdevdbl.d'''',
size = 10MB,
maxsize = 100MB,
filegrowth = 10MB
)
go
54、 細小區別
Sybase::
IF NOT EXISTS (SELECT * FROM master..syslogins, master..sysdatabases
WHERE master..syslogins.suid = master..sysdatabases.suid
AND master..syslogins.name =bp''''xi'''')
EXEC sp_changedbowner nextip, NEXTIPDB
GO

Ms-sqlserver::
IF NOT EXISTS (SELECT * FROM master..syslogins, master..sysdatabases
WHERE master..syslogins.sid = master..sysdatabases.sid
AND master..syslogins.name =bp''''xi'''')
EXEC sp_changedbowner nextip, NEXTIPDB
GO

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/756652/viewspace-242411/,如需轉載,請註明出處,否則將追究法律責任。

相關文章