2017-05-22 72 views
4

我有一個表列的後盾序列NEXTVAL聲明如下:充分利用標識列

file_id number(10) generated always as identity primary key, 

是否有可能以編程方式得到它的支持序列currval/nextval而無需真正查看到SYS。表獲取序列的名稱,然後在該名稱上使用execute immediate

回答

6

是否有可能以編程方式獲得CURRVAL /從其 後盾序列NEXTVAL而無需真正查看到SYS

是的,如果你真的需要這麼做。您可以簡單地在USER_SEQUENCES數據字典視圖中查找該序列名稱,或者更好地查找USER_TAB_IDENTITY_COLS數據字典視圖,並在查詢中引用它。這裏有一個例子:

create table t1(
    c1 number generated always as identity primary key 
); 

insert into t1 values(default); 

select * from t1; 

C1 
----- 
    1 

在我的情況下,一個序列的名字甲骨文標識列創建爲ISEQ$$_92984

select "ISEQ$$_92984".nextval from dual; 

NEXTVAL 
------- 
    2 

insert into t1 values(default); 

select * from t1; 

C1 
--------- 
     1 
     3 
+0

這與調查sys表(因爲您需要首先將序列的名稱提取到變量中,然後通過變量名查詢序列)基本相同,假設我只知道表和列的名稱在編寫plsql代碼的時候。我希望有一些簡單的東西,比如TABLE.COLUMN.NEXTVAL :) –

+0

不,不能這樣做。 –

+0

我很懷疑,謝謝你的確認。 –