pl/sql(二)

--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行
posted @ 2020-06-17 17:07  忘山川  阅读(126)  评论(0编辑  收藏  举报