CREATE?SEQUENCE
seqTest INCREMENT?BY?1?--?每次加几个
START?WITH?1?--?从1开始计数
NOMAXvalue?--?不设置最大值
MINVALUE 1:指定序列的最小值。这个整数值可以最多28位数字。
MINVALUE必须<=START WITH的值和必须小于MAXVALUE
MaxValue 20:指定序列可生成的最大值。这个整数值可以最多28位数字。MAXVALUE必须>=START WITH、必须大于MINVALUE
CYCLE:指定循环,当递增序列达到最大值后,再从最小值开始循环。当递减序列达到最小值,从最大值开始循环
NOCYCLE?--?一直累加,不循环
CACHE?10;?--设置缓存cache个序列,这样存取的快些
NOCACHE :指定该序列值不被预分配。
如果省略CACHE和NOCACHE,数据库默认会缓存20个序列号。
ex.
CREATE SEQUENCE EMP_ID_SEQ
MINVALUE 1
MAXVALUE 100000
START WITH 1
INCREMENT BY 1
NOCACHE
NOCYCLE;
定义好sequence后,就可以用currVal,nextVal取得sequence的值。
SELECT EMP_ID_SEQ.NEXTVAL from dual;
resualt
1
SELECT EMP_ID_SEQ.CURRVAL from dual;
result
1
索引主要可以分为唯一索引
、主索引
、单列索引
、复合索引
以及聚簇索引
等
CREATE [UNIQUE]|[CLUSTER]INDEX索引名
ON table_name (column1, column2, . column_n)
SQL> select
2 b.uniqueness, a.index_name, a.table_name, a.column_name
3 from user_ind_columns a, user_indexes b
4 where a.index_name=b.index_name
5 and a.table_name = 'EMP'
6 order by a.table_name, a.index_name, a.column_position;
UNIQUENESS NDEX_NAME TABLE_NAME COLUMN_NAME
------------------ ------------------------------------------------------------
UNIQUE EMPNO_INDEX EMP EMPNO
DROP INDEX EMPNO_INDEX;
约束类型 | 说明 |
---|---|
唯一约束(UNIQUE) | 保证列的值的唯一性。但是唯一约束中可以允许在列中插入空值(即NULL值)。 |
主键约束(PRIMARY KEY) | 使用主键约束的列中只能有唯一的值,并且不能包含空值 |
外键约束(FOERING KEY) | 保证表的参照完整性。确保对一个表的数据操作不会对与之关联的表造成不利的影响 |
检查约束(CHECK) | 限制列的取值范围或者取值条件。可以为一个列定义多个CHECK约束。 |
非空约束(NOT NULL) | 只用来约束列。在向该列插入数据时不允许插入空值。 |
CREATE TABLE EMPLOYEE (
EMAIL VARCHAR2(20) CONSTRAINT UK_EMAIL UNIQUE,
DEPT_ID NUMBER(8)
);
不允许插入重复值,但允许插入null
CREATE TABLE table_name(column1 datatype constraint
column2 datatype constaint
...CONSTRAINT <constraint name> ?
FOREIGN KEY (column1, column2, ... column_n)? REFERENCES parent_table (column1, column2, ... column_n));
创建EMPLOYEE和DEPARTMENT
EMPLOYEE:
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------
EMP_ID NOT NULL NUMBER(6)
FIRST_NAME NOT NULL VARCHAR2(20)
LAST_NAME NOT NULL VARCHAR2(20)
EMAIL VARCHAR2(20)
SALARY VARCHAR2(9)
COMMISSION_PCT NUMBER(4)
HIRE_DATE NOT NULL DATE
MANAGER_ID NUMBER(8)
DEPT_ID NUMBER(8)
DEPARTMENT:
名称 是否为空? 类型
----------------------------------------- -------- -------------
DEPT_ID NOT NULL NUMBER(8)
DEPT_NAME VARCHAR2(20)
MANAGER_ID NUMBER
LOC_ID NOT NULL NUMBER
CREATE TABLE table_name(column1 datatype constraint
column2 datatype constaint
...CHECK (Constraints));
ALTER TABLE table_name
ADD [CONSTRAINT constraint_name] constraint_type (column);
ALTER TABLE table_name
DROP CONSTRAINT constraint_name;
ALTER TABLE table_name
ENABLE CONSTRAINT constraint_name;
ALTER TABLE table_name
DISABLE CONSTRAINT constraint_name
在SQL的连接查询语句中,还有一种查询方式就是结合查询。集合查询主要包括三种:
SELECT 语句1
UNION
SELECT 语句2
SELECT 语句1
UNION ALL
SELECT 语句2
按照要求查询员工信息
(1)职位是MANAGER,或者总收入(薪水+佣金)大于2000的职位是ANALYST员工
(2)部门编号是10或者20,并且是1987年以前雇佣
(3)按照薪水从高到低排序
SELECT 语句1
INTERSECT
SELECT 语句2
SELECT 语句1
MINUS
SELECT 语句2
请使用集合查询完成下面的SQL
1.查询50号部门的员工号、员工名、工资和部门号以及工资大于8000的所有员工的员工号、员工名、工资和部门号并去除重复记录
2.查询50号部门中工资大于6000的员工号、员工名、工资和部门号(利用INTERSECT)
3.查询50号部门中工种不是“ST_CLERK”的员工号、员工名和工种名称(利用MINUS)
DECLARE
v_empno emp.empno%TYPE :=&empno;
V_salary emp.sal%TYPE;
V_comment VARCHAR2(35);
BEGIN
SELECT sal INTO v_salary FROM emp WHERE empno=v_empno;
IF v_salary<1500 THEN
V_comment:= ‘Fairly less’;
ELSE
V_comment:= ‘Lots of salary’;
END IF;
DBMS_OUTPUT.PUT_LINE(V_comment);
Insert into table1 values(…….. V_comment);
Commit;
EXCEPTION
When others THEN
WriteLogFile(…..);
DBMS_OUTPUT.PUT_LINE (‘No data’);
END;
PL/SQL块语法:
DECLARE
/* 声明部分:
声明PL/SQL用到的变量,类型,游
标,以及局部的存储过程和函数 */
BEGIN
/* 执行部分: 过程及SQL 语句,
即程序的主要部分 */
EXCEPTION
/* 执行异常部分: 错误处理 */
END;
原文:https://www.cnblogs.com/Mr-quin/p/11301862.html