数据库同义词
㈠ 数据库里面同义词、序列是什么东西
这个应该是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