日期:2014-05-16 浏览次数:20592 次
declare
v_sal emp.sal% type;
v_ename emp.ename% type;
begin
select t.sal into v_sal from emp t where rownum =1;
select t.ename into v_ename from emp t where rownum =1;
dbms_output.put_line( 'v_sal===='||v_sal);
dbms_output.put_line( 'v_ename===='||v_ename);
end;declare
v_sal emp.sal% type;[list]
[*]
[/list]
v_ename emp.ename% type;
begin
select t.sal , t.ename into v_sal,v_ename from emp t where rownum=1 ;
dbms_output.put_line( 'v_sal===='||v_sal);
dbms_output.put_line( 'v_ename===='||v_ename);
end;declare
v_sal emp.sal% type;
v_ename emp.ename% type;
v_emp emp%rowtype; ----引用一列使用rowtype
begin
select * into v_emp from emp t where rownum =1;----这里只可以用*,不可以再指定赋值某些列(1)
dbms_output.put_line( 'v_emp.ename===='||v_emp.ename); ---用过变量.列名的方式取值
end;declare
type emp_record is record( ---- 定义一种类型 类型名称为emp_record 类似c语言中的结构体
v_ename emp.ename%type,
v_sal emp.sal%type,
v_empno emp.empno%type
);
v_emp_record emp_record; ----定义一个变量名为v_emp_record ,类型为emp_record的变量
v_emp_record1 emp_record;
begin
-----将值付给变量的指定属性
select t.sal,t.empno,t.ename into v_emp_record.v_sal, v_emp_record.v_empno , v_emp_record.v_ename from emp t where rownum=1;
-----将值付给变量(顺序按照emp_record中定义属性的顺序)
select t.ename,t.empno, t.sal into v_emp_record1 from emp t where rownum=1;
dbms_output.put_line('v_emp_record.ename===='||v_emp_record.v_ename);
dbms_output.put_line('v_emp_record1.ename===='||v_emp_record1.v_ename);
end; declare
type num_array is table of number(5) index by binary_integer; ---定义num_array 这种类型;
v_num_array num_array;
begin
for i in 1..10 loop
v_num_array(i):=i;
end loop;
for k in reverse 1..10 loop
dbms_output.put_line(' v_num_array('||k||')==='|| v_num_array(k));
end loop;
end;declare
---emp%rowtype表示集合中元素类型(这里也可以上面的record类型),binary_integer 表示索引下标类型(也可以是varchar2作为下标)
type emp_array is table of emp% rowtype index by binary_integer ;
v_emp_array emp_array;
begin
/*********************************************************************************************************
* binary_integer 表示在数据全部取出后一次性放到v_emp_array中,这时其中的多条记录相当于是一个集合了,v_emp_array也是集合类型的,
* 所以可以正确的赋值,而不加binary_integer表示先取出一跳record就赋给v_emp_array ,两者类型不统一,所以不能赋值
***********************************************************************************************************/
select * bulk collect into v_emp_array from emp t ;
for i in v_emp_array.first..v_emp_array.last loop
dbms_output.put_line(v_emp_array(i).ename|| ' '||v_emp_array(i).sal);
end loop ;
end ;declare
type name_array is table of varchar2(50) index by varchar2(20) ;
v_name_array name_array;
begin
v_name_array('zhongguo'):='beijing';
v_name_array('meiguo'):='huashengdun';
v_name_array('hanguo'):='shouer';
dbms_output.put_line(v_name_array('hanguo'));
end;