1.编写PL/SQL 1)创建新表为EMP1,使用employee表的数据 2)清空EMP1表 3)恢复EMP1表数据
时间: 2024-05-10 21:16:55 浏览: 7
下面是编写的PL/SQL代码:
```
-- 创建新表EMP1,使用employee表的数据
CREATE TABLE emp1 AS SELECT * FROM employee;
-- 清空EMP1表
TRUNCATE TABLE emp1;
-- 恢复EMP1表数据
INSERT INTO emp1 SELECT * FROM employee;
```
以上代码中,我们使用了CREATE TABLE AS SELECT语句来创建新表EMP1,并使用了employee表的数据。然后使用TRUNCATE TABLE语句清空EMP1表,最后使用INSERT INTO SELECT语句将employee表中的数据插入到EMP1表中。
相关问题
1.编写一个pl/sql块,输出所有员工的员工名、员工号、工资和部门号
下面是一个输出所有员工的员工名、员工号、工资和部门号的PL/SQL块的示例:
DECLARE
v_emp_name employees.first_name%type;
v_emp_id employees.employee_id%type;
v_salary employees.salary%type;
v_dept_id employees.department_id%type;
BEGIN
FOR emp IN (SELECT employee_id, first_name, salary, department_id FROM employees) LOOP
v_emp_id := emp.employee_id;
v_emp_name := emp.first_name;
v_salary := emp.salary;
v_dept_id := emp.department_id;
dbms_output.put_line('员工名: ' || v_emp_name || ', 员工号: ' || v_emp_id || ', 工资: ' || v_salary || ', 部门号: ' || v_dept_id);
END LOOP;
END;
/
运行以上PL/SQL块后,会按照员工名、员工号、工资和部门号的顺序输出所有员工的相应信息。
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;
```
希望这些代码能够帮到你!