真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

oracle如何返回id oracle存儲過程如何返回值

oracle數(shù)據(jù)庫,表中有id(自增字段,主鍵), insert 語句插入一條記錄后要求,返回當(dāng)前插入記錄的id値。

sequence就是一個(gè)序列,你每次執(zhí)行 select CASE_SEQ.nextval from dual 的時(shí)候都會返回唯一的一個(gè)ID號,因此你可以先執(zhí)行這個(gè)select取到這個(gè)ID,如果這個(gè)時(shí)候有多個(gè)用戶在執(zhí)行這個(gè)操作,那么他們select到的ID絕對跟你的不一樣(sequence就是保證這一點(diǎn)的)。然后你就可以用這個(gè)ID插入記錄,然后再返回這個(gè)ID就OK了。

成都創(chuàng)新互聯(lián)是一家專注于成都網(wǎng)站制作、成都網(wǎng)站建設(shè)與策劃設(shè)計(jì),云巖網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)十載,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:云巖等地區(qū)。云巖做網(wǎng)站價(jià)格咨詢:028-86922220

代碼:

string sql = "Select CASE_SEQ.currval from dual";

OracleConnection conn = DB.getCon();

OracleCommand cmd = conn.CreateCommand();

conn.Open();

string returnID = null;

cmd.CommandText = sql;

returnID = Convert.ToString(cmd.ExecuteScalar()); //獲取ID

sql = "insert into PATIENT_T(pid,name) values(returnID,'黎明')"; //將ID插入數(shù)據(jù)庫

cmd.CommandText = sql;

cmd.ExecuteNonQuery();

conn.Close();

結(jié)束了,差不多就是這樣,樓主自己調(diào)試一下就行了,注意ID在數(shù)據(jù)庫中應(yīng)該是varcahr類型的

oracle使用觸發(fā)器返回id和使用序列返回id有什么不同嗎,都可以使用序列返回id的方法嗎?請大神說的詳細(xì)點(diǎn)

有兩種方法可以設(shè)置主鍵,一種是自增長主鍵,另一種就是生成唯一序列。

一、自增長主鍵

--首先建一個(gè)表TEST

create table TEST

(

NID int PRIMARY KEY,

test1 varchar2(20),

test2 varchar2(20),

test3 varchar2(20),

test4 varchar2(20),

test5 varchar2(20)

)

-- 再建一個(gè)序列SEQ_TEST

create sequence SEQ_TEST

minvalue 1 --最小值

nomaxvalue --不設(shè)置最大值

start with 1 --從1開始計(jì)數(shù)

increment by 1 --每次加1個(gè)

nocycle --一直累加,不循環(huán)

nocache; --不建緩沖區(qū)

以上代碼完成了一個(gè)序列(sequence)的建立過程,名稱為SEQ_TEST,范圍是從1開始到無限大(無限大的程度是由你機(jī)器決定的),nocycle 是決定不循環(huán),如果你設(shè)置了最大值那么你可以用cycle 會使seq到最大之后循環(huán).對于nocache順便說一下如果你給出了cache值那么系統(tǒng)將自動(dòng)讀取你的cache值大小個(gè)seq,這樣在反復(fù)操作時(shí)會加快運(yùn)行速度,但如果遭遇意外情況如當(dāng)機(jī)了或Oracle死了,則下次取出的seq值將和上次的不連貫.(如果連不連貫無所謂建議用cache,因?yàn)闀r(shí)間就是金錢呀!)

你只有了表和序列還不夠,最好再建一個(gè)觸發(fā)器來執(zhí)行它!代碼如下:

CREATE OR REPLACE TRIGGER tg_test

BEFORE INSERT ON test FOR EACH ROW WHEN (new.nid is null)

begin

select seq_test.nextval into:new.nid from dual;

end;

下面是測試

select * from test

insert into test(nid,test1) values(6,'aaa')

insert into test(test1) values('bbb')

oracle 在sql中怎么獲取id

oracle 在sql中怎么獲取id

1、對于提交(最后一次操作commit了)的話可以查詢那個(gè)提交段

SELECT 列名1,列名2……

FROM 表名 VERSIONS BETWEEN TIMESTAMP MINVALUE AND MAXVALUE where

VERSIONS_STARTTIME IS NOT null ORDER BY VERSIONS_STARTTIME DESC;

查出來的第一條就是最后改變的數(shù)據(jù)

2、如果表里面有序列或固定的排序字段可按倒排序后取第一條

where rownum2 order by 排序字段 desc

3、還有另外一種辦法就是利用ORACLE偽列rowid

select * from tbl t1 where t1.rowid=(select max(rowid) from tbl t2)

4、在redo log中找到對應(yīng)相關(guān)的表的插入語句,但是這樣找到的是sql語句,而不是數(shù)據(jù)。查redo log得使用log miner工具

oracle怎么在生成id時(shí)獲取id

 一、主鍵id自增

oracle 中不能設(shè)置自動(dòng)增加,這個(gè)和其他數(shù)據(jù)庫不一樣,但是有 序列,這個(gè)是Oracle自己特有的東西,

1、首先創(chuàng)建序列:create sequence seq;

語法:

CREATE SEQUENCE 序列名

[INCREMENT BY n] --每次加幾

[START WITH n] --序列從幾開始

[{MAXVALUE/ MINVALUE n|NOMAXVALUE}] --小值、大值限制

比CREATE SEQUENCE seq start with 1 increment by 1; --建立了額從1開始每次加1序列

訪問序列時(shí)用 序列名稱.nextval語法

這就創(chuàng)建好了,然后 seq.nextval 就會返回一個(gè)值,不會重復(fù)的值,

insert into tablename values(seq.nextval,'test');

insert into tablename values(seq.nextval,'test');

insert into tablename values(seq.nextval,'test');

這樣前3個(gè)id 分別是 1,2,3

如何取得Oracle當(dāng)前會話的ID

查看當(dāng)前會話的session ID 有如下三種方法:

1. v$mystat視圖

SQL select sid from v$mystat where rownum=1;

SID

----------

1152

2. 使用userenv(‘sid’) 直接獲取

這種方法只能在oracle 10g以后可以使用。

SQL select userenv('sid') from dual;

USERENV('SID')

--------------

1152

3. 結(jié)合 userenv('sessionid') 與 v$session 視圖

userenv('sessionid') 返回的是session audit id.其對應(yīng)v$session 的audsid字段。

在session 連接到數(shù)據(jù)庫的時(shí)候,會從SYS.AUDSES$序列中獲取一個(gè)audid 分配給session。

SQL select sid from v$session where audsid=userenv('sessionid');

SID

----------

773

1152

--這里返回了2個(gè)值,直接查看userenv('sessionid') 值:

SQL select userenv('sessionid') from dual;

USERENV('SESSIONID')

--------------------

4294967295

對于internal用戶(’/as sysoper’ 和 ‘/as sysdba’)和后臺進(jìn)程,其對應(yīng)的AUDID 為0.

在Oracle 10g中,如果AUDID的值為0,表明是internal 用戶,如果AUDID 值是4294967295,那么就表明是用SYS 用戶直接連接的。

這里返回三個(gè)結(jié)果是把所有SYS 用戶的session都返回了,所以這種方法有時(shí)的準(zhǔn)確性并不高。

如何實(shí)現(xiàn)在Oracle插入一條記錄返回主鍵

單純sql語句里面沒有這個(gè)語法。

plsql里面有這個(gè)方法,具體示例:

DECLARE

v_id t.id%TYPE;

BEGIN

INSERT INTO t

VALUES (t_seq.nextval, 'DDD')

RETURNING id INTO v_id;

COMMIT;

DBMS_OUTPUT.put_line('ID=' || v_id);

END;

/


本文標(biāo)題:oracle如何返回id oracle存儲過程如何返回值
網(wǎng)頁地址:http://weahome.cn/article/hhohic.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部