Oracle复习笔记(七)

2015-02-02 23:25:38 · 作者: · 浏览: 24
yfun1('KING'); dbms_output.put_line('EMPNO:' || empno); end; 六、复合类型 记录(record): --根据编号查询员工姓名和薪水(复合类型――记录) create or replace procedure myproc2(e_empno number) is type record_type is record(v_ename emp.ename%type,v_sal emp.sal%type); ename_sal_recode record_type; begin select ename,sal into ename_sal_recode from emp where empno = e_empno; dbms_output.put_line('ENAME,SAL:' || ename_sal_recode.v_ename || ' ' || ename_sal_recode.v_sal); end; 表(table): --根据员工姓名查询该员工上级(复合类型――表) create or replace procedure myproc3(e_ename varchar2) is type emp_table_type is table of emp.ename%type index by binary_integer; emp_table emp_table_type; begin select e2.ename into emp_table(0) from emp e1,emp e2 where e2.empno = e1.mgr and e1.ename = upper(e_ename); dbms_output.put_line('MGR:' || emp_table(0)); exception when no_data_found then dbms_output.put_line('该员工不存在或没有上级!'); end; --取出emp表所有员工姓名(复合类型――表) create or replace procedure myproc4 as type emp_table_type is table of emp.ename%type index by binary_integer; emp_table emp_table_type; num number; begin select count(*) into num from emp; dbms_output.put_line('EMP TABLE ALL ENAME:'); for i in 1..num loop select e2.ename into emp_table(i) from (select rownum rn,e1.* from (select * from emp order by empno) e1) e2 where e2.rn = i; dbms_output.put_line(emp_table(i)); end loop; end; 七、程序包:用于封装子程序、游标、变量等对象 1、组成 1)包规范 package 用于声明公共成员和子程序规范(定义接口) 2)包主体 package body 用于声明私有成员和实现子程序(定义类实现接口) --包规范 create or replace package mypack1 is procedure test1; procedure test2; end; --包主体 create or replace package body mypack1 is --test1 procedure test1 is begin db
ms_output.put_line('my is test1'); end; --test2 procedure test2 is begin test1(); dbms_output.put_line('my is test2'); end; end; begin mypack1.test2(); end; /*----------------------------------------动态sql----------------------------------------*/ 注:execute immediate sql执行结果只能取出单行单列或多列,如多行必须使用游标 --根据员工姓名查询薪水 declare type my_record_type is record(e varchar2(20),s number); strSql varchar2(100); my_record my_record_type; begin strSql := 'select ename,sal from emp where ename = ''KING'''; execute immediate strSql into my_record; dbms_output.put_line(my_record.e || ' ' || my_record.s); end; /*----------------------------------------分页存储过程----------------------------------------*/ --定义包 create or replace package pagePack as type pageCursorType is ref cursor; --游标类型 procedure pageProc( tableName varchar2, --表名 showField varchar2, --查询字段 whereText varchar2, --查询条件 orderText varchar2, --排序字段[asc] || [desc] pageIndex number, --当前页码 pageSize number, --每页显示几条 counter out number, --总记录数 pageCount out number, --总页数 pageCursor out pageCursorType --结果集 ); end pagePack; --实现包体 create or replace package body pagePack as procedure pageProc( tableName varchar2, --表名 showField varchar2, --查询字段 whereText varchar2, --查询条件 orderText varchar2, --排序字段[asc] || [desc] pageIndex number, --当前页码 pageSize number, --每页显示几条 counter out number, --总记录数 pageCount out number, --总页数 pageCursor out pageCursorType --结果集 ) as strSql varchar2(500); wText varchar2(100); oText varchar2(100); begin --判断是否有where条件 if whereText is not n