变量声明与使用
v_a为变量,c_a为常量,需要用constant修饰
declare
v_a number(9);
c_a constant number(5):=200; --作用域:下面begin与end之间
begin
select class into v_a from student where sname='匡明';
DBMS_OUTPUT.PUT_LINE(v_a); --控制台输出
end;
另外一种方式:
declare
V_ROW STUDENT%ROWTYPE; --直接锚定表中的列指定变量类型
begin
SELECT * INTO V_ROW FROM STUDENT WHERE SNO=105;
DBMS_OUTPUT.put_line(V_ROW.SNAME||'~~'||V_ROW.SNO); --对象属性调用及拼接
end;
序列
创建序列
--序列 用来解决Oracle中没有自增列的问题
create sequence seq_first --创建序列
start with 7 --起始值
increment by 1 --增长值
maxvalue 2000 --最大值
cycle; --是否循环
使用序列
--序列的使用
insert into STUDENT VALUES(seq_first.nextval,'丁真','男',to_date('1999/01/01','yyyy/MM/dd'),95003);
select seq_first.currval from dual; --查询序列当前值
drop sequence seq_first; --删除序列
索引
创建索引
--创建索引
--unique index 唯一索引
--bitmap 位图索引
--反向键索引 create index index_first on student(sno) reverse;
create index index_first on student(sno);
-删除索引
drop index_first;
游标
--游标
--查询游标,逐行定位输出每行内容
declare
v_row STUDENT%ROWTYPE; --准备逐行接受student对象
--定义游标
cursor cursor_STUDENT is
select * from STUDENT;
begin
--1.打开游标
open cursor_STUDENT;
loop
fetch cursor_STUDENT into v_row;
exit when cursor_STUDENT%NOTFOUND; --判断游标是否为空,为空退出loop
DBMS_OUTPUT.put_line(v_row.sname);
end loop;
close cursor_STUDENT; --关闭游标
end;
存储过程
创建存储过程
--创建存储过程
create procedure add_STUDENT(
SNO NUMBER,
SNAME NVARCHAR2,
SSEX NVARCHAR2,
SBIRTHDAY DATE,
CLASS NUMBER
)
is
begin
insert into student values(SNO,SNAME,SSEX,SBIRTHDAY,CLASS);
end;
调用存储过程
--调用存储过程
CALL add_STUDENT(113,'蔡徐坤','男',date'1999-04-01',95003);