Oracle 小记

来源:互联网 发布:家庭网络服务器 编辑:程序博客网 时间:2024/05/21 07:51


Record

DECLARE--定义与hr.employees表中的这几个列相同的记录数据类型   TYPE RECORD_TYPE_EMPLOYEES IS RECORD(        f_name   hr.employees.first_name%TYPE,        h_date   hr.employees.hire_date%TYPE,        j_id     hr.employees.job_id%TYPE);--声明一个该记录数据类型的记录变量   v_emp_record RECORD_TYPE_EMPLOYEES;BEGIN   SELECT first_name, hire_date, job_id INTO v_emp_record   FROM employees   WHERE employee_id = &emp_id;   DBMS_OUTPUT.PUT_LINE('雇员名称:'||v_emp_record.f_name             ||'  雇佣日期:'||v_emp_record.h_date             ||'  岗位:'||v_emp_record.j_id);END;
一个记录类型的变量只能保存从数据库中查询出的一行记录,若查询出了多行记录,就会出现错误。


VARRAY

对于VARRAY数据类型来说,必须经过三个步骤,分别是:定义、声明、初始化。

DECLARE--定义一个最多保存5个VARCHAR(25)数据类型成员的VARRAY数据类型   TYPE reg_varray_type IS VARRAY(5) OF VARCHAR(25);--声明一个该VARRAY数据类型的变量   v_reg_varray REG_VARRAY_TYPE;BEGIN--用构造函数语法赋予初值   v_reg_varray := reg_varray_type         ('中国', '美国', '英国', '日本', '法国');   DBMS_OUTPUT.PUT_LINE('地区名称:'||v_reg_varray(1)||'、'                                    ||v_reg_varray(2)||'、'                                    ||v_reg_varray(3)||'、'                                    ||v_reg_varray(4));   DBMS_OUTPUT.PUT_LINE('赋予初值NULL的第5个成员的值:'||v_reg_varray(5));--用构造函数语法赋予初值后就可以这样对成员赋值   v_reg_varray(5) := '法国';   DBMS_OUTPUT.PUT_LINE('第5个成员的值:'||v_reg_varray(5));END;


%TYPE
定义一个变量,其数据类型与已经定义的某个数据变量(尤其是表的某一列)的数据类型相一致,这时可以使用%TYPE。
使用%TYPE特性的优点在于:
所引用的数据库列的数据类型可以不必知道;
所引用的数据库列的数据类型可以实时改变,容易保持一致,也不用修改PL/SQL程序。

DECLARE   v_empno emp.empno%TYPE :=&no;   Type t_record is record (        v_name   emp.ename%TYPE,        v_sal    emp.sal%TYPE,        v_date   emp.hiredate%TYPE);   Rec t_record;BEGIN   SELECT ename, sal, hiredate INTO Rec FROM emp WHERE empno=v_empno;   DBMS_OUTPUT.PUT_LINE(Rec.v_name||'---'||Rec.v_sal||'--'||Rec.v_date);END;

%ROWTYPE
PL/SQL 提供%ROWTYPE操作符, 返回一个记录类型, 其数据类型和数据库表的数据结构相一致。
使用%ROWTYPE特性的优点在于:
所引用的数据库中列的个数和数据类型可以不必知道;
所引用的数据库中列的个数和数据类型可以实时改变,容易保持一致,也不用修改PL/SQL程序。

DECLARE    v_empno emp.empno%TYPE :=&no;    rec emp%ROWTYPE;BEGIN    SELECT * INTO rec FROM emp WHERE empno=v_empno;    DBMS_OUTPUT.PUT_LINE('姓名:'||rec.ename||'工资:'||rec.sal||'工作时间:'||rec.hiredate); END;

if循环

IF <布尔表达式> THEN
  PL/SQL 和 SQL语句
ELSE
  其它语句
END IF;


CASE 条件表达式


  WHEN 条件表达式结果1 THEN 
     语句段1
  WHEN 条件表达式结果2 THEN
     语句段2
  ......
  WHEN 条件表达式结果n THEN
     语句段n
  [ELSE 条件表达式结果]
END;


loop 循环 

 LOOP
      要执行的语句;
      EXIT WHEN <条件语句> --条件满足,退出循环语句
  END LOOP;

while 循环

WHILE <布尔表达式> LOOP
    要执行的语句;
END LOOP;


数字循环

[<<循环标签>>]
FOR 循环计数器 IN [ REVERSE ] 下限 .. 上限 LOOP
  要执行的语句;
END LOOP [循环标签];
 
每循环一次,循环变量自动加1;使用关键字REVERSE,循环变量自动减1。跟在IN REVERSE 后面的数字必须是从小到大的顺序,而且必须是整数,不能是变量或表达式。可以使用EXIT 退出循环。

BEGIN
   FOR int  in 1..10 LOOP
       DBMS_OUTPUT.PUT_LINE('int 的当前值为: '||int);
   END LOOP;
END;

原创粉丝点击