关闭

PL/SQL 编程语言 day29

标签: oracle数据库PLSQL 编程语言
59人阅读 评论(0) 收藏 举报
分类:
是什么   procedure language  面向过程的语言


SQL  结构化的查询语言


面向过程化的结构化查询语言


PL/SQL是ORACLE  对sql语言的扩展


SQL 数据结构  查询语句  逻辑操作  循环控制
java 的优点:跨平台 GC 垃圾回收 面向对象 实现代码的复用
PL/SQL优点:
1、使一组sql语句的功能更加具体化
2、采用面向过程的思想
3、性能高,预编译 数据库
4、异常处理机制,能够是数据库在遇到问题的时候不会中断
5、移植性高,可以移植到另一个数据库
6、减少网络交互,节省带宽
编程语言
标识符
字母,数字,_$ 不能使用关键字


userName
UserName 驼峰命名法
user_name下划线命名


声明变量 declare
--声明变量  变量名 + 数据类型
begin
u_ename varchar2(20)


end;
--emp  enanme

对变量赋值 2种
:= u_ename:='zhangsan';
接受键盘输入 &后面可以跟提示字符
通过sql语句 select 。。。into


select ename(字段名) into u_name(变量名)
from emp where empno =7369; 


输出语句  dbms_output.put_line 代表(相当于)java中(System.out.print)


字符串拼接 ||
处理业务逻辑的时
将输出先打开 set serveroutput on;




运算符 + -  *  /


数据类型 。。。
常用的数据类型
number(a,b)a:总位数 b:小数的位数
number(2) 整数
字符串类型
char varchar2() varchar  字符串
char(20)  固定的字符长度 数据库中存储中就占用固定的空间
超出的肯定不能存放 不够的补齐空格


varchar2(20) 可变的字符长度    数据库存储中节省空间
超出的 也存不下
不够的 不补,取实际长度


varchar mysql 标准类型
oracle 在varchar基础上设计的数据类型


varchar 空字符串 可以用空“”oracle varchar2 null




日期 date 默认的格式 




boolean true false null


%type %rowtype



select * from emp
--:= 赋值
declare
  --声明变量
  id number(6) :=20;--初始化值
  name varchar2(20);
  birthday date;
begin
  --逻辑处理 包括对变量的赋值
  id:=32;--赋值操作
  name:='zhang';
  dbms_output.put_line('id:'||id);
  
end; 

---select..into 赋值
declare
 id number(4);
 s_name varchar2(20);
begin
--查询emp 表中共有多少条数据赋值给变量id
        select count(*) into id from emp;
--查询emp表中empno为7369的人的名字赋值
--变量s_name
        select ename into s_name from emp 
        where empno=7369;
        
--输出
dbms_output.put_line('id:'||id);
dbms_output.put_line('ename'|| s_name);      
        
end;    


declare
 id number(10);
 begin
 --接受用户输入 &
 --后面为一句提示话,包含空格
 --用双引号包住提示语
    id:=&"please input firstnum";
    dbms_output.put_line('id'||id);
end;
                  
 
--完成求和
declare 
    num1 number(2);
    num2 number(2);
begin
    num1:=&num1;
    num2:=&num2;
    dbms_output.put_line('两个数的和为:'||(num1+num2));
 
end;
 select
declare
--%type 数据类型 表的结构desc   某一个字段的未知数据类型
--当用到某一个字段数据类型不知道的情况
--使用%type 和谁的数据类型一致
--%rowtype 行数据类型 
    s_ename emp.ename%type;
    s_row emp%rowtype;
begin
    select ename from emp into s_ename
    from emp where empno =7369;
   -- dbms_output.put_line(s_ename);
   
   select * from into s_row from emp where empno=7369;
   dbms_output.put_line(s_row.empno||':'||'s_row.ename');
end;
 


流程控制
  分支结构 if..else case 表达式 两种书写方式


--分支结构

--if else

declare 
   grade number(4,1);
   begin
   grade :=&"please input your grade";
   if(grade >=90 and grade<=100) then 
     dbms_output.put_line('优秀');
   elsif(grade>=80 and grade<90) then
     dbms_output.put_line('良好');
   elsif(grade>=70 and grade<80) then
     dbms_output.put_line('中等');
   elsif(grade>=60 and grade<70) then
     dbms_output.put_line('及格');
   else
     dbms_output.put_line('不及格');
     end if;
   
   
end;



--java 中 switch case
--case 


       declare
         n number(1);
         
       begin
         n :=&fistnum;--接受用户输入
         dbms_output.put_line(n);--输出
         case n
         when 1 then
              dbms_output.put_line('周一');
         when 2 then  
               dbms_output.put_line('周二');   
         when 3 then
               dbms_output.put_line('周三');
         when 4 then
               dbms_output.put_line('周四');
         when 5 then
               dbms_output.put_line('周五');
         when 6 then
               dbms_output.put_line('周六');
         when 7 then
                dbms_output.put_line('周日');
         else 
                 dbms_output.put_line('不详');
         end case;
       end;
       
--第二种 case
 
 declare
         n number(1);
         
       begin
         n :=&fistnum;--接受用户输入
         dbms_output.put_line(n);--输出
         case
         when n=1 then
              dbms_output.put_line('周一');
         when n=2 then  
               dbms_output.put_line('周二');   
         when n=3 then
               dbms_output.put_line('周三');
         when n=4 then
               dbms_output.put_line('周四');
         when n=5 then
               dbms_output.put_line('周五');
         when n=6 then
               dbms_output.put_line('周六');
         when n=7 then
                dbms_output.put_line('周日');
         else 
                 dbms_output.put_line('不详');
         end case;
       end;
 
declare
      grade number(4,2);
      n number(2);
begin
      grade:=&"Input your grade please!";
      --把成绩转换 除以10
      dbms_output.put_line(grade);
      --不让他四舍五入 floor 去尾
      --trunc 截取
      --ceil 进一
      if(grade>100) then
                    dbms_output.put_line('输入有误');
      else
      n:=trunc(grade/10);
      dbms_output.put_line(n);
      case
      when n=10 then
           dbms_output.put_line('优秀');
      when n=9 then
           dbms_output.put_line('优秀');
      when n=8 then
           dbms_output.put_line('良好');
      when n=7 then
           dbms_output.put_line('中等');
      when n=6 then
           dbms_output.put_line('及格');
      else
           dbms_output.put_line('不及格');

      end case;
      end if;
end;
 









  循环结构 do...while while for
--循环结构
      --do while  打印1-100
      --oracle 中loop循环
      --结束循环有两种方式  break continue return
      --if then exit;
      --exit when
      declare
           num number(3):=1;--number类型初始值为1
           
      
      begin
           loop
               dbms_output.put_line(num);
               if num=100 then
               exit;--结束循环  相当于break
               end if;
               --num++
               num:=num+1;
               end loop;
      
      end;
      
      --exit when
      declare
           num number(3):=1;--number类型初始值为1
           
      
      begin
           loop
               dbms_output.put_line(num);
               exit when num=100;
               --num++
               num:=num+1;
               end loop;
      
      end;
      
      --计算1--100之间所有数的和
      declare
               num number(3):=1;
               result number(5):=0;
      begin
               loop
                  
                   exit when num=101;
                   result:=result+num;
                   num:=num+1;
                   
                   end loop;
                 dbms_output.put_line(result);
      
      end;
      
      declare
               num number(3):=1;
               result number(5):=0;
      begin
               loop
                  if num=101 then
                   dbms_output.put_line(result);
                  exit;
                  end if;
                   result:=result+num;
                   num:=num+1;
                  
                   end loop;
      
      end;
       --
        
      declare
               num number(3):=1;
               result number(5):=0;
      begin
               loop
                      
      
      end;
--while  循环

declare 

  n number(4):=0;
begin
  while(n<100) loop
    n:=n+1;
    dbms_output.put_line(n);
    end loop;


end;
    

declare 

  n number(4):=0;
  result number(4):=0;
begin
  while(n<100) loop
    n:=n+1;
    result:=result+n;
    
    end loop;
dbms_output.put_line(result);

end;
 
 --求1-100内3的倍数的和
 declare
  result number(5):=0;
  num number(3):=1;
 
 begin
  while(num<100) loop
        if(mod(num,3)=0) then
         result:=result+num;
        end if;
        num:=num+1;
        end loop;
 dbms_output.put_line(result);
 end;
 




0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:3818次
    • 积分:36
    • 等级:
    • 排名:千里之外
    • 原创:44篇
    • 转载:1篇
    • 译文:0篇
    • 评论:3条