定义变量的数据类型

变量的数据类型
  数据类型子类型
纯量类型 数值 BINARY_INTEGER NATURAL,POSITIVE
纯量类型 数值 NUMBER DEC,DECIMAL,DOUBLE,PRECISIONPLOAT,INTEGER,INT,NUMERIC,REAL,SMALLINT
纯量类型 字符 CHAR CHARACTER,STRING
纯量类型 字符 VARCHAR2 VARCHAR
纯量类型 字符 LONG  
纯量类型 字符 LONG RWA  
纯量类型 字符 RAW  
纯量类型 字符 RAWID  
纯量类型 逻辑 BOOLEAN  
纯量类型 日期 DATE  
组合类型 记录 RECORD  
组合类型 TABLE  
       
数据类型说明
类型标识符说明
NUMBER 数值型
INT 整数型
BINARY_INTEGER 整数型带符号
char 定长字符型,最大32767个字符
varchar2 变长字符型,最大32767个字符
LONG 变长字符型,最长2GB
DATE 日期型,用于存储日期和时间
BOOLEAN 布尔型,用于存储逻辑true和false
LOB 大对象类型,用来存储非结构化数据,长度达4G

LOB数据类型可以存储视频,音频或图片支持随机访问,存储的数据可以位于数据库内或数据库外,具体由四种类型:BFILE,BLOB,CLOB,NCLOB。但是操作大对象需要oracle提供的DBMS_LOB包。

定义变量

变量定义,变量的作用是用来存储数据,可以在过程语句中使用。变量在声明部分可以进行初始化,及赋予初值。变量在定义的同时也可以将其说明成常量并赋予固定值。变量的命名规则:以字母开头,后跟其他的字符序列,字符序列中可以包含字母,数值,下划线等符号,最大长度为30个字符,不区分大小写。不能使用Oracle的保留字作为变量名。变量名不要和在程序中引用的字段名相重,如果相重,变量名会被当做列名来使用。

变量的作用范围是在定义此变量的程序范围内,如果程序中包含子块,则变量在子块中也有效。但在子块中定义的变量,仅在定义变量的子块中有效,在主程序中无效。

  • 根据数据库提供的类型简单变量的定义方法:

--变量名 [CONSTANT]  类型标识符 [NOT NULL]=值[DEFAULT 值];

关键字CONSTANT用来说明定义的变量是常量,如果是常量,必须有赋值部分进行赋值。

关键字NOTNULL用来说明变量不能为空

declare
idcard constand number not null:=511602;
name   varchar2(20) default '张三';
birthday date :=sysdate-7;
sexs   boolean default true;
begin
dbms_output.putline('姓名:'||name);
dbms_output.putline('生份卡:'||idcard);
dbms_output.putline('生日:'||birthday);
if(sexs)
then
dbms_output.putline('性别:男')
else
dbums_output.putline('性别:女')
end if;

end;
  • 根据表的字段定义变量

    变量的声明还可以根据数据库表的字段进行定义或根据已经定义的变量进行定义。方法是在表的字段名或已经定义的变量名后加%type,将其当作数据类型。定义字段变量的方法如下:

    变量名  表名.字段名%type;
  • 记录变量的定义

    可以根据表或视图的一个记录中的所有字段定义变量,称为记录变量。记录变量包含若干歌字段,在结构上同表的一个记录相同,定义方法是表名后跟%rowtype。记录变量的字段名就是表的字段名,数据类型也一致。定义方法是:

    记录变量名  表名%rowtype;
    --获得记录变量的字段方法:记录变量名.字段名
    --eg1
    declare
    v_record_emp emp%rowtype;

    begin
    select * into v_record_emp from emp where emp.empno='001';
       --- 注意不能写成: select emp.empno,emp.empname,emp.empsal into v_record_emp from emp where emp.empno='001';
       ---会报值过多,只能是*
    dbms_output.putline('员工编号:'||record_emp.empno);
    dbms_output.putline('员工名称:'||record_emp.empname);
    dbms_output.putline('员工薪资:'||record_emp.empsal);
    end;
  • table类型的变量 ,相当于集合变量

    type 类型名 is  table of 数据类型 [not null] index by binary_integer;
    declare 
    type emplist is table of varchar2(20) [not null] index by binary_integer;--自定义数据类型
    v_emp emplist;---引用变量
    begin
    select empno into v_emp(-1) from emp where empno='001';
    select empno into v_emp(0) from emp where empno='002';
    select empno into v_emp(1) from emp where empno='003';
    dbms_output.putline('编号为001的同学:'||v_empno(-1));
    dbms_output.putline('编号为002的同学:'||v_empno(0));
    dbms_output.putline('编号为003的同学:'||v_empno(1));
    end;
  • 定义结合变量(相当于全局变量)

    --步骤1
    VARIABLE g_name varchar2(100);
    --步骤2
    set serveroutput on
    begin
    :g_name:=:g_name||'hello';
    --在程序中使用结合变量
    dbms_output.putline(:g_name);
    --
    end;
    ---执行一次 结果hello
    ---执行二次 结果hellohello
    ---....仅当前窗口有效。

     

  •  
posted @   翻滚的小井蛙  阅读(76)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
点击右上角即可分享
微信分享提示