在建表時,創建欄位key,自己創建了一個自增序列作為欄位key的內容。
但是每次調度運行后key的內容都會發生改變,有沒有什么辦法可以讓原有的key的內容不變,同時插入新的記錄時key又自動增加新的內容
uj5u.com熱心網友回復:
樓主舉個例子;uj5u.com熱心網友回復:
select(序列名)seq.nextval as key,
T.code
from T (表名);
這樣,每次在PL/SQL中run一次后,key的內容都會發生改變,但是code不發生改變。
需要每次運行后key的內容都不發生改變,請問應該怎么處理?
uj5u.com熱心網友回復:
不要使用序列。select rownum key , code from t
或
select row_number() over(order by code) key , code from t
uj5u.com熱心網友回復:
可是,如果使用行數作為key值,那么當code的順序發生改變后,code對應的key值也會發生改變
uj5u.com熱心網友回復:
是會改變的,如果不想改變,只能再加一列,把這個 key 存到表中。
uj5u.com熱心網友回復:
那么這需要修改表結構嗎?應該怎么進行操作
uj5u.com熱心網友回復:
你的表的主鍵呢?uj5u.com熱心網友回復:
-- 使用觸發器
SQL>
SQL> create table test(key int, code varchar(10));
Table created
SQL> create sequence seq_test;
Sequence created
SQL> create trigger tri_test_id
2 before insert on test
3 for each row
4 begin
5 :new.key := seq_test.nextval;
6 end;
7 /
Trigger created
SQL> begin
2 insert into test(code) values('zhao');
3 insert into test(code) values('qian');
4 insert into test(code) values('sun');
5 insert into test(code) values('li');
6 end;
7 /
PL/SQL procedure successfully completed
SQL> select * from test ;
KEY CODE
--------------------------------------- ----------
1 zhao
2 qian
3 sun
4 li
SQL> drop table test purge;
Table dropped
SQL> drop sequence seq_test;
Sequence dropped
SQL>
uj5u.com熱心網友回復:
currval回傳當前的sequence值nextval回傳增值后的sequence值
uj5u.com熱心網友回復:
有沒有什么辦法可以讓原有的key的內容不變,同時插入新的記錄時key又自動增加新的內容如果KEY存盤了,那查詢的時候原來的key內容肯定不變了。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/109203.html
標籤:開發
上一篇:ORACLE查詢不同設備某一時間段內焊接工件數量,查詢陳述句怎么寫?
下一篇:oracle dg 疑似bug
