Oracle参数变量类型

 

Oracle参数变量类型

 

1.在编写pl/sql程序时,可以定义变量常量;在pl/sql程序中包括有:

a.标量类型(scalar)

b.复合类型(composite)

c.参照类型(reference)

d.lob(large object)

 

1) 标量(scalar)——常用类型

在编写pl/sql块时,如果要使用变量,需在定义部分定义变量。pl/sql中定义变量和常量的语法如下:

identifier [constant] datatype [not null] [:=| default expr]

identifier:名称

constant:指定常量。需要指定它的初始值,且其值是不能改变的

datatype:数据类型

not null:指定变量值不能为null

:=给变量或是常量指定初始值

default用于指定初始值

expr:指定初始值的pl/sql表达式,可以是文本值、其它变量、函数等。

 

标量定义的案例

1.定义一个变长字符串

v_ename varchar2(10);

2.定义一个小数,范围 -9999.99~9999.99

v_sal number(6,2);

3.定义一个小数并给一个初始值5.4 :=pl/sql的赋值号

v_sal2 number(6,2):=5.4;

4.定义一个日期类型的数据

v_hiredate date;

5.定义一个布尔变量,不能为空,初始值为false

v_valid boolean not null default false;

6.使用%type类型表名.字段名%type

v_ename emp.ename%type;

 

2) 复合变量(composite)——介绍

用于存放多个值的变量。主要包括这几种:

1.pl/sql记录

2.pl/sql

3.嵌套表

4.varray

 

a. 复合类型——pl/sql记录

  

type emp_record_type is record(
    name emp.ename%type,
    salary emp.sal%type,
    title emp.job%type
  );
  v_emp_record emp_record_type;

  

b. 复合类型-pl/sql

相当于高级语言中的数组,但是需要注意的是在高级语言中数组的下标不能为负数,而pl/sql可以为负数的,并且表元素的下标没有限制。实例如下:

 

declare
  type record_type is record(
    name emp.ename%type,
    salary emp.sal%type,
    title emp.job%type
  );
  type record_table_type is table of record_type
  index by binary_integer;
  v_record_table record_table_type;
begin
  select ename, sal, job into v_record_table(-1) from emp where empno = 7788;
  dbms_output.put_line('姓名:' || v_record_table(-1).name
  || ' 工资:' || v_record_table(-1).salary);
end;

  

3) 参照变量——ref cursor游标变量

使用游标时,当定义游标时不需要指定相应的select语句,但是当使用游标时(open时)需要指定select语句,这样一个游标就与一个select语句结合了。

-- 定义游标类型 ref cursor 取指定部门的所有员工的姓名和工资
declare
  type cursor_type is ref cursor;
  v_cursor_test cursor_type;
  v_ename emp.ename%type;
  v_sal emp.sal%type;
begin
  open v_cursor_test for select ename, sal from emp where deptno = &no;
  --循环取出数据并显示
  loop
    fetch v_cursor_test into v_ename, v_sal;
    exit when v_cursor_test%notfound;
    dbms_output.put_line('姓名:' || v_ename || ' 工资:' || v_sal);
  end loop;
end;

 

猜你喜欢

转载自it4j.iteye.com/blog/2007676
今日推荐