日期:2014-05-20  浏览次数:20783 次

一些面试题!请高手解答
oracle的临时表的作用是什么?
pl/sql中的包的作用,如何声明?
如何定义游标?
jsp页面如何设置字符集及控制输出文件的类型?


------解决方案--------------------
抢个位置!
临时表是会话独立的,每个登陆用户都使用这一个相同的临时表,但互相之间看不到彼此的数据。
jsp中设置字符集::<%@ page contentType="text/html; charset=gb2312"%>
jsp控制输出文件的类型;response.contenttype="audio/x-pn-realaudio"
其余的就不知道了!等答案。
------解决方案--------------------
小弟正好学到PL/SQL
根据老师所讲,PL/SQL中的包和JAVA中的包作用类似,便于函数与存储过程的管理
根据个人理解,PL/SQL中的包从某种意义上可以理解成vc中的类,包括包头用来声明变量,
函数及存储过程,包体中用来存储各函数及存储过程的实体
至于游标其实就是包装后的SELECT语句,具体格式如下
DECLARE
//变量声明
 CUSOR cusor_name[(参数列表)] IS
//普通的SQL语句
BEGIN
 OPEN cusor_name;
 LOOP
FETCH cusor_name INTO variables(用来存储SQL语句视图中对应字段的值)
//自己要进行的其他操作,也可以没有
EXIT WHEN cusor_name%NOTFOUND[其他条件]
 END LOOP;
 CLOSE cusor_name;
END;
我们刚学完无参数列表的游标创建,以及使用普通循环取出游标中的数据,其实在取游标中的记录时用FOR循环
是相当方便的,不过由于自己还没仔细看过,不能误导,暂且如此,以后学会了再补充!
初来乍到,不足之处各前辈多指教!
------解决方案--------------------
上文补充
在for循环中使用cursor时只需要声明游标,而无需声明用来存放游标中查找出来的记录的变量类型
如下实例:在员工表中查询属于部门dpt_id的【前三名】员工信息

--for循环显示声明游标
CREATE OR REPLACE PROCEDURE select_emp
 (dpt_id employee.department_id%type) IS
CURSOR sel_cursor(emp_id employee.department_id%type) IS
SELECT * FROM employee WHERE department_id = dpt_id;
BEGIN
FOR emp_record IN sel_cursor(dpt_id) LOOP
dbms_output.put_line(emp_record.employee_name||emp_record.job_name||emp_record.salary);
--EXIT WHEN emp_id%ROWCOUNT = 3;
END LOOP;
END select_emp;


-----FOR隐式调用
CREATE OR REPLACE PROCEDURE select_emp
 (dpt_id employee.department_id%type) IS
BEGIN
FOR emp_record IN (SELECT * FROM employee WHERE department_id = dpt_id) LOOP
dbms_output.put_line(emp_record.employee_name||emp_record.job_name||emp_record.salary);
END LOOP;
END select_emp;

--普通循环
CREATE OR REPLACE PROCEDURE select_emp
 (dpt_id employee.department_id%type) IS
emp_record employee%ROWTYPE;--变量声明
CURSOR sel_cursor(emp_id employee.department_id%type) IS
SELECT * FROM employee WHERE department_id = dpt_id;
BEGIN
OPEN sel_cursor; --打开游标
LOOP
FETCH sel_cursor INTO emp_record;--显示取值并存放到变量emp_record中
EXIT WHEN sel_cursor%NOTFOUND OR sel_cursor%ROWCOUNT = 3;
dbms_output.put_line(emp_record.employee_name||emp_record.job_name||emp_record.salary);
END LOOP;
CLOSE sel_cursor;--关闭游标,释放游标占用的内存空间和数据资源(在游标被声明为for update等锁住数据操作时)
END select_emp;