Welcome 微信登录

首页 / 数据库 / MySQL / PL/SQL数据类型

1、变量和常量
变量语法: variable_name data_type [[NOT NULL] [:=VALUE]]
    说明:NOT NULL对变量定义非空约束,必须为变量赋非空的初始值,并且不允许在任何时候将其值修改为NULL。
--变量样例:
SQL>SERVEROUT ON
SQL>DECLARE
  v_num NUMBER(4);
 BEGIN
  v_num:=20;
  DBMS_OUTPUT.PUT_LINE("变量名v_num的值为:"||v_num);
 END;
 /常量语法: constant_name CONSTANT data_type [:=VALUE]
--常量样例:
DECLARE
  c_num CONSTANT NUMBER(4):=100;
BEGIN 
  DBMS_OUTPUT.PUT_LINE("常量名c_num的值为:"||c_num);
END; 
2、复合数据类型
2.1 %TYPE类型
    引用某个变量或者数据库的列的类型作为某变量的数据类型。
SET SERVEROUT ON
DECLARE
    v_ename scott.emp.ename%TYPE;
    v_sal1 number(11);
    v_sal2 v_sal1%TYPE;
BEGIN
    SELECT ename,sal INTO v_ename,v_sal1 FROM scott.emp WHERE empno=7369;
    v_sal2:=v_sal1;
    DBMS_OUTPUT.PUT_LINE(v_ename||"的工资是"||v_sal2);
END;2.2 %ROWTYPE
    引用数据库表中的一行作为数据类型,即RECORD类型(记录类型),是PL/SQL的附加类型。表示一条记录,相当于JAVA中的对象。可以使用“.”来访问记录中的属性。12345678910111213 DECLARE
 
    v_emp scott.emp%ROWTYPE;     
 
BEGIN
 
    SELECT * INTO v_emp FROM scott.emp WHERE empno=7654;     
 
    DBMS_OUTPUT.PUT_LINE("姓名:"||v_emp.ename);
 
    DBMS_OUTPUT.PUT_LINE("部门编号:"||v_emp.deptno);
 
END; 
2.3 记录类型
语法:TYPE record_type IS RECORD(
                field1_name data_type_and_size [NOT NULL][:=default_value],
                ...
                fieldn_name data_type_and_size [NOT NULL][:=default_value]
            );
    将逻辑相关的数据作为一个单元存储起来,使用TYPE关键字来定义,是显示记录类型,使用%ROWTYPE是隐式记录类型。
--样例一:
DECLARE
 
 TYPE emp_record_type IS RECORD(
 
      ename VARCHAR2(10),
 
      deptno NUMBER(2)
 
 );   
 
    emp_record emp_record_type;     
 
BEGIN   
 
    SELECT ename,deptno INTO emp_record FROM scott.emp WHERE empno=7654;         
 
    DBMS_OUTPUT.PUT_LINE("姓名:"||emp_record.ename);   
 
    DBMS_OUTPUT.PUT_LINE("部门编号:"||emp_record.deptno);
 
END; --样例二:
DECLARE
 
  TYPE emp_record_type IS RECORD(
 
      name scott.emp.ename%TYPE,
 
      salary scott.emp.sal%TYPE,
 
      deptno scott.emp.deptno%TYPE
 
  );
 
  emp_record emp_record_type;
 
BEGIN
 
  select ename,sal,deptno into emp_record from scott.emp where empno=&no;       
 
  DBMS_OUTPUT.PUT_LINE("姓名:"||emp_record.name);   
 
  DBMS_OUTPUT.PUT_LINE("部门编号:"||emp_record.deptno);
 
END;或:
1234567891011121314151617181920212223 DECLARE
 
  TYPE emp_record_type IS RECORD(
 
      name scott.emp.ename%TYPE,
 
      salary scott.emp.sal%TYPE,
 
      deptno scott.emp.deptno%TYPE
 
  );
 
  emp_record emp_record_type;
 
BEGIN
 
        select ename,sal,deptno into emp_record.name,emp_record.salary,emp_record.deptno from scott.emp where empno=&no;
 
        DBMS_OUTPUT.PUT_LINE("姓名:"||emp_record.name);   
 
        DBMS_OUTPUT.PUT_LINE("部门编号:"||emp_record.deptno);
 
END; --样例三:
--检索数据
DECLARE
        dept_record scott.dept%ROWTYPE;
BEGIN
        dept_record.deptno:=1;
        dept_record.dname:="administrator";
        dept_record.loc:="NC";
        insert into scott.dept values dept_record;
END;
--插入数据
DECLARE
        dept_record scott.dept%ROWTYPE;
BEGIN
        dept_record.deptno:=2;
        dept_record.dname:="administrator";
        insert into scott.dept(deptno,dname) values(dept_record.deptno,dept_record.dname);
END; 
--更新数据
DECLARE
        dept_record scott.dept%ROWTYPE;
BEGIN
        dept_record.deptno:=1;
        dept_record.dname:="HZY";
        update scott.dept set row=dept_record where deptno=dept_record.deptno;
END;
--删除数据
DECLARE
        dept_record scott.dept%ROWTYPE;
BEGIN
        dept_record.deptno:=1;
        delete from scott.dept where deptno=dept_record.deptno;
END;PL/SQL Developer实用技巧分享 http://www.linuxidc.com/Linux/2014-09/107391.htmOracle PL/SQL复合数据类型  http://www.linuxidc.com/Linux/2014-11/109272.htmOracle | PL/SQL Check约束用法详解  http://www.linuxidc.com/Linux/2014-11/109303.htmPL/SQL 存储函数和存储过程  http://www.linuxidc.com/Linux/2014-11/109750.htm更多Oracle相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12本文永久更新链接地址