• Oracle数据库基本概念理解(3)


    /*
    ===========================================================
    |         PL/SQL编程
    ============================================================
    */
    --声明变量
    DECLARE
      V_NAME VARCHAR2(20); --一般变量
      V_AGE NUMBER(2);
      v_id   SUN.TUSER.USERID%TYPE:=14;--属性变量
      v_user SUN.TUSER%ROWTYPE; --行属性变量
    BEGIN
      --赋常量值
      V_NAME:='Tom';
      V_AGE :=20;
      DBMS_OUTPUT.put_line('姓名:'||V_NAME||'年龄:'||V_AGE);
      --SELECT *  FROM SUN.TUSER;
      --通过SELECT INTO给变量赋值
      SELECT USERNAME,USERID INTO V_NAME,V_AGE  FROM SUN.TUSER;
     -- WHERE USERID=v_id;
      DBMS_OUTPUT.put_line('姓名:'||V_NAME||'年龄:'||V_AGE);
      --给行属性变量赋值
      select * into v_user from sun.tuser where userid=v_id;
      dbms_output.put_line('----------------------------');
      dbms_output.put_line(v_user.username);
       dbms_output.put_line('----------------------------');
    EXCEPTION--异常处理
      WHEN NO_DATA_FOUND THEN
        DBMS_OUTPUT.put_line('用户编号不正确!');
      WHEN OTHERS THEN
          DBMS_OUTPUT.put_line('错误:'||SQLERRM); 
    END;
    
    --循环
    /*
    ===========================================================
    |         循环语句
    ============================================================
    */
    declare
      v_count number:=1; --声明变量并赋值
      v_sum number:=0;
    begin
      /*loop   --loop循环
        v_sum:=v_sum+v_count;
        v_count:=v_count+1;
        exit when v_count>10;
       end loop;
       */
      /* while v_count<=10 loop  --while 循环
         v_sum:=v_sum+v_count;
         v_count:=v_count+1;
        end loop;*/
       for i in 1..10 loop --for循环
          v_sum:=v_sum+i; 
        end loop; 
       dbms_output.put_line(v_sum);
    end;
    
    
    /*
    ===========================================================
    |         游标
    ============================================================
    */
    
    DECLARE 
     --声明游标
      CURSOR USER_CUR IS
         SELECT USERID,USERNAME 
         FROM SUN.TUSER;
      V_ID SUN.TUSER.USERID%TYPE;
      V_NAME SUN.TUSER.USERNAME%TYPE;   
    BEGIN
      --第一种使用游标方式
      /* 
     OPEN USER_CUR;--打开游标
     LOOP   --遍历游标
         FETCH USER_CUR INTO V_ID,V_NAME;
         EXIT WHEN USER_CUR%NOTFOUND;
         DBMS_OUTPUT.put_line('第'||USER_CUR%ROWCOUNT||'个学生:'||V_ID||' '||V_NAME);
      END LOOP;
      close user_cur; --关闭游标
      */
    
      --第二种使用方式  for 遍历游标  这种方式不用先打开游标
      for v_user in USER_CUR LOOP
           DBMS_OUTPUT.put_line('第'||USER_CUR%ROWCOUNT||
           '个学生:'||v_user.USERID||
           ' '||V_USER.USERNAME);
        END LOOP;  
    END;  
    
    
    /*
    ===========================================================
    |          存储过程
    ============================================================
    */ 
    --创建存储过程
      CREATE or replace PROCEDURE INSERT_USER
      ( V_USERID NUMBER,
       V_NAME VARCHAR2,
       V_PWD VARCHAR2)
       IS
       BEGIN
         INSERT INTO SUN.TUSER(USERID,USERNAME,PWD)
        VALUES(V_USERID,V_NAME,V_PWD);
     END;
    
    /*
    ===========================================================
    |         存储过程调用 
    ============================================================
    */ 
    --存储过程调用 
     begin  
     --按位置调用
     --INSERT_USER(14,'111','111') ;
     --按名称
     INSERT_USER(V_USERID=>15,V_PWD=>'222',V_NAME=>'222') ;
    end;  
        
     --符合规则的存储过程
     CREATE PROCEDURE INSERT_USER2 (
      V_USERID SUN.TUSER.USERID%TYPE, --使用属性变量
       V_NAME SUN.TUSER.USERNAME%TYPE,
       V_PWD SUN.TUSER.PWD%TYPE,
       ON_FLAG OUT NUMBER,  --输出参数
       ON_MSG OUT VARCHAR2  
       )
       IS
       BEGIN
         ON_FLAG:=1;
         ON_MSG:='添加成功!';
         INSERT INTO SUN.TUSER(USERID,USERNAME,PWD)
        VALUES(V_USERID,V_NAME,V_PWD);
       EXCEPTION  --异常处理
         WHEN OTHERS THEN 
            ON_FLAG:=SQLCODE; --异常代码
            ON_MSG:=SQLERRM; --异常信息输出变量
            rollback;
     END;
    --调用
    DECLARE
      V_FLAG NUMBER;
      V_MSG VARCHAR2(100);
    BEGIN
       INSERT_USER2(16,'555','555',V_FLAG,V_MSG );
       DBMS_OUTPUT.put_line(V_FLAG||V_MSG);
      -- select * from sun.tuser;
    END;     
       
    

  • 相关阅读:
    删除无效的SQL SERVER组中的注册的几种方法
    SQLServer中把某个表里的记录复制到另一个数据库的表中
    文件上传 带进度条(多种风格)
    Team Leader你会带团队吗?你懂合作吗?你好像都不会啊!(上)
    整理.Net代码生成器(转)
    SQL SERVER 2000数据库,转换为ACCESS数据库(已解决ACCESS自动编号问题)
    js中prototype用法
    js在火狐和IE浏览器的差异
    Varnish介绍
    C# 4.0 新特性
  • 原文地址:https://www.cnblogs.com/a1111/p/12816416.html
Copyright © 2020-2023  润新知