• 1.2变量


    9. 常量
    declare
       c_salary_rate constant number(7,2) :=0.25;-- 定义加薪常量值
       v_salary               number(7,2); --定义保存薪资结果哟的变量
    begin
       select sal *(1+c_salary_rate)--查询数据库,返回加薪后的结果
       into v_salary
       from emp 
      where empno =&empno;
      --输出屏幕信息
      dbms_output.put_line('加薪后的薪资:'||v_salary);
    end;
    10 char类型
    declare
       v_name char(2 byte);
       v_name2 char(2 char);
       v_name3 char;
       v_name4 char(20);
    begin
       v_name:='ab';             --正确,2个字节的字符串
       -- v_name:='中国';        -- 错误,超出声明的2个字节
       v_name2:='中国';          -- 正确2个字符
       v_name3:=1;               -- 正确,单个字节
       v_name4:='the is string'; -- 为char赋字符串值
       dbms_output.put_line(length(c_name4));-- 输出字符串长度
    end;
    10 varhcar2类型
    declare
       v_ename varchar2(25);
       v_name1 varchar2(25 byte);
       v_name2 carchar2(25 char);
       -- v_name3 carchar2;       -- 错误 必须要为varchar2指定长度值
    begin
       v_name:='中华人民共和国';  -- 为变量赋值,并输出变量的长度
       dbms_output.put_line('v_name变量的长度为:'||length(v_name)||'字节');
       v_name1 :='中华人民共和国';
       dbms_output.put_line('v_name1 变量的长度为:'||length(v_name1)||'字节');
       v_name2:='中华人民共和国';
       dbms_output.put_line('v_name2变量的长度为:'||length(v_name2)||'字节');
    end;
    11 rowid类型
    declare
       v_empname     rowid;          --定义rowid类型的变量
       v_othersname  varchar(18);    --定义用来保存rowid的字符串变量
    begin
       select rowid
         into v_empname
         from emp
        where empno=&empno;
    -- 输出rowid值
      dbms_output.put_line(v_empname);
      v_othersname :=rowidtochar(v_empname);-- 装换rowid为字符串值
      dbms-oytput.put_line(v_othersname);
    end;
    12. number 类型
    declare
       v_num1 number:=3.1415926;            --结果:3.1415926
       v_num2 number(3):=3.1415926;         --四舍五入等于3
       -- v_num2_1 number(3):=3145.1415926; -- 错误,精度太高:ORA-06502:数字或值错误:数值精度太高
       v_num3 number(4,3):=3.1415926;       --结果:3.142
       -- v_num3_1 number(4,3):=314.123;    --错误,精度太高:ORA-06502:数字.927或值错误:数值精度太高
       v_num4 number(8,3):=31415.9267;      --四舍五入2位小数,结果为:31415.927
       v_num5 number(4,-3):=3145611.789;    --由于为负3,要从小数点左侧开始舍入,清除向左的位数,结果为31000
       v_num5_1 number(4,-3):=314.567895;   --舍入后的结果是0
       v_num6 number(4,-1):=31451;          --舍入后结果31450
       -- v_num6_1 number(4,-1):=3145123;   --错误,精度太高:ORA-06502:数字或值错误:数值精度太高
    begin
       dbms_output.put_line('v_num1:='||v_num1);
       dbms_output.put_line('v_num2:='||v_num2);
       dbms_output.put_line('v_num3:='||v_num3);
       dbms_output.put_line('v_num4:='||v_num4);
       dbms_output.put_line('v_num5_1:='||v_num5_1);
       dbms_output.put_line('v_num6:='||v_num6);
    end;
    13.  pls_integer 和 binary_integer
    --pls_integer使用示例
    declare
       v_num1 pls_integer:=2147483647;
    begin
       -- 当为v_num1+1时,产生了溢出,会触发异常
       v_num1:=v_num1+1-1;
       exception
          when others then
       -- 输出:ora-01426:数字溢出
          dbms_output.put_line(sqlerrm);
    end;
    -- binary_integer 使用示例
    declare
       v_num1 binary_integer :=2147483647;
    begin
        /*当为v_num1时,产生了溢出,
          此时v_num1会被当做number进行处理,不会触发异常
          */
          v_num1:=v_num1+1-1;
    end;
    14.date 类型
    
    declare
       -- 输出当前周的第1天,即星期日的日期
       v_weekday date :=trunc(syadate)-to_char(syadate,'D')+1;
       -- 输出现在的时间
       v_now date:=syadate;
    begin
       dbms_output.put_line(to_char(v_weekday,'YYYY-MM-DD'));
       dbms_output.put_line(to_char(v_now,'YYYY-MM-DD hh24:mi:ss'));
    end;
    15. timestamp类型
    declare
       v_now timestamp(8):=syadate;-- 定义变量
       v_nowdate date:=sysdate;
    begin
       -- 输出变量结果值
       dbms_output.put_line(v_now);
       dbms_output.put_line(v_nowdate);
    end;
    
    timestamp:13-8月 -11 07.25.46.0000000 上午
    date:13-8月-11
    16. timestamp with time zone类型
    declare
       v_timetamp timestamp; --定义日期类型的变量
       v_timestampwithzone timestamp with time zone;
    begin
       v_timestamp :=sysdate;-- 为日期类型的变量赋初始值
       v_timestampwithzone :=sysdate;
       dbms_output.put_line(v_timestamp);-- 输出信息
       dbms_output.put_line(v_timestampwithzone);
    end;
    输出:
    13-8月 -11 01.24.24.000000 下午
    13-8月 -11 01.24.24.000000 下午 +0800
     17. interval year to month 类型
    declare
       v_start timestamp; --定义起始与结束时间戳类型
       v_end timestamp;
       v_interval interval year to month;
       v_year number;
       v_month number;
    begin
       v_start :=to_timestamp('2010-05012','yyyy-mm-dd');--赋指定的时间戳值
       v_end :=current_timestamp;--赋当前的时间戳值
       v_interval :=(v_end-v_start) year to month;-- year to month 是 interval 表达式语法
       v_year :=extract(year from v_interval);--提取年份和月份值
       v_month :=extract(month from v_interval);
       dbms_output.put_line('当前的interval值为:'||v_interval);--输出当前的interval类型值
       --输出年份与月份值
       dbms_output.put_line('interval年份为:'
                           ||v_year
                           ||chr(13)
                           ||chr(10)
                           ||'interval月份为:'
                           ||v_month
                           );
      v_interval :=interval '01-03'year to month; --直接为interval赋值
      --输出interval 的值
      dbms_output.put_line('当前的interval值为:'||v_interval);
      v_interval :=interval '01' year;--直接为interval 赋年份值
      dbms_output.put_line('当前的interval值为:'||v_interval);
      -- 提取年份和月份值
      v_year :=extract(year from v_interval);
      v_month:=extract(month from v_interval);
      --输出值
      dbms_output.put_line('interval 年份为'
                          ||v_year
                          ||chr(13)
                          ||chr(10)
                          ||'interval月份为:'
                          ||v_month
                          );
      v_interval:=interval '03' month; -- 直接为interval 赋月份值
      --输出月份值
      dbms_output.put_line('当前的interval 值为:'||v_interval);
    end;
    输出值如下:
    当前的 interval 值为:+01-03、
    interval 年份为:1
    interval 月份为:3
    当前的interval 值为:+01-03
    当前的interval值为:+01-00
    interval 年份为:1
    interval 月份为:0
    当前的interval 值为:+00-03
    18. 布尔类型
    declare
       v_condition boolean;--定义布尔类型变量
    begin
    v_condition :=true;--为变量赋布尔值true
    -- v_condition :='False'; --错误,布尔值不能带引号
       if v_condition then  -- 如果布尔值条件为true ,则输出
       dbms_output.put_line('值为ture');
       end if;
    end;
  • 相关阅读:
    分化Oracle数据库日记文件(1)
    ORACLE稀有错误代码的阐发与经管(二)
    Oracle暗码文件的运用和维护
    在ORACLE中移动数据库文件
    ORACLE8的分区管理
    Oracle中如何间接运转OS号令(上)
    Oracle数据库平安计谋阐明 (三)
    Oracle7.X 回滚表空间数据文件误删除措置举动措施
    Oracle功用究极优化 中
    网络知识爆炸的年代~如何更好地学习吸收有用的知识
  • 原文地址:https://www.cnblogs.com/etllearn/p/15035386.html
Copyright © 2020-2023  润新知