oracle (二) pl/sql基础

---------------------------PL/SQL基础 ---------------

-----------------/*pl/sql基本结构*/
DECLARE 

   n NUMBER;
BEGIN 
    n:= CEIL(123/12);
   dbms_output.put_line(n);
END; 
 

DECLARE 
  --设置默认值 
  m VARCHAR2(10) DEFAULT 'te'; 
  --常量的定义 
  n CONSTANT NUMBER DEFAULT 5;
BEGIN 
    m := m || '32'||4;
   dbms_output.put_line(m||',n等于'||n);
END; 
------记录类型变量
--%type
DECLARE 
  l  test6.id%TYPE;
  m  test6.name%TYPE;
BEGIN 
   SELECT * INTO l,m FROM test6;
   dbms_output.put_line('l='||l||',m='||m);
END;  

--记录类型
--record 类型
DECLARE 
   TYPE test_data IS RECORD 
   (
      m test6.id%TYPE,
      n  VARCHAR2(100)
   );
   
   test_record test_data;--记录类型变量
BEGIN 
    SELECT ID,NAME INTO test_record FROM test6;
    dbms_output.put_line(test_record.m||','||test_record.n);
END;
  
--%rowtype
--使用rowtype类型变量
DECLARE 
  t test6%ROWTYPE;
BEGIN
  SELECT * INTO t FROM test6;
  
  dbms_output.put_line(t.id||' , '||t.name);   

END;  
--索引表类型

--待深究
DECLARE 
  TYPE t IS TABLE OF test6%ROWTYPE
   INDEX BY BINARY_INTEGER;
   
   s t;
BEGIN
  
  SELECT * INTO s(1) FROM test6;--获取第一行数据
  
  dbms_output.put_line(s(1).id);
   
END;   
   

--varray 变长数组

DECLARE 
--定义变长数组的长度
   TYPE ary IS VARRAY(100) OF VARCHAR2(20);
   
    vary   ary:=ary('12','d','e3');
BEGIN 
  --为数组中元素赋值
      vary(2):='fick';
      --数组下标从1 开始
    dbms_output.put_line(vary(3));
END;    
    

---计算   开方 ((12+18)/10+17)**2 

DECLARE 
       rst NUMBER;
BEGIN 
    -- ** 乘方
  rst := SQRT(((12+18)/10+17)**2);
  dbms_output.put_line(rst);
END;

----------------------------pl/sql 中的结构控制语句-----------------------
   
  --if con then  sta  else   if elsif 
  
  DECLARE 
      
    a NUMBER;
    b NUMBER;
     
  BEGIN
      ---一个指定范围内的随机数
     a := dbms_random.value(100,300);
     
     b := dbms_random.value(1,300);
    --if 条件 then  逻辑 
    -- else   逻辑  end if;
    IF a>b AND a<200 then
       dbms_output.put_line('a大于b,a小于200,并且a='||a||',b='||b);
       --不支持 else if 
     ELSIF a>b AND a>=200 then
         dbms_output.put_line('a大于b且a大于等于200,并且a='||a||',b='||b);  
         ELSE 
           dbms_output.put_line('a='||CEIL(a)||',b='||FLOOR(b));
     END IF ;   
     dbms_output.put_line('条件执行完成'); 
  END;  

 ---case 条件控制语句 
 
 DECLARE 
    a VARCHAR2(10) :='10';
    
 BEGIN
   --case 语句
     CASE  a
       WHEN '5' THEN 
         dbms_output.put_line('a=5');
      WHEN '10' THEN
         dbms_output.put_line('a=10');
     ELSE
         dbms_output.put_line('fuck');
       --结束 case语句   
      END CASE;
  
 END;    

  -- 带有条件的case语句
   DECLARE 
     b NUMBER(10,0):=102;
     
     BEGIN
     CASE 
      WHEN b>10 AND b<100 THEN 
          dbms_output.put_line('b大于10且小于100'); 
      WHEN  b<=10 THEN
         dbms_output.put_line('b小于等于10');   
         ELSE
            dbms_output.put_line('b大于等于100');
        END CASE;
    END;        

------------------------------loop 循环控制语句---------------------------      

    -----------------******* for循环 *****-------------- 
    
    --计算1-10的和
    DECLARE 
       rest NUMBER(10,0) :=0;
    BEGIN 
       FOR t IN 1..10 loop
         
         rest := rest+t;
         END LOOP;
         dbms_output.put_line(rest);
         dbms_output.put_line('循环已经结束');
    END;
    
    -------基本的loop循环----
    
    
    DECLARE 
       r NUMBER(10,0) :=1; 
    BEGIN 
      LOOP
         r := r+1;
         --退出条件 
      EXIT   WHEN r>6;
      END LOOP;
      dbms_output.put_line(r);
       dbms_output.put_line('退出loop');
    END;   
    
    ----while 循环----
      
    DECLARE 
      
      s NUMBER(6,0):=1;
    BEGIN 
        WHILE s<10 
          LOOP
             s :=s+2;
           END LOOP;
         dbms_output.put_line(s);
             dbms_output.put_line('退出while循环');
      
      
    END;


转载于:https://my.oschina.net/u/2284956/blog/354648

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值