可以使用序列實(shí)現(xiàn)id自增,主鍵的語(yǔ)法為primary key。
10年的眉縣網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開(kāi)發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。全網(wǎng)整合營(yíng)銷(xiāo)推廣的優(yōu)勢(shì)是能夠根據(jù)用戶(hù)設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整眉縣建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無(wú)論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。成都創(chuàng)新互聯(lián)公司從事“眉縣網(wǎng)站設(shè)計(jì)”,“眉縣網(wǎng)站推廣”以來(lái),每個(gè)客戶(hù)項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。
當(dāng)一個(gè)序列第一次被查詢(xún)調(diào)用時(shí),它將返回一個(gè)預(yù)定值。在隨后的每次查詢(xún)中,序列將產(chǎn)生一個(gè)按指定的增量增長(zhǎng)的值。序列可以循環(huán),或者是連續(xù)增加的,直到指定的最大值為止。
創(chuàng)建序列語(yǔ)法如下:create sequence [模式]序列名稱(chēng)[start with 起始數(shù)字] [increment by 增量][maxvalue 最大值|nomaxvalue][minvalue 最小值|nominva lue][cycle|nocuyle][cache 數(shù)目|nocache][order|noorder]。
具體代碼示例如下:
創(chuàng)建表? ? ??
create table book(? ? ?
bookId varchar2(4) primary key,?
name varchar2(20)? ? ? ?
);?
創(chuàng)建序列? ?
create sequence book_seq start with 1 increment by 1;
創(chuàng)建觸發(fā)器? ?
create or replace trigger book_trigger? ? ?
before insert on book? ? ?
for each row? ? ?
begin? ? ?
select book_seq.nextval into :new.bookId from dual;
end ;?
添加數(shù)據(jù)? ?
insert into book(name)? values ('cc');?
insert into book(name)? values ('dd');?
commit;
擴(kuò)展資料:
在數(shù)據(jù)表中,有時(shí)候需要主鍵值自動(dòng)增加,但在Oracle數(shù)據(jù)庫(kù)中,沒(méi)有象Mysql的Autoincrement一樣自動(dòng)增長(zhǎng)的數(shù)據(jù)類(lèi)型。在實(shí)現(xiàn)Oracle數(shù)據(jù)庫(kù)字段自增功能時(shí),利用DML觸發(fā)器來(lái)完成。
觸發(fā)器(trigger)是一些過(guò)程,當(dāng)發(fā)生一個(gè)特定的數(shù)據(jù)庫(kù)事件時(shí)就執(zhí)行這些過(guò)程,可以使用觸發(fā)器擴(kuò)充引用的完整性。DML即數(shù)據(jù)操縱語(yǔ)言,用于讓用戶(hù)或程序員使用,實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)中數(shù)據(jù)的操作。基本的數(shù)據(jù)操作分成兩類(lèi)四種:檢索(查詢(xún))和更新(插入、刪除、修改)。
觸發(fā)器類(lèi)似于函數(shù)和過(guò)程,其在數(shù)據(jù)庫(kù)中以獨(dú)立身分存在。觸發(fā)事件可以是對(duì)數(shù)據(jù)庫(kù)表的DML(insert、update或delete)操作等。
ORACLE應(yīng)用于關(guān)系數(shù)據(jù)庫(kù)的表的數(shù)據(jù)完整性有下列類(lèi)型: 在插入或修改表的行時(shí)允許不允許包含有空值的列,稱(chēng)為空與非空規(guī)則。 唯一列值規(guī)則,允許插入或修改的表行在該列上的值唯一。 引用完整性規(guī)則,同關(guān)系模型定義 用戶(hù)對(duì)定義的規(guī)則,為復(fù)雜性完整性檢查。 ORACLE允許定義和實(shí)施上述每一種類(lèi)型的數(shù)據(jù)完整性規(guī)則,這些規(guī)則可用完整性約束和數(shù)據(jù)庫(kù)觸發(fā)器定義。 完整性約束,是對(duì)表的列定義一規(guī)則的說(shuō)明性方法。 數(shù)據(jù)庫(kù)觸發(fā)器,是使用非說(shuō)明方法實(shí)施完整性規(guī)則,利用數(shù)據(jù)庫(kù)觸發(fā)器(存儲(chǔ)的數(shù)據(jù)庫(kù)過(guò)程)可定義和實(shí)施任何類(lèi)型的完整性規(guī)則。
求采納
為方便完成指定數(shù)據(jù)表的同步操作,可以采用dblink與merge結(jié)合的方法完成。
操作環(huán)境: 此數(shù)據(jù)庫(kù)服務(wù)器ip為192.168.196.76,有center與branch兩個(gè)庫(kù),一般需要將center的表數(shù)據(jù)同步到branch,center為源庫(kù),branch為目標(biāo)庫(kù),具體步驟如下:
1.在源庫(kù)創(chuàng)建到目標(biāo)庫(kù)的dblink
create database link branch???? --輸入所要?jiǎng)?chuàng)建dblink的名稱(chēng),自定義?
connect to dbuser identified by “password”? --設(shè)置連接遠(yuǎn)程數(shù)據(jù)庫(kù)的用戶(hù)名和密碼?
using '192.168.196.76/branch';? --指定目標(biāo)數(shù)據(jù)庫(kù)的連接方式,可用tns名稱(chēng)
在創(chuàng)建dblink時(shí),要注意,有時(shí)候可能會(huì)報(bào)用戶(hù)名和密碼錯(cuò)誤,但實(shí)際上我們所輸入的賬戶(hù)信息是正確的,此時(shí)就注意將密碼的大小寫(xiě)按服務(wù)器上所設(shè)置的輸入,并在賬號(hào)密碼前號(hào)加上雙引號(hào)(服務(wù)器版本不同造成的)。
2.成功后驗(yàn)證dblink
select * from tb_bd_action@branch; --查詢(xún)創(chuàng)建好的brach庫(kù)
正常情況下,如果創(chuàng)建dblink成功,可采用該方式訪(fǎng)問(wèn)到遠(yuǎn)程數(shù)據(jù)庫(kù)的表.
3.通過(guò)merge語(yǔ)句完成表數(shù)據(jù)同步
此例中需要將center庫(kù)中的tb_sys_sqlscripe表同步到branch,簡(jiǎn)單的語(yǔ)法如下:
merge into tb_sys_sqlscripe@branch b using tb_sys_sqlscripe c on (b.pk=c.pk)? --從center將表merge到branch,同步的依據(jù)是兩個(gè)表的pk
when matched then? update set b.sqlscripe=c.sqlscripe,b.author=c.author? --如果pk值是相同則將指定表的值更新到目標(biāo)表
when not matched then ? --如果pk值不一至,則將源表中的數(shù)據(jù)整條插入到目標(biāo)表中
insert values (c.pk, c.fk, c.createtime, c.lastmodifytime,c.author,c.module,c.deleteflag, c.scripttype);
commit;?????????????? --記得merge后必須commit,否則更改未能提交
4.為方便每次需要同步時(shí)自動(dòng)完成同步工作,可將該語(yǔ)句做成存儲(chǔ)過(guò)程或腳本來(lái)定時(shí)執(zhí)行或按要求手動(dòng)執(zhí)行,簡(jiǎn)單說(shuō)一下創(chuàng)建腳本的方法:
a.創(chuàng)建merge文件夾
b.先將merge語(yǔ)句寫(xiě)完整后,存到merge.sql文件中
c.新建merge.bat文件,編輯后寫(xiě)入以下內(nèi)容
sqlplus user/password@serverip/database @"%cd%\merge.sql"
用觸發(fā)器trigger的功能來(lái)實(shí)現(xiàn)它: 1、首先建立一個(gè)創(chuàng)建自增字段的存儲(chǔ)過(guò)程create or replace procedure pro_create_seq_col
(tablename varchar2,columnname varchar2)
as
strsql varchar2(1000);
begin
strsql := 'create sequence seq_'||tablename||' minvalue 1 maxvalue 999999999999999999 start with 1 increment by 1 nocache';
execute immediate strsql;
strsql := 'create or replace trigger trg_'||tablename||' before insert on '||tablename||' for each row begin select seq_'||tablename||'.nextval into :new.'||columnname||' from dual; end;';
execute immediate strsql;
end;
/
2、Oracle中執(zhí)行動(dòng)態(tài)SQL時(shí)要顯示授權(quán)(即使該用戶(hù)擁有該相關(guān)權(quán)限)GRANT CREATE ANY SEQUENCE TO UserName;
GRANT CREATE ANY TRIGGER TO UserName;
3、重新Compile存儲(chǔ)過(guò)程pro_create_seq_col; 4、搞定,下面我們就可以用這個(gè)存儲(chǔ)過(guò)程建立自增自段了。 5、調(diào)用存儲(chǔ)過(guò)程建立自增字段(提示: 第一個(gè)參數(shù)是表名,第二個(gè)參數(shù)為自增字段的名字)exec pro_create_seq_col('sb_zsxx','zsxh');
exec pro_create_seq_col('sb_sbxx','sbxh');
exec pro_create_seq_col('sb_jkx','pzxh');
exec pro_create_seq_col('sdspfp','sysfpid');
利用任務(wù)計(jì)劃、批處理文件和ORACLE的EXP導(dǎo)出功能,可以根據(jù)日期自動(dòng)生成ORACLE備份文件,大大方便了ORACLE數(shù)據(jù)備份。
建議一(做周備份并壓縮為RAR)以下為ORACLE 自動(dòng)備份批處理文件內(nèi)容,請(qǐng)配合任務(wù)計(jì)劃實(shí)現(xiàn) :
例:
@ECHO OFF
SET BACKPATH=d:\
ECHO 準(zhǔn)備備份數(shù)據(jù)庫(kù)
REM 7天一個(gè)循環(huán)
IF EXIST %BACKPATH%\ONE GOTO ONE
IF EXIST %BACKPATH%\TWO GOTO TWO
IF EXIST %BACKPATH%\THREE GOTO THREE
IF EXIST %BACKPATH%\FOUR GOTO FOUR
IF EXIST %BACKPATH%\FIVE GOTO FIVE
IF EXIST %BACKPATH%\SIX GOTO SIX
IF EXIST %BACKPATH%\SEVEN GOTO SEVEN
ECHO E %BACKPATH%\ONE
:ONE
SET BACKPATH_FULL=%BACKPATH%\ONE
REN %BACKPATH%\ONE TWO
GOTO BACK
:TWO
SET BACKPATH_FULL=%BACKPATH%\TWO
REN %BACKPATH%\TWO THREE
GOTO BACK
:THREE
SET BACKPATH_FULL=%BACKPATH%\THREE
REN %BACKPATH%\THREE FOUR
GOTO BACK
:FOUR
SET BACKPATH_FULL=%BACKPATH%\FOUR
REN %BACKPATH%\FOUR FIVE
GOTO BACK
:FIVE
SET BACKPATH_FULL=%BACKPATH%\FIVE
REN %BACKPATH%\FIVE SIX
GOTO BACK
:SIX
SET BACKPATH_FULL=%BACKPATH%\SIX
REN %BACKPATH%\SIX SEVEN
GOTO BACK
:SEVEN
SET BACKPATH_FULL=%BACKPATH%\SEVEN
REN %BACKPATH%\SEVEN ONE
GOTO BACK
:BACK
EXP ccense/ccense FILE=%BACKPATH_FULL%.DMP
RAR a %BACKPATH_FULL%.rar %BACKPATH_FULL%.DMP
DEL %BACKPATH_FULL%.DMP
SET BACKPATH=
SET BACKPATH_FULL=
EXIT
說(shuō)明:
文件名以星期來(lái)命名
備份后調(diào)用rar進(jìn)行壓縮
這樣可以保存一個(gè)星期的歷史數(shù)據(jù)
注意:需要把program files/winrar目錄下的rar.exe拷貝到系統(tǒng)system32目錄下
建議二:
1,批處理文件backup.bat\.
exp system/manager file=d:\backup\oracle\oracle%date:~0,10%.dmp owner=system log=d:\backup\oracle\oracle%date:~0,10%.log
將生成oracle2006-01-09.dmp文件
exp system/manager file=d:\backup\oracle\oracle%date:~11,3%.dmp owner=system log=d:\backup\oracle\oracle%date:~11,3%.log
將生成oracle星期一.dmp文件,則每周循環(huán)保留一個(gè)備份文件,共7個(gè)備份文件循環(huán) $date$日期參數(shù)可靈活運(yùn)用。
因?yàn)镺racle數(shù)據(jù)庫(kù)沒(méi)有Top關(guān)鍵字,所以這里就不能夠像微軟的數(shù)據(jù)據(jù)那樣操作,這里有兩種方法:
一種是利用相反的。
PAGESIZE:每頁(yè)顯示的記錄數(shù)
CURRENTPAGE:當(dāng)前頁(yè)號(hào)
數(shù)據(jù)表的名字是:components
索引主鍵字是:id
select * from components where id not in(select id from components where rownum=(PAGESIZE*(CURRENTPAGE-1))) and rownum=PAGESIZE order by id;
如下例:
select * from components where id not in(select id from components where rownum=100) and rownum=10 order by id;
從101到記錄開(kāi)始選擇,選擇前面10條。
使用minus,即中文的意思就是減去,呵呵,這語(yǔ)句非常的有意思,也非常好記
select * from components where rownum=(PAGESIZE*(CURRENTPAGE-1)) minus select * from components where rownum=(PAGESIZE*(CURRENTPAGE-2));
如例:select * from components where rownum=10 minus select * from
一種是利用Oracle的rownum,這個(gè)是Oracle查詢(xún)自動(dòng)返回的序號(hào),一般不顯示,但是可以通過(guò)select rownum from [表名],可以看到,是從1到當(dāng)前的記錄總數(shù)。
select * from (select rownum tid,components.* from components where rownum=100) where tid=10;
新聞名稱(chēng):oracle怎么實(shí)現(xiàn) 使用oracle
網(wǎng)站地址:http://www.chinadenli.net/article20/hpjoco.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化、品牌網(wǎng)站制作、網(wǎng)站導(dǎo)航、網(wǎng)站收錄、網(wǎng)站營(yíng)銷(xiāo)、云服務(wù)器
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容