如何在 MySQL 过程中使用 OUT 参数/使用 SELECT 从 table 读取数据
How to use an OUT paramter / read data with SELECT from table in a MySQL procedure
我是在 MySql 中创建过程的新手并且仍在学习它。所以,我坚持创建程序并需要帮助。这个问题可能看起来很基础,但它会帮助我从基础知识中学习。
问题:
当我指定 pilot_nbr
.
时,我想为每个飞行员获取 salary
的详细信息
飞行员 Table 包括
- pilot_nbr(主键)
- license_nbr
- last_name
- first_name
- 标题
- 地址
- phone
- office_nbr
- contract_type
- 工资
- manager_nbr
示例数据
'701', '7111', 'Dark', 'Jack', '1st officer', '6 street', '6042233445', '789', 'PTE', '145000.00', NULL
'702', '7222', 'Mack', 'Bill', '1st officer', '7 street', '6043344556', '890', 'EMP', '155000.00', '701'
'703', '7333', 'Cheung', 'Charles', '2nd officer', '8street','6044455667','503','PTE','140000.00','701'
'704', '7444', 'Gordon', 'Greg', '1st officer', '9 street', '6045566778', '123', 'EMP', '125000.00', '701'
'705', '7555', 'Basso', 'Nicki', '2nd officer', '5 street', '6046677889', '223', 'EMP', '163000.00', '701'
'706', '7666', 'Vettel', 'Sebast', '1st officer', '5 street', '6046677800', '523', 'EMP', '199000.00','701'
'707', '7777', 'Hawke','Mike','2ndofficer','7street','6046677326',423','EMP','139000.00','701'
这是我所做的并卡住了:
DELIMITER //
CREATE PROCEDURE pilot_Salary_Procedure( IN pilot_Number INT(20), OUT pilot_Salary DECIMAL(10,2))
BEGIN
DECLARE pilot_NummberVariable INT(20);
SELECT pilot_nbr INTO pilot_NumberVariable
FROM pilot
WHERE pilot_nbr = pilot_Number;
END //
我会那样做的(希望这是你想要的):
DELIMITER //
CREATE PROCEDURE pilot_Salary_Procedure( IN pilot_Number INT(20), OUT pilot_Salary DECIMAL(10,2))
BEGIN
SELECT salary INTO pilot_Salary
FROM pilot
WHERE pilot_nbr = pilot_Number;
END //
然后您可以使用
执行此过程
call pilot_Salary_Procedure(701, @salary);
然后将结果存储在会话变量中 salary
。您可以通过发出
来读取此变量的值
select @salary;
因此会得到 145000
作为结果。
另见 http://dev.mysql.com/doc/refman/5.7/en/call.html
注意:注意您的数据类型:您上面的符号表明 table 中的所有值都是类似字符串的(例如 CHAR 或 VARCHAR)。虽然这对于 first_name
、last_name
或 phone
之类的属性来说完全没问题,但对于 salary
之类的其他属性甚至标识符(pilot_nbr
或 pilot_nbr
或manager_nbr
)。特别是 salary
应该是 DECIMAL(15,2)
或类似的。
我是在 MySql 中创建过程的新手并且仍在学习它。所以,我坚持创建程序并需要帮助。这个问题可能看起来很基础,但它会帮助我从基础知识中学习。
问题:
当我指定 pilot_nbr
.
salary
的详细信息
飞行员 Table 包括
- pilot_nbr(主键)
- license_nbr
- last_name
- first_name
- 标题
- 地址
- phone
- office_nbr
- contract_type
- 工资
- manager_nbr
示例数据
'701', '7111', 'Dark', 'Jack', '1st officer', '6 street', '6042233445', '789', 'PTE', '145000.00', NULL
'702', '7222', 'Mack', 'Bill', '1st officer', '7 street', '6043344556', '890', 'EMP', '155000.00', '701'
'703', '7333', 'Cheung', 'Charles', '2nd officer', '8street','6044455667','503','PTE','140000.00','701'
'704', '7444', 'Gordon', 'Greg', '1st officer', '9 street', '6045566778', '123', 'EMP', '125000.00', '701'
'705', '7555', 'Basso', 'Nicki', '2nd officer', '5 street', '6046677889', '223', 'EMP', '163000.00', '701'
'706', '7666', 'Vettel', 'Sebast', '1st officer', '5 street', '6046677800', '523', 'EMP', '199000.00','701'
'707', '7777', 'Hawke','Mike','2ndofficer','7street','6046677326',423','EMP','139000.00','701'
这是我所做的并卡住了:
DELIMITER //
CREATE PROCEDURE pilot_Salary_Procedure( IN pilot_Number INT(20), OUT pilot_Salary DECIMAL(10,2))
BEGIN
DECLARE pilot_NummberVariable INT(20);
SELECT pilot_nbr INTO pilot_NumberVariable
FROM pilot
WHERE pilot_nbr = pilot_Number;
END //
我会那样做的(希望这是你想要的):
DELIMITER //
CREATE PROCEDURE pilot_Salary_Procedure( IN pilot_Number INT(20), OUT pilot_Salary DECIMAL(10,2))
BEGIN
SELECT salary INTO pilot_Salary
FROM pilot
WHERE pilot_nbr = pilot_Number;
END //
然后您可以使用
执行此过程call pilot_Salary_Procedure(701, @salary);
然后将结果存储在会话变量中 salary
。您可以通过发出
select @salary;
因此会得到 145000
作为结果。
另见 http://dev.mysql.com/doc/refman/5.7/en/call.html
注意:注意您的数据类型:您上面的符号表明 table 中的所有值都是类似字符串的(例如 CHAR 或 VARCHAR)。虽然这对于 first_name
、last_name
或 phone
之类的属性来说完全没问题,但对于 salary
之类的其他属性甚至标识符(pilot_nbr
或 pilot_nbr
或manager_nbr
)。特别是 salary
应该是 DECIMAL(15,2)
或类似的。