--pl/sql 2
DECLARE
-- 最基本的pl/sql 代码块
-- student;
s student%ROWTYPE;
BEGIN
select *
into s --返回的是一个单独的实例
from student
where sno='s001';
--开始
--在一个表里面有一个输出函数v
DBMS_OUTPUT.PUT_LINE('学生姓名:'||s.sname); --换行打印
DBMS_OUTPUT.PUT_LINE('学生性别:'||s.ssex); --换行打印
DBMS_OUTPUT.PUT_LINE('学生年龄:'||s.sage); --换行打印
DBMS_OUTPUT.PUT_LINE('学生学号:'||s.sage); --换行打印
END;
/
/*
对数据的操作有哪些
+-* / % **
*/
DECLARE
a number(10,0);
b number(10,0);
c number(10,0);
BEGIN
a := 10;
b := 20;
DBMS_OUTPUT.PUT_LINE('a:'||a);
DBMS_OUTPUT.PUT_LINE('b:'||b);
DBMS_OUTPUT.PUT_LINE('a+b:'||(a+b));
DBMS_OUTPUT.PUT_LINE('a-b:'||(a-b));
DBMS_OUTPUT.PUT_LINE('a*b:'||(a*b));
DBMS_OUTPUT.PUT_LINE('b/a:'||(b/a));
DBMS_OUTPUT.PUT_LINE('2^10:'||2**10);
END;
/
/*
注意 :
赋值的时候不能使用= 需要使用 :=
计算是不能再函数内做从
c := a+b;
DBMS_OUTPUT.PUT_LINE('a+b:'||c);
c 必须是一个明确的值
为什么?
应为pl/sql
语言是一个脚本语言 通过解释器解释
并没有通过编译
*/
DECLARE
a number(10,0);
b number(10,0);
c number(10,0);
BEGIN
a := 10;
b := 20;
DBMS_OUTPUT.PUT_LINE('a:'||a);
DBMS_OUTPUT.PUT_LINE('b:'||b);
DBMS_OUTPUT.PUT_LINE('a+b:'||a+b);
END;
/
/*
1
2
4
8
16
32
64
128
256
512
1024
*/
/*
15点见
判断
循环
*/
/*
复习
判断语句
if 条件
执行的内容
else
执行的内容
*/
IF 判断条件 THEN
执行内容;
ELSE
执行内容;
END IF
/*
成绩判断
>60 及格
否则 不及格
*/
DECLARE
a number(10,0);
BEGIN
a := 61;
IF a>60 THEN
DBMS_OUTPUT.PUT_LINE('学生成绩及格:'|| a);
ELSE
DBMS_OUTPUT.PUT_LINE('学生成绩不及格:'|| a);
END IF;
END;
/
/*
张三的J2SE成绩情况
*/
DECLARE
a number(10,0);
BEGIN
select score
into a
from sc
where
sno= (select sno from student where sname='张三')
and
cno=(select cno from course where cname='J2SE');
IF a>60 THEN
DBMS_OUTPUT.PUT_LINE('学生成绩及格:'|| a);
ELSE
DBMS_OUTPUT.PUT_LINE('学生成绩不及格:'|| a);
END IF;
END;
/
/*
if 的用法
常见的
单if 结构
if
if else结构
嵌套
if
if
else
else
if else
if
if
if
if
else
*/
-- 单if
IF 条件 THEN
;
END IF;
--if else
IF 条件 THEN
;
ELSE
;
END IF;
--嵌套
IF 条件 THEN
IF 条件 THEN
;
ELSE
;
END IF;
ELSE
IF 条件 THEN
;
ELSE
;
END IF;
END IF;
--多if
IF 条件 THEN
;
IF 条件 THEN
;
IF 条件 THEN
;
IF 条件 THEN
;
IF 条件 THEN
;
ELSE
END IF;
--分支语句
CASE
WHEN 判断 THEN
;
WHEN 判断 THEN
;
WHEN 判断 THEN
;
ELSE
;
END CASE;
DECLARE
a number(10,0);
BEGIN
a:=78;
CASE
WHEN a>=90 THEN
DBMS_OUTPUT.PUT_LINE('成绩优秀:'||a);
WHEN a>=80 THEN
DBMS_OUTPUT.PUT_LINE('成绩还行:'||a);
WHEN a>=70 THEN
DBMS_OUTPUT.PUT_LINE('成绩良好:'||a);
WHEN a>=60 THEN
DBMS_OUTPUT.PUT_LINE('成绩及格:'||a);
ELSE
DBMS_OUTPUT.PUT_LINE('成绩不及格:'||a);
END CASE;
END;
/
DECLARE
a number(10,0);
BEGIN
select score
into a
from sc
where
sno= (select sno from student where sname='张三')
and
cno=(select cno from course where cname='J2SE');
CASE
WHEN a>=90 THEN
DBMS_OUTPUT.PUT_LINE('成绩优秀:'||a);
WHEN a>=80 THEN
DBMS_OUTPUT.PUT_LINE('成绩还行:'||a);
WHEN a>=70 THEN
DBMS_OUTPUT.PUT_LINE('成绩良好:'||a);
WHEN a>=60 THEN
DBMS_OUTPUT.PUT_LINE('成绩及格:'||a);
ELSE
DBMS_OUTPUT.PUT_LINE('成绩不及格:'||a);
END CASE;
END;
/
/*
循环语句
loop
while loop
for loop
cursor for loop
*/
DECLARE
a number(10,0);
BEGIN
a:=0;
<<loop_name>>
loop
if a<5 THEN
a:=a+1;
DBMS_OUTPUT.PUT_LINE('a的值是' ||a);
else
exit loop_name;
end if;
END loop;
END;
/
<<loop_name2>>
loop
;
exit loop_name2
end loop
-- 死循环
exit --强制结束循环的
-- while loop循环
SET SERVEROUTPUT ON
DECLARE
a number(10,0);
BEGIN
a:=0;
<<while_loop_name>>
while a<10 loop
DBMS_OUTPUT.PUT_LINE('当前a='||a);
a:=a+1;
end loop while_loop_name;
END;
/
SET SERVEROUTPUT ON
DECLARE
a number(10,0);
b number(10,0);
BEGIN
a:=0;
<<while_loop_name1>>
while a<5 loop
DBMS_OUTPUT.PUT_LINE('当前a='||a);
a:=a+1;
b:=0;
<<while_loop_name2>>
while b<5 loop
DBMS_OUTPUT.PUT_LINE('当前b='||b);
b:=b+1;
-- exit while_loop_name1;
end loop while_loop_name1;
end loop while_loop_name1;
END;
/
DECLARE
a number(10,0);
BEGIN
a:=0;
<<for_loop_name>>
for i IN 1..20 loop
DBMS_OUTPUT.PUT_LINE('当前i=:'||i);
end loop for_loop_name;
DBMS_OUTPUT.PUT_LINE('执行完毕');
DBMS_OUTPUT.PUT_LINE('当前a=:'||a);
END;
/
-- 大学期间 敲代码 40w行