当前位置:数据库 > SQLServer >>

PL/SQL数据类型与定义、赋值

PL/SQL数据类型与定义、赋值
 
Java代码  www.zzzyk.com  
1.简单变量类型与定义  
  <strong>sql 与pl/sql 通用变量类型:  
</strong>  varchar2(max_length) 最大4000字节  
  char(max_length)       最大2000字节  
  number(x,y)              最长x位,y位小数  
  date                          7个字节,默认格式DD-Mon-yy  
  如:select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;       
  注意:dual 是只有一行一列的伪表,sys下,方便查询,时间分钟mi和mm 都可行  
  <strong>pl/sql 专用变量类型:  
</strong>  
  boolean        true/false/null  
  binary_integer 整数  
  变量的定义赋值用:“:=”   
  比如:  
  declare  
    v_gender char(1);  
    v_count binary_integer :=0;  
    v_totle_sal number(7,2) :=0;  
    v_date date :=sysdate+7;    -- 默认加的天数  
    c_pi constant number(3,2) :=3.14; -- 常量  
    c_vaild boolean not null :true;   -- 变量不为null  
   begin   
    dbms_output.put_line('Hello!');  
   end;  
 
Java代码  www.zzzyk.com  
2.复合变量(组合变量)  
  A 表类型(一列数据):类似于数组,有下表和数据两部分组成,没有长度限制,可以动态增长。  
  declare  
    TYPE ename_table_type           --自定义类型  
        IS TABLE OF varchar2(20)    --数据类型是varchar2  
        INDEX BY binary_integer;  
    v_ename_table ename_table_type;  
 begin  
    select ename  
    into v_ename_table(1)           --放入第一个下标  
    from emp where empno = 7788;  
    dbms_output.put_line(v_ename_table(1));  
end;  
/  
  
  
B 记录类型(相当于面向对象封装的对象类型):包括多个组件,组件的数据类型可以不同,  
每个组件叫做field(域)。   
declare   
TYPE emp_record_type IS RECORD  
    (name varchar2(20), job varchar2(10));   
    emp_record emp_record_type;   
begin   
    select ename , job into emp_record.name , emp_record.job   
    from emp where empno = 7788;   
    dbms_output.put_line(emp_record.name||' - '||emp_record.job);  
end;  
/  
注意:“||” 是字符串连接符号,可以将字符串连接起来。  
 
 
Java代码  
3 %type与%rowtype:   
declare   
    v_id emp.empno%type;   
    v_job emp.job%type;   
begin   
    select empno into v_id from emp   
    where ename='SCOTT';   
end;  
注意:%type表示变量类型是数据库表中字段类型。emp 表中empno 类型是什么,那么v_id 就是什么类型。  
  
如果我们想定义的结构和表emp行记录一样呢?  
declare   
/*以前的方式,老办法 
TYPE record_type IS RECORD (  
    id emp.empno%type,  
    name emp.ename%type,  
    job emp.job%type 
    --其他的字段,此处省略.. 
    ); 
    emp_record record_type; 
 
 
*/  
--新办法,更简洁  
emp_record emp%rowtype;  
begin  
    select empno,ename into emp_record.empno ,  
    emp_record.ename from emp where empno = 7788;   
    dbms_output.put_line('name is :'||emp_record.ename);   
end;  
注意:%rowtype:变量类型是emp表全部字段的类型。也就是你当前定义的类型,和emp 所有的字段类型一致,  
      相当于你定制和一个和emp 表一样的网格,里面可以存放存放和emp 各个字段对应类型的数据。  
  www.zzzyk.com  
Java代码  
4 赋值语句:  
 A 直接赋值与表达式赋值:  
declare  
    v_count number(2) :=0;  
    v_married boolean;  
    emp_record emp%rowtype;  
begin  
    v_count :=10;  
    emp_record.ename :='fuzhi';  
    v_married :=(1=2);  --表达式赋值  
end;   
注意:sql和plsql 中“=”表示比较。  
  
B 表达式赋值  
declare  
    v_married boolean :=true;  
    v_comm emp.comm%type;  
begin  
    select comm into v_comm  
    from emp where empno = 7788;  
    v_married :=(v_comm is null);  
    dbms_output.put_line(v_married); -- boolean 类型不能通过这个打印,报错  
end;  
  
C boolean 可以通过if else 进行判断  
declare  
    v_married boolean :=true;  
    v_comm emp.comm%type;  
begin  
    select comm into v_comm  
    from emp where empno = 7788;  
    v_married :=(v_comm is null);  
    if v_married = true then  
        dbms_output.put_line('true');  
    else   
        dbms_output.put_line('false');  
    end if;  
end;  
 
D 赋值使用函数  
declare  
    emp_record emp%rowtype;  
    v_count number;  
    v_now char(30);  
    v_user char(20);  
begin  
    select ename  
    into emp_record.ename  
    from emp where empno = 7788;  
    v_count :=length(emp_record.ename);  
    v_now :=to_char(sysdate,'yyyy-mm-dd');  
    v_user :=user;  
    dbms_output.put_line(v_now);  
    dbms_output.put_line(v_user);  
    dbms_output.put_line(v_count
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,