重庆分公司,新征程启航

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

oracle如何获取id,oracle如何获取表自增后的id

如何取得Oracle当前会话的ID

查看当前会话的session ID 有如下三种方法:

创新互联长期为成百上千客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为云县企业提供专业的网站建设、成都网站建设,云县网站改版等技术服务。拥有十多年丰富建站经验和众多成功案例,为您定制开发。

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都返回了,所以这种方法有时的准确性并不高。

如何在java中获取Oracle里获取自增ID 在线等

public class SeqManager {

protected String dataSource = "java:/OracleDS";

public SeqManager() {

}

/**

* 从数据库连接中取的一连接

*

* @param String dataSource 为数据源JNDI

*

*

* 返回值为数据库连接

*

*/

protected Connection getConnection(String dataSource)

{

Connection con = null;

try

{

InitialContext ic = new InitialContext();

DataSource ds = (DataSource) ic.lookup(dataSource);

con = ds.getConnection();

System.out.println("connection is :" + con);

// con.setAutoCommit(false);

} catch(NamingException e)

{

String err = "连接数据库时出错:找不到JNDI名称" + dataSource;

System.out.println(e);

e.printStackTrace();

} catch (SQLException ex)

{

String err = "连接数据库时出错:创建不了数据库连接";

System.out.println(ex);

ex.printStackTrace();

}

return con;

}

/**

* 取Sequence的公共方法

*

* @param String sql 为传进的SQL语句

*

*

* 返回值为Sequence值

*

*/

protected Long getNextValOfSeq(String sql) throws SQLException

{

Connection con = getConnection(dataSource);

PreparedStatement pst = con.prepareStatement(sql);

ResultSet rs = pst.executeQuery();

try

{

if (rs.next()) {

return new Long(rs.getLong(1));

}

else {

return null;

}

}catch(SQLException e)

{

throw e;

}finally

{

rs.close();

pst.close();

con.close();

}

}

public Long getNextValOfStudEntrScore() throws SQLException

{

String sql = " Select SeqStudEntrScore.NextVal From Dual ";

try

{

return getNextValOfSeq(sql);

}catch (SQLException e)

{

String errorMessage = "取***Sequence时出错.";

e.printStackTrace();

throw new SQLException(errorMessage);

}

}

}

在jsp里调用这个javaBeanjsp就是一个servlet操作数据库没什么区别

Oracle怎么得到刚刚新插入数据库那条记录的id

如果是plsql代码块,使用returning into 结果集,获取id;

如果是单独sql语句,若id是序列可用序列名.currval获取id值,但是出现并发情况可能获取有误;若非序列,需根据业务情况编写sql获取。

以上。

oracle 中如何获得一段SQL的进程ID

执行下列命令语句

sqlplus / as sysdba EOF

create tablespace test datafile '/data/test01.dbf' size 10240M;

quit;

EOF

通过ps -ef|grep sqlplus命令得到上面所执行的命令的进程id为:12345

(1)关于v$process

执行下面的SQL是查不到相关的信息:

select * from v$process where spid='12345';

因为这个spid字段对应的并不是我们用ps命令从系统中查询到的进程id,而是这个进程执行的当前SQL的进程id,

也就是上面命令中的“create tablespace test datafile '/data/test01.dbf' size 10240M;”所对应的进程id,如果想

通过用ps命令从系统中查询到的进程id查看对应的信息,那么必须使用下面语句:

select spid,sid,process,sql_address from v$session where process='12345'

上面sql中的process就是通过ps查看的进程id,而spid就是里面的sql语句所对应的进程id。

还可以通过上面的sql_address 查看正在执行的SQL语句内容:

select sql_text from v$sqlarea s,v$session ses where s.address=ses.sql_address and ses.process='12345';

如何获取session中的id

session即会话,是oracle中的概念,可用如下几个方法:

方法一:

1、登录oracle客户端,如plsql(登录用户需要有dba权限)。

2、运行如下语句,显示的就是当前的session id。

1

SELECT USERENV('SID') FROM DUAL;

方法二:

1、登录oracle客户端,如plsql(登录用户需要有dba权限)。

2、运行如下语句,显示的就是当前的session id。

1

SELECT SID FROM V$MYSTAT WHERE ROWNUM =1;

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,oracle如何获取表自增后的id
浏览地址:http://cqcxhl.cn/article/hddido.html

其他资讯

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