plsql练习题及答案
标题:PL/SQL练习题及答案
PL/SQL(Procedural Language/Structured Query Language)是Oracle数据库中的一种编程语言,用于编写存储过程、触发器和函数等数据库对象。在学习和掌握PL/SQL的过程中,进行一些练习题是非常有帮助的。本文将为大家提供一些PL/SQL练习题及其答案,帮助读者加深对PL/SQL的理解和应用。 1. 编写一个PL/SQL程序,创建一个名为\"employees\"的表,包含以下字段:员工编号(emp_id),员工姓名(emp_name),员工职位(emp_position),员工工资(emp_salary)。然后插入几条员工记录,并查询该表的所有数据。 答案: ```sql
-- 创建employees表 CREATE TABLE employees ( emp_id NUMBER,
emp_name VARCHAR2(50), emp_position VARCHAR2(50), emp_salary NUMBER );
-- 插入员工记录
INSERT INTO employees VALUES (1, 'John', 'Manager', 5000); INSERT INTO employees VALUES (2, 'Jane', 'Developer', 4000); INSERT INTO employees VALUES (3, 'Mike', 'Analyst', 3500);
-- 查询表的所有数据 SELECT * FROM employees; ```
2. 编写一个PL/SQL程序,创建一个名为\"get_employee_salary\"的存储过程,该存储过程接收一个员工编号作为输入参数,并返回该员工的工资。 答案: ```sql
-- 创建存储过程
CREATE OR REPLACE PROCEDURE get_employee_salary( emp_id IN NUMBER, salary OUT NUMBER ) AS BEGIN
SELECT emp_salary INTO salary FROM employees WHERE emp_id = emp_id; END; /
-- 调用存储过程 DECLARE
emp_salary NUMBER; BEGIN
get_employee_salary(1, emp_salary);
DBMS_OUTPUT.PUT_LINE('Employee Salary: ' || emp_salary); END; / ```
3. 编写一个PL/SQL程序,创建一个名为\"update_employee_salary\"的触发器,当更新员工工资时,将更新前的工资和更新后的工资插入到一个名为\"salary_history\"的表中。 答案: ```sql
-- 创建salary_history表 CREATE TABLE salary_history ( emp_id NUMBER, old_salary NUMBER, new_salary NUMBER, update_date DATE );
-- 创建触发器
CREATE OR REPLACE TRIGGER update_employee_salary BEFORE UPDATE OF emp_salary ON employees FOR EACH ROW BEGIN
INSERT INTO salary_history VALUES
(:OLD.emp_id, :OLD.emp_salary, :NEW.emp_salary, SYSDATE); END; /
-- 更新员工工资
UPDATE employees SET emp_salary = 6000 WHERE emp_id = 1; -- 查询salary_history表的数据 SELECT * FROM salary_history; ```
通过以上练习题,我们可以加深对PL/SQL的理解和应用。PL/SQL是Oracle数据库中非常重要的一部分,掌握PL/SQL的知识对于数据库开发和管理非常有帮助。希望本文提供的PL/SQL练习题及答案能够对读者在学习和应用PL/SQL过程中起到一定的指导作用。