Oracle讲解
锁、分区、视图、索引等内容在此省略
2.5 Oracle序列
序列类似于SQLSERVER里的标识列,它是用来生成唯一的、连续的整数的数据库对象,可按升序或降序排列
CREATE SEQUENCE student_seq
START WITH 10 --从哪里开始 INCREMENT BY 2 --每次增加多少 MAXVALUE 2000 --最大值是多少
NOCYCLE --达到最大值后不能继续从头开始生成 CACHE 30; --使用CACHE预先生成一系列数据在缓存
访问序列
NEXTVAL访问序列的下一个值 CURRVAL返回序列的当前值
INSERT INTO Student(stuID,stuName) VALUES ('Y2'||student_seq.NEXTVAL,'张三');
SELECT stduent_seq.CURRVAL FROM dual; 更改序列
ALTER SEQUENCE student_seq MAXVALUE 5000 CYCLE; 删除序列
DROP SEQUENCE student_seq; 查看有所有序列
select sequence_name from ALL_SEQUENCES;
//创建学生表、课程表,成绩表所使用的序列
CREATE SEQUENCE student_seq START WITH 1 INCREMENT BY 1; CREATE SEQUENCE course_seq START WITH 1 INCREMENT BY 1; CREATE SEQUENCE score_seq START WITH 1 INCREMENT BY 1; /
//使用序列往三张表里放入测试数据
INSERT INTO student VALUES(student_seq.NEXTVAL,'杰克逊','JACKSON@163.com',23,'公安');
INSERT INTO student VALUES(student_seq.NEXTVAL,'张学友','zhangxueyou@sina.com',25,'香港');
INSERT INTO student VALUES(student_seq.NEXTVAL,'张国荣','zhangguorong@126.com',30,'沙市');
INSERT INTO student VALUES(student_seq.NEXTVAL,'范冰冰','fanbingbing@jzaccp.com',18,'
11
Oracle讲解
荆州');
--往课程表里放数据
INSERT INTO course VALUES(course_seq.NEXTVAL,'JAVA'); INSERT INTO course VALUES(course_seq.NEXTVAL,'HTML'); INSERT INTO course VALUES(course_seq.NEXTVAL,'SQL'); INSERT INTO course VALUES(course_seq.NEXTVAL,'C#'); ALTER TABLE student MODIFY(stuName varchar(25)); ALTER TABLE student ADD(stuEmail varchar(20));
INSERT INTO SCORE VALUES(score_seq.NEXTVAL,1021,21,80); INSERT INTO SCORE VALUES(score_seq.NEXTVAL,1021,22,56); INSERT INTO SCORE VALUES(score_seq.NEXTVAL,1021,23,76); INSERT INTO SCORE VALUES(score_seq.NEXTVAL,1021,24,35);
INSERT INTO SCORE VALUES(score_seq.NEXTVAL,1022,21,52); INSERT INTO SCORE VALUES(score_seq.NEXTVAL,1022,22,90); INSERT INTO SCORE VALUES(score_seq.NEXTVAL,1022,23,98);
INSERT INTO SCORE VALUES(score_seq.NEXTVAL,1023,21,65); INSERT INTO SCORE VALUES(score_seq.NEXTVAL,1023,24,24);
INSERT、UPDATE、DELETE后执行COMMIT;不然数据是临时的
//内连接查询(不是PL/SQL不要再后面加/因为加了会执行两次) SELECT stu.stuName 用户名,sco.score 成绩,sco.courseId 课程编号 from student stu INNER JOIN score sco ON(stu.stuId=sco.stuId); //外连接查询
SELECT stu.stuName 学员姓名,sco.score 成绩,sco.courseId 课程编号 FROM student stu,score sco WHERE stu.stuId=sco.stuId(+); 等价于:
SELECT stu.stuName 学员姓名,sco.score 成绩,sco.courseId 课程编号 FROM student stu LEFT OUTER JOIN score sco ON(stu.stuId=sco.stuId);
//+跟着哪边就以对方作为基准去找
PL/SQL简介
(Procedural Language/SQL)过程语言/SQL是结合了ORACLE的过程语言和结构化查询语言SQL的一种扩展语言。 其一般分为三部分:
[DECLARE declarations] --声明部分 BEGIN Executable statements --可执行部分
12
Oracle讲解
[Exception exception handlers] --异常处理部分 END;
PL/SQL对大小写不敏感,可以包含下列复合符号:
:= || -- /* */ << >> .. ** 赋值 连接 单行注释 多行注释 标签分隔符 范围 求幂 声明变量必须指定变量的数据类型,可以在声明的时候进行初始化 声明常量时被赋予初始值 DECLARE vcode VARCHAR2(10); vname VARCHAR2(25):=’JACK’; total CONSTANT NUMBER:=100; BEGIN vcode:=’Y21001’; .. END;
其中:=可以使用DEFAULT代替 数据类型: 数据类型 BINARY_INTEGER NUMBER PLS_INTEGER CHAR RAW LONG或LONG RAW VARCHAR2 DATE TIMESTAMP BOOLEAN BFILE BLOB CLOB NCLOB %TYPE %ROWTYPE
描述 带符号整数,有很多子类型 存储整数定点数浮点数,子类型有FLOAT、INTEGER等 带符号的整数,效率更高 存储固定长度的字符串 存储二进制或字节串,最大2000字节 最大2G 可变长度的字符串,子类型STRING与VARCHAR 日期类型 日期类型是DATE的扩展 存储TRUE、FALSE、NULL 存储二进制对象,BFILE是文件定位器 存储二进制对象 存储大型字符数据 存储大型NCHAR数据 引用某个变量或某列的数据类型 表中一行的记录类型,可以表示从游标提取出的整行数据 13
Oracle讲解
Oracle的控制结构:
3.1 条件结构:
IF 条件 THEN 语句; END IF;
IF 条件 THEN 语句1; ELSE 语句2; END IF;
IF 条件1 THEN 语句1;
ELSEIF 条件2 THEN 语句2; ELSE 语句3; END IF;
CASE 表达式 WHEN 表达式1 THEN 语句1; WHEN 表达式2 THEN 语句2; WHEN 表达式3 THEN 语句3; ELSE 语句n; END CASE;
SET SERVEROUTPUT ON; DECLARE scode1 NUMBER(2):=7; BEGIN scode1:=&请输入scode的值; CASE scode1 WHEN 1 THEN DBMS_OUTPUT.PUT_LINE('1---添加用户'); WHEN 2 THEN DBMS_OUTPUT.PUT_LINE('2---修改用户'); WHEN 3 THEN DBMS_OUTPUT.PUT_LINE('3---删除用户'); ELSE DBMS_OUTPUT.PUT_LINE('请输入1-3之间的数'); END CASE; END; /
14
Oracle讲解
&grade是要求用户输入grade的值
SET SERVEROUTPUT ON 打开输出
DBMS_OUTPUT.PUT_LINE(‘输出的内容’);
3.2 循环结构:
LOOP 循环体语句; END LOOP;
SET SERVEROUTPUT ON; DECLARE n NUMBER(2):=0; BEGIN LOOP n:=n+1; DBMS_OUTPUT.PUT_LINE('accp'); EXIT WHEN n>10; END LOOP; END; /
WHILE 条件 LOOP 语句;@ END LOOP;
SET SERVEROUTPUT ON; DECLARE n NUMBER(2):=0; BEGIN WHILE n<10LOOP n:=n+1; DBMS_OUTPUT.PUT_LINE('accp'); END LOOP; END; /
--循环加分,直到都及格,最高分不能超过100
--给JAVA(21)成绩循环加5分,直到都及格为止,分数不能超过100分 SET SERVEROUTPUT ON; DECLARE
num NUMBER(5):=1; BEGIN
15