Oracle 與 Access 的不同點

2021-05-23 23:04:53 字數 3405 閱讀 7907

oracle                    access

date                         datetime

varchar2()                    varchar()

varchar2(256)                memo  (varchar最大長度255,再大就改用memo)

number(1)                 smallint

number(16,2)               decimal(16,2)

blob                        image

null                        什麼都不寫

--(注釋)                    沒有此功能

comment                     沒有此功能

using index tablespace ……    什麼都不寫

關鍵字可以作為欄位名         關鍵字不能作為欄位名稱,如:right、key、value等

alter也不同

delete語句 :access必須加入from

access不需要commit;

iif(expr, truepart, falsepart)

用這個函式

iif(a.field1='','0',a.field)

oracle             access

as 可省略          不可省略

||                     +   &

1、in 操作符

oracle: "   and dl in(" + dllist + ")   " +

access: "   and dl in ('" +dllist + "')   " +

2.1、引數順序:

updcmd.commandtext = "update data setstatus = @status where [name] = @name";   

updcmd.connection = aconnection;

oledbparameter parname = new oledbparameter("@name",oledbtype.varchar, 50, "name");

oledbparameter parstatus = new oledbparameter("@status",oledbtype.varchar, 50, "status");

==順序錯了, access不認引數的名字,只認引數的順序

c# rightcode

updcmd.commandtext = " update data set status = @status where [name]= @name " ; 

updcmd.connection = aconnection;

oledbparameter parstatus = new oledbparameter( " @status " , oledbtype.varchar, 50 , " status" );

oledbparameter parname = new oledbparameter( " @name " , oledbtype.varchar, 50 , " name " );

在做公司乙個產品中,需要有access、sql server、oracle三個版本;編寫sql語句的過程中,盡量使用一些通用的語句,但還是有些方面有些區別避免不了,現簡單總結一下。

以下a代表access,s代表sql server,o代表oracle

a:select now()

s:select getdate()

o:select sysdate from dual

a:&s:+

o:||

a:mid、ucase、lcase、instr

s:substring、upper、lower、charindex

o:substr、upper、lower、instr

a:iif

s:case when then

o:decode

a:要用#號分隔,或者轉換為日期

select * from books where regdate =#2007-5-1# 或

select * from books where regdate =cdate(』2007-5-1′)

s:可以直接用''

select * from books where regdate =『2007-5-1′

o:to_date

select * from books whereregdate=to_date('2007-05-01','yyyy-mm-dd')

a:cstr,cint,cdate

s:convert

o:to_char,to_number,to_date

insert into a(ii,jj,kk) (select ii,jj,kkfrom b)

這樣的語句,在sql server以及oracle中都不會有錯,但在access中會報:insert into 語句的語法錯誤。access應該把後面select語句的括號去掉,如下:

insert into a(ii,jj,kk) select ii,jj,kkfrom b

同時這樣寫在sql server和oracle中都不會有錯

有些字母在access,sql server中是關鍵字,需要用[ ]界定可解決問題,例如:at,name

sql server和oracle中字段起別名時as可以省略,access不能

select *,1 from a

這樣的語句在access,sql server中不會有錯,但在oracle中是不行的,必須要寫成這樣:

select a.*,1 from a

例如有時間欄位的查詢:calcdate=#2008-05-0111:00:00#,在access中一般會出現如下錯誤:不正常地定義引數物件。提供了不一致或不完整的資訊。將相應query的paramcheck設為false即可。

access中的邏輯值在庫中為-1和0,而sql server中為1和0,所以寫boolfield = 1這樣的語句有相容性問題,應該改為boolfield <> 0

access的varchar(文字)型最大只有255,所以如果乙個文字型字段大於255時,最好定義成備註型(access中)或text型(sqlserver中);

oracle與mysql死鎖處理方式的不同點

oracle與mysql在遇到死鎖的時候都是自動檢測並處理,但是處理還是有些不同,oracle在自動檢測到死鎖後,會kill乙個會話導致的死鎖,但是不會完全回退這個事務的所有 語句,mysql會回退所有的語句。oracle session a sql update t1 set id 5 where...

Oracle 文字與字串不匹配

執行方法的時候,方法在本地跑是正常,到測試環境報錯,錯誤 為 add months to date nvl t2.exec time,t1.distribute time 1 yyyy mm dd hh24 mi ss 1 2 後來找出中間錯誤部分,是t1.distribute time 1這部分報...

Oracle不走索引的原因

在oracle資料庫操作中,為什麼有時乙個表的某個字段明明有索引,當觀察一些語的執行計畫確不走索引呢?如何解決呢?本文我們主要就介紹這部分內容,接下來就讓我們一起來了解一下 不走索引大體有以下幾個原因 你在instance級別所用的是all rows的方式 你的表的統計資訊 最可能的原因 你的表很小...