資料庫同義詞
㈠ 資料庫裡面同義詞、序列是什麼東西
這個應該是oracle里的吧?
同義詞 synonym
相當於alias(別名),比如把user1.table1在user2中建一個同義詞table1
create synonym table1 for user1.table1;
這樣當你在user2中查select * from table1時就相當於查select * from user1.table1;
序列比較復雜,
在oracle中sequence就是所謂的序列號,每次取的時候它會自動增加,一般用在需要按序列號排序的地方。
1、Create Sequence
你首先要有CREATE SEQUENCE或者CREATE ANY SEQUENCE許可權,
CREATE SEQUENCE emp_sequence
INCREMENT BY 1 -- 每次加幾個
START WITH 1 -- 從1開始計數
NOMAXVALUE -- 不設置最大值
NOCYCLE -- 一直累加,不循環
CACHE 10;
一旦定義了emp_sequence,你就可以用CURRVAL,NEXTVAL
CURRVAL=返回 sequence的當前值
NEXTVAL=增加sequence的值,然後返回 sequence 值
比如:
emp_sequence.CURRVAL
emp_sequence.NEXTVAL
可以使用sequence的地方:
- 不包含子查詢、snapshot、VIEW的 SELECT 語句
- INSERT語句的子查詢中
- NSERT語句的VALUES中
- UPDATE 的 SET中
可以看如下例子:
INSERT INTO emp VALUES
(empseq.nextval, 'LEWIS', 'CLERK',7902, SYSDATE, 1200, NULL, 20);
SELECT empseq.currval FROM DUAL;
㈡ oracle資料庫中循環同義詞,怎麼處理
1、 當用程序連接或者用plsql查詢同義詞時,如果出現ora-01775:同義詞的循環鏈這樣的問題。
一般是因為存在同義詞,但同義詞沒有相應的對象。
2、 先查有沒有循環的同義詞。
select * from dba_synonyms
where table_owner='TEST'
and synonym_name<>table_name;
沒有記錄。
3、 再查同義詞沒有對象的資料庫對象
select * from dba_synonyms
where table_owner='TEST'
and
synonym_name in
(select a.synonym_name from dba_synonyms a where a.table_owner='TEST'
minus
select object_name from user_objects)
4、 把查詢出來的結果進行查詢表
select * from DRILL_PRESON
如果該同義詞沒有相應的對象,則會包ora-01775的錯誤
5、 把這個同義詞刪除
drop public synonym DRILL_PRESON