重庆分公司,新征程启航

为企业提供网站建设、域名注册、服务器等服务

oracle如何返回id oracle存储过程如何返回值

oracle数据库,表中有id(自增字段,主键), insert 语句插入一条记录后要求,返回当前插入记录的id値。

sequence就是一个序列,你每次执行 select CASE_SEQ.nextval from dual 的时候都会返回唯一的一个ID号,因此你可以先执行这个select取到这个ID,如果这个时候有多个用户在执行这个操作,那么他们select到的ID绝对跟你的不一样(sequence就是保证这一点的)。然后你就可以用这个ID插入记录,然后再返回这个ID就OK了。

成都创新互联是一家专注于成都网站制作、成都网站建设与策划设计,云岩网站建设哪家好?成都创新互联做网站,专注于网站建设十载,网设计领域的专业建站公司;建站业务涵盖:云岩等地区。云岩做网站价格咨询: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插入数据库

cmd.CommandText = sql;

cmd.ExecuteNonQuery();

conn.Close();

结束了,差不多就是这样,楼主自己调试一下就行了,注意ID在数据库中应该是varcahr类型的

oracle使用触发器返回id和使用序列返回id有什么不同吗,都可以使用序列返回id的方法吗?请大神说的详细点

有两种方法可以设置主键,一种是自增长主键,另一种就是生成唯一序列。

一、自增长主键

--首先建一个表TEST

create table TEST

(

NID int PRIMARY KEY,

test1 varchar2(20),

test2 varchar2(20),

test3 varchar2(20),

test4 varchar2(20),

test5 varchar2(20)

)

-- 再建一个序列SEQ_TEST

create sequence SEQ_TEST

minvalue 1 --最小值

nomaxvalue --不设置最大值

start with 1 --从1开始计数

increment by 1 --每次加1个

nocycle --一直累加,不循环

nocache; --不建缓冲区

以上代码完成了一个序列(sequence)的建立过程,名称为SEQ_TEST,范围是从1开始到无限大(无限大的程度是由你机器决定的),nocycle 是决定不循环,如果你设置了最大值那么你可以用cycle 会使seq到最大之后循环.对于nocache顺便说一下如果你给出了cache值那么系统将自动读取你的cache值大小个seq,这样在反复操作时会加快运行速度,但如果遭遇意外情况如当机了或Oracle死了,则下次取出的seq值将和上次的不连贯.(如果连不连贯无所谓建议用cache,因为时间就是金钱呀!)

你只有了表和序列还不够,最好再建一个触发器来执行它!代码如下:

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了)的话可以查询那个提交段

SELECT 列名1,列名2……

FROM 表名 VERSIONS BETWEEN TIMESTAMP MINVALUE AND MAXVALUE where

VERSIONS_STARTTIME IS NOT null ORDER BY VERSIONS_STARTTIME DESC;

查出来的第一条就是最后改变的数据

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中找到对应相关的表的插入语句,但是这样找到的是sql语句,而不是数据。查redo log得使用log miner工具

oracle怎么在生成id时获取id

 一、主键id自增

oracle 中不能设置自动增加,这个和其他数据库不一样,但是有 序列,这个是Oracle自己特有的东西,

1、首先创建序列: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序列

访问序列时用 序列名称.nextval语法

这就创建好了,然后 seq.nextval 就会返回一个值,不会重复的值,

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

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

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

这样前3个id 分别是 1,2,3

如何取得Oracle当前会话的ID

查看当前会话的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. 结合 userenv('sessionid') 与 v$session 视图

userenv('sessionid') 返回的是session audit id.其对应v$session 的audsid字段。

在session 连接到数据库的时候,会从SYS.AUDSES$序列中获取一个audid 分配给session。

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

SID

----------

773

1152

--这里返回了2个值,直接查看userenv('sessionid') 值:

SQL select userenv('sessionid') from dual;

USERENV('SESSIONID')

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

4294967295

对于internal用户(’/as sysoper’ 和 ‘/as sysdba’)和后台进程,其对应的AUDID 为0.

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

这里返回三个结果是把所有SYS 用户的session都返回了,所以这种方法有时的准确性并不高。

如何实现在Oracle插入一条记录返回主键

单纯sql语句里面没有这个语法。

plsql里面有这个方法,具体示例:

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;

/


文章名称:oracle如何返回id oracle存储过程如何返回值
标题来源:http://cqcxhl.com/article/hhohic.html

其他资讯

在线咨询
服务热线
服务热线:028-86922220
TOP