创建名为teacherinfo1的存储过程。要求:存储过程teacherinfo1有3个参数。输入参数为teacherid和type,输出参数为info。满足:根据编号(teacherid)来查询teacherinfo表中的记录。如果type的值为1时,将姓名(name)传
时间: 2023-12-14 08:37:54 浏览: 41
给输出参数info;如果type的值为2时,将性别(gender)传给输出参数info;如果type的值为3时,将年龄(age)传给输出参数info。以下是相应的存储过程代码:
```
CREATE PROCEDURE teacherinfo1
@teacherid INT,
@type INT,
@info VARCHAR(20) OUTPUT
AS
BEGIN
IF @type = 1
SELECT @info = name FROM teacherinfo WHERE teacherid = @teacherid
ELSE IF @type = 2
SELECT @info = gender FROM teacherinfo WHERE teacherid = @teacherid
ELSE IF @type = 3
SELECT @info = CAST(age AS VARCHAR(10)) FROM teacherinfo WHERE teacherid = @teacherid
END
```
存储过程中用了IF ELSE IF语句,根据type的值来决定传递哪个字段的值给输出参数info。其中CAST函数是将age字段的值从int类型转换为varchar类型,以便输出到@info参数中。
相关问题
(1)创建名为teachernfo1的存储过程。要求:存储过程teachernfo1有3个参数。输入参数为teacherid和type,输出参数为info。满足:根据编号(teacherid)来查询teachernfo表中的记录。如果type的值为1时,将姓名(name)传给输出参数info;如果type的值为2时,将年龄传给输出参数info;如果type为其他值,则返回字符串“Error”。 (2)调用存储过程,参数值teacher id为2,type为1。 (3)使用DROP PRODECURE语句来删除存储过程 (4)创建名为teacherinfo2的存储函数。要求:存储过程teacherinfo2有两个参数:teacher id和type。满足:根据编号(teacher id)来查询teacher表中的记录。如果type的值是1时,则返回姓名(name)值;如果type的值是2时,则返回年龄;如果type为其他值,则返回字符串“Error”。 (5)使用SELECT语句调用teacherinfo2存储函数。
(1) 创建存储过程:
```mysql
CREATE PROCEDURE teachernfo1
(IN teacherid INT, IN type INT, OUT info VARCHAR(50))
BEGIN
IF type = 1 THEN
SELECT name INTO info FROM teachernfo WHERE id = teacherid;
ELSEIF type = 2 THEN
SELECT age INTO info FROM teachernfo WHERE id = teacherid;
ELSE
SET info = 'Error';
END IF;
END;
```
(2) 调用存储过程:
```mysql
SET @info = '';
CALL teachernfo1(2, 1, @info);
SELECT @info;
```
(3) 删除存储过程:
```mysql
DROP PROCEDURE teachernfo1;
```
(4) 创建存储函数:
```mysql
CREATE FUNCTION teacherinfo2
(teacherid INT, type INT)
RETURNS VARCHAR(50)
BEGIN
DECLARE info VARCHAR(50);
IF type = 1 THEN
SELECT name INTO info FROM teacher WHERE id = teacherid;
ELSEIF type = 2 THEN
SELECT age INTO info FROM teacher WHERE id = teacherid;
ELSE
SET info = 'Error';
END IF;
RETURN info;
END;
```
(5) 调用存储函数:
```mysql
SELECT teacherinfo2(2, 1);
```
设计一个数据库的教师工资管理系统 1、简易需求(类似作业中画E_R的需求要求写) 2、概念结构设计(画E_R图)至少包含四个实体,且实体间有联系。 3、设计表的结构 4、创建数据库 具体要求如下:系统最少要有四个实体,且实体与实体之间必须有联系。 最少包含一个触发器。 表要有完整性约束。 建表(包含必要的约束)、表的级联、基础数据添加、触发器器和存储过程的建立。 5、创建视图。 6、创建索引。
1、简易需求:
该教师工资管理系统可以记录每个教师的基本信息以及工资情况,包括教师姓名、性别、出生日期、联系方式、职称、所属学院、工号、入职日期、基本工资、奖金、扣除项等信息,同时可以进行工资的计算、修改、查询等操作。
2、概念结构设计:
实体:教师、学院、工资、扣除项
联系:教师与学院之间为“所属关系”,教师与工资之间为“拥有关系”,工资与扣除项之间为“包含关系”。
![ER图](https://img-blog.csdnimg.cn/20211101201524929.png)
3、设计表的结构:
教师表(Teacher):教师ID、姓名、性别、出生日期、联系方式、职称、所属学院ID、入职日期。
学院表(College):学院ID、学院名称。
工资表(Salary):工资ID、基本工资、奖金、扣除项、实发工资、所属教师ID。
扣除项表(Deduction):扣除项ID、扣除项名称、扣除金额。
4、创建数据库:
创建数据库TeacherSalary,包含上述四张表及其关系,同时在工资表中添加触发器,实现工资计算的功能,建立必要的约束。
创建表的SQL语句如下:
```sql
CREATE TABLE Teacher(
TeacherID INT PRIMARY KEY,
Name VARCHAR(20),
Gender CHAR(2),
Birthday DATE,
Phone VARCHAR(20),
Title VARCHAR(20),
CollegeID INT,
EntryTime DATETIME,
FOREIGN KEY(CollegeID) REFERENCES College(CollegeID)
);
CREATE TABLE College(
CollegeID INT PRIMARY KEY,
CollegeName VARCHAR(50)
);
CREATE TABLE Salary(
SalaryID INT PRIMARY KEY,
BasicSalary FLOAT,
Bonus FLOAT,
Deduction FLOAT,
Salary FLOAT,
TeacherID INT,
FOREIGN KEY(TeacherID) REFERENCES Teacher(TeacherID)
);
CREATE TABLE Deduction(
DeductionID INT PRIMARY KEY,
DeductionName VARCHAR(50),
DeductionAmount FLOAT
);
```
创建触发器的SQL语句如下:
```sql
CREATE TRIGGER trg_SalaryCalculation ON Salary
AFTER INSERT, UPDATE
AS
BEGIN
UPDATE Salary
SET Salary = BasicSalary + Bonus - Deduction
FROM Salary s
JOIN inserted i ON s.SalaryID = i.SalaryID
END
```
5、创建视图:
创建一个名为TeacherInfo的视图,用于显示教师的基本信息和工资情况。
```sql
CREATE VIEW TeacherInfo AS
SELECT T.Name,T.Gender,T.Birthday,T.Phone,T.Title,C.CollegeName,S.BasicSalary,S.Bonus,S.Deduction,S.Salary
FROM Teacher T
JOIN College C ON T.CollegeID=C.CollegeID
JOIN Salary S ON T.TeacherID=S.TeacherID
```
6、创建索引:
为提高查询效率,可以为Teacher表和College表创建索引。
```sql
CREATE INDEX idx_TeacherID ON Teacher(TeacherID);
CREATE INDEX idx_CollegeID ON College(CollegeID);
```
阅读全文