查看當前會話的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都返回了,所以這種方法有時的準確性并不高。
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操作數據庫沒什么區別
如果是plsql代碼塊,使用returning into 結果集,獲取id;
如果是單獨sql語句,若id是序列可用序列名.currval獲取id值,但是出現并發情況可能獲取有誤;若非序列,需根據業務情況編寫sql獲取。
以上。
執行下列命令語句
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即會話,是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;
一、主鍵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://m.kartarina.com/article10/hddido.html
成都網站建設公司_創新互聯,為您提供網站內鏈、動態網站、商城網站、網頁設計公司、關鍵詞優化、Google
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯