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;
原文地址:https://www.cnblogs.com/etllearn/p/15035386.html