用Scott用户的emp表为数据源,编写分页的存储过程,要求传入第几页和每一页显示数量,输出游标
时间: 2023-12-06 09:45:34 浏览: 103
下面是使用 Scott 用户的 emp 表编写分页存储过程的示例代码,该存储过程接受两个输入参数,分别为页码和每页显示的记录数,输出一个游标,查询结果即为对应页码的数据。
```
CREATE OR REPLACE PROCEDURE get_emp_paged(
p_page_number IN NUMBER,
p_page_size IN NUMBER,
p_cursor OUT SYS_REFCURSOR
)
IS
l_offset NUMBER;
BEGIN
l_offset := (p_page_number - 1) * p_page_size;
OPEN p_cursor FOR
SELECT *
FROM (
SELECT e.*,
ROW_NUMBER() OVER (ORDER BY e.empno) AS rn
FROM emp e
)
WHERE rn > l_offset AND rn <= (l_offset + p_page_size);
END;
```
在该存储过程中,首先根据输入的页码和每页显示的记录数计算出偏移量 offset,然后使用 ROW_NUMBER() 函数为 emp 表的每行数据生成一个序号,最后在外层查询中根据偏移量和每页显示的记录数筛选出对应页码的数据,并输出一个游标作为存储过程的返回值。
相关问题
1. 编写PL/SQL,利用游标,对scott方案下emp表中某个部门的雇员涨工资,部门号及涨工资比例均由手动输入。如果输入部门号不存在,或涨工资比例大于50%,均捕获异常输出相应出错提示信息。 2. 编写存储过程,要求输入部门编号,输出scott.emp表中该部门所有职工的职工编号、姓名、工作岗位。 3. 编写函数,要求将scott.emp表中低于平均工资的职工工资加上200,并返回修改了工资的总人数。
好的,我会尽力回答你的问题。下面是我的回答:
1. PL/SQL代码如下:
```
DECLARE
v_deptno emp.deptno%TYPE;
v_raise_pct NUMBER(3,2);
CURSOR c_emp IS SELECT * FROM emp WHERE deptno = v_deptno FOR UPDATE OF sal;
BEGIN
v_deptno := &deptno;
v_raise_pct := &raise_pct;
IF v_raise_pct > 0.5 THEN
RAISE_APPLICATION_ERROR(-20001,'涨工资比例不能大于50%');
END IF;
OPEN c_emp;
LOOP
FETCH c_emp INTO emp_rec;
EXIT WHEN c_emp%NOTFOUND;
UPDATE emp SET sal = sal * (1 + v_raise_pct) WHERE CURRENT OF c_emp;
END LOOP;
CLOSE c_emp;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RAISE_APPLICATION_ERROR(-20002,'部门号不存在');
END;
```
2. 存储过程代码如下:
```
CREATE OR REPLACE PROCEDURE get_emp_by_deptno(p_deptno IN emp.deptno%TYPE)
IS
BEGIN
SELECT empno, ename, job
FROM emp
WHERE deptno = p_deptno;
END;
```
3. 函数代码如下:
```
CREATE OR REPLACE FUNCTION raise_low_salary_emp
RETURN NUMBER
IS
v_avg_sal emp.sal%TYPE;
v_cnt NUMBER := 0;
BEGIN
SELECT AVG(sal) INTO v_avg_sal FROM emp;
FOR emp_rec IN (SELECT * FROM emp WHERE sal < v_avg_sal)
LOOP
UPDATE emp SET sal = sal + 200 WHERE empno = emp_rec.empno;
v_cnt := v_cnt + 1;
END LOOP;
RETURN v_cnt;
END;
```
希望这些代码能够帮到你!
帮我查询scott用户emp表中数据
好的,您可以使用以下SQL语句来查询scott用户emp表中的数据:
```
SELECT * FROM scott.emp;
```
这条语句会返回emp表中所有的数据,包括员工编号、姓名、职位、上级编号、入职日期、薪水、奖金和部门编号等信息。您可以根据需要修改查询条件来获取更精确的数据。
阅读全文