zoukankan      html  css  js  c++  java
  • Oracle变量的定义、赋值及使用

    首先,当在cmd里办入scott密码提示错误时,可以这样改一下,scott的解锁命令是:

     以system用户登录:
    cmd
    sqlplus system/tigertiger
    alter user scott identified by "tiger" account unlock;

    --学习块的结构
    --学习定义变量(了解数据类型)及赋值
    --了解:各种PL/SQL块的类型

    --块的结构
    --案例:根据工号,输出员工姓名
     SELECT * FROM emp;

    --块!

    DECLARE
      v_empno NUMBER(4);
      v_ename VARCHAR2(10);
    BEGIN
       v_empno := &请输入工号;
       --必须要将查询结果放到变量
       SELECT ename INTO v_ename FROM emp WHERE empno=v_empno;
       dbms_output.put_line(v_ename);
    END;
    

     

    --异常

    DECLARE
      v_empno NUMBER(4);
      v_ename VARCHAR2(10);
    BEGIN
       v_empno := &请输入工号;
       --必须要将查询结果放到变量
       SELECT ename INTO v_ename FROM emp WHERE empno=v_empno;
       dbms_output.put_line(v_ename);
      
       EXCEPTION
          WHEN OTHERS THEN
            dbms_output.put_line('执行出错了,老板!');
    END;
    

      

    --小结
    DECLARE
       --变量区(不能在begin..end中定义)
    BEGIN
        --业务代码区
        excetipn
        --异常捕获区
    END;  


    --定义变量(了解数据类型)
    --2种:保存一个值=简单变量;保存多个值=复合变量

    --简单变量类型:char,varchar2,number,date(同时也列类型),boolean,表.字段%type
    --复合变量:表%rowtype,record

    DECLARE
      v_empno NUMBER(4);
      v_ename VARCHAR2(10);
      v_job emp.job%TYPE; --如果字段类型改变,脚本不需要改变
    BEGIN
       v_empno := 7566;
       SELECT ename,job INTO v_ename,v_job FROM emp WHERE empno=v_empno;
       dbms_output.put_line(v_ename);
       IF(v_job='MANAGER')THEN
          dbms_output.put_line('经理,吃过饭没。');
       END IF;
    END;
    

      


    --需要同上,将多个变量放到一个记录对象中

    DECLARE
      v_empno NUMBER(4);
      my_row emp%ROWTYPE;
    BEGIN
       v_empno := 7566;
       SELECT * INTO my_row FROM emp WHERE empno=v_empno;
       dbms_output.put_line(my_row.ename||','||my_row.sal);
    END;
    

      

    --有时不需要一整列,只需要其中几个列。此时用record

    DECLARE
        --自定义复合类型 my_emp
       TYPE my_emp_type IS RECORD(
          yg_name emp.ename%TYPE,
          yg_sal emp.sal%TYPE
       );
       my_row my_emp_type; --变量名  数据类型
    BEGIN
       SELECT ename,sal INTO my_row FROM emp WHERE empno=7788;
       dbms_output.put_line(my_row.yg_name||','||my_row.yg_sal);
    END;
    

      

    --扩展:Oracle没有boolean类型?
    --思考:性别 true=男,false=女。缺点?性别=保密。所以Oracle建立用char(1)替代,1=男2=女3=保密4=人妖

    --Oracle的各种集合类型,对应 java的数组。
    --引用变量:在讲解存储过程以后再讲解。

    --绑定变量(命令窗口中执行,绑定变量用了 :)
    SQL> var name varchar2(10)
    SQL> execute :name :='hello';


    PL/SQL procedure successfully completed

    SQL> print name;

    name
    ---------
    hello

    如图: 

    declare
       l_dept    integer := 20;
       currtime  date := sysdate;
       l_nam     varchar2(20) := to_char(add_months(trunc(sysdate),-12),'yyyymmdd');  -- to_char(sysdate,'MM')-13;
    
       type num_list is varray(5) of number;
       arr_id num_list := num_list(100,101,123,33,234);
    
     begin
          l_dept := 30;
          dbms_output.put_line(l_dept);
          dbms_output.put_line(currtime);
          dbms_output.put_line(l_nam);
          dbms_output.put_line(arr_id(1));      
     end;
    

    变量的定义:

    l_dept定义的是整型,

    currtime为日期型,

    l_nam为字符型并往前退12个月的日期赋值,而-- to_char(sysdate,'MM')-13;会出现负数。

    type num_list is varray(4) of number;则是定义数据类型为整型的数组,并且数组长度为4,

    arr_id num_list := num_list(100,101,123,33,234);则使用num_list定义的数组类型定义arr_id变量,并为arr_id赋值。

    dbms_output.put_line函数则会在DMS Output选项卡中输出,注意:dbms_output.put_line必须放到begin和end之内

    truncate table t4;  --清空表里的数据
    declare
    op nvarchar2(100);
    i int ;
    j int :=100;
    begin
      while j<200 loop
      select nvl(max(id),0) +1 into i from t4;
      insert into t4 values(i,j,'test'||i);
      dbms_output.put_line(i);
      j:=j+1;
      end loop;
    end;
    -- select * from t4;
    

      

      

  • 相关阅读:
    重启Linux机器异常的解决方法
    SSH连接Linux服务器异常
    H5本地存储
    Spring MVC概述
    Linux下oracle开机自启动
    [ASP.NET MVC]@Partial 和@RenderPartial的区别
    [ASP.NET MVC]EntityFramework离线部署
    [ASP.NET MVC]@RenderSection,@RenderBody(),@RenderPage
    [ASP.NET MVC]@Html.AntiForgeryToken() 防止CSRF攻击
    [ASP.NET MVC]@Scripts.Render、@Styles.Render的使用
  • 原文地址:https://www.cnblogs.com/lgx5/p/11290773.html
Copyright © 2011-2022 走看看