PLSQL编程:对SQL语句的扩展,编程语言+SQL语言
1、变量、变量的声明和使用,语句块
1.1、语法
DECLARE
--变量声明语法:变量名 变量数据类型 := 初始值
-- 变量名 变量数据类型 default 默认值
--给变量赋值,select 列名 into 变量名 from 表名 where 条件
BEGIN
END;
1.2、复合数据类型
1.2.1、%TYPE 用于取表或者视图或者游标中的字段类型
1.2.2、%ROWTYPE 用于取表或者视图或者游标中的行类型
1.2.1、%TYPE 用于取表或者视图或者游标中的字段类型
1.2.2、%ROWTYPE 用于取表或者视图或者游标中的行类型
2、例子:
DECLARE
v_empno NUMBER;
v_ename VARCHAR2(10);
PI CONSTANT NUMBER :=3.14;
BEGIN
v_ename := '&请输入员工姓名';
SELECT empno INTO v_empno FROM emp WHERE ename = v_ename;
dbms_output.put_line(v_empno);
dbms_output.put_line(PI);
END;
DECLARE
id_num emp.empno%TYPE;
BEGIN
SELECT empno INTO id_num FROM emp WHERE ename = 'SMITH';
dbms_output.put_line(id_num);
END;
DECLARE
emp_info emp%ROWTYPE;
BEGIN
SELECT * INTO emp_info FROM emp WHERE ename = 'SMITH';
dbms_output.put_line(emp_info.empno || '-' || emp_info.ename);
END;
3、语法结构
3.1、基本概念
(1)顺序结构
(2)分支结构
3.1、基本概念
(1)顺序结构
(2)分支结构
IF THEN
ELSIF THEN
ELSE
END IF;
CASE WHEN THEN
WHEN THEN
ELSE
END CASE;
【注意】oracle不同于mysql,CASE END 处不需要 CASE
(3)循环结构
【1】loop 循环体(跳出循环的条件) end loop ;
【2】while循环,while 循环条件 loop 循环体 end loop ;
【3】for循环,当知道循环次数
(3)循环结构
【1】loop 循环体(跳出循环的条件) end loop ;
【2】while循环,while 循环条件 loop 循环体 end loop ;
【3】for循环,当知道循环次数
4、例子
4.1
declare
d number := 32;
begin
if round(d/2,2) = round(d/2) then
dbms_output.put_line('偶数');
else
dbms_output.put_line('奇数');
end if;
end;
4.2
declare
score NUMBER;
grade VARCHAR2(10);
begin
score := '&请输入成绩';
grade :=(CASE WHEN score>=90 THEN 'A'
WHEN score>=80 THEN 'B'
WHEN score>=60 THEN 'C'
ELSE 'D'
END);
dbms_output.put_line(grade);
end;
declare
score NUMBER;
grade VARCHAR2(10);
begin
score := '&请输入成绩';
SELECT
CASE WHEN score>=90 THEN 'A'
WHEN score>=80 THEN 'B'
WHEN score>=60 THEN 'C'
ELSE 'D'
END CASE
INTO grade FROM dual;
dbms_output.put_line(grade);
end;
4.4行转列
SELECT s.estuid 学生id,
max(CASE
WHEN s.examsubject ='Java' THEN s.examresult
ELSE 0
END) Java,
max(CASE
WHEN s.examsubject ='ORACLE' THEN s.examresult ELSE 0
END) oracle
FROM STUDENTEXAM s
GROUP BY s.estuid;
4.5
declare
m number:=10;
begin
loop
m := m-1;
dbms_output.put_line(m);
if m<=0 then
dbms_output.put_line('倒计时结束');
exit;
end if;
end loop;
end;
4.6打印图形
declare
i number:=1;
m number:=10;
s number:=1;
begin
while (i<=m)
loop
while (s<=i)
loop
dbms_output.put('*');
s:=s+1;
end loop;
dbms_output.put_line('');
s:=0;
i:=i+2;
end loop;
end;
4.7
declare
s number:=0;
begin
for i in 1..100 loop
if mod(i,2)=0 then
s:=s+i;
end if;
end loop;
dbms_output.put_line(s);
end;