【问题标题】:How to use an OUT paramter / read data with SELECT from table in a MySQL procedure如何在 MySQL 过程中使用 OUT 参数/通过 SELECT 从表中读取数据
【发布时间】:2016-09-26 23:41:38
【问题描述】:

我是在 MySql 中创建程序并且仍在学习它的新手。所以,我被困在创建程序并需要帮助。这个问题可能看起来很基本,但它会帮助我从基础知识中学习。

问题:
当我指定他的pilot_nbr 时,我想为每个飞行员获取salary 的详细信息。

试点表包括

  • pilot_nbr(主键)
  • license_nbr
  • 姓氏
  • 名字
  • 标题
  • 地址
  • 电话
  • office_nbr
  • 合同类型
  • 工资
  • 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 //

【问题讨论】:

    标签: mysql stored-procedures procedure


    【解决方案1】:

    我会那样做(希望这是你想要的):

    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

    注意:请注意您的数据类型:您上面的符号表明您在表中的所有值都是类似字符串的(例如 CHAR 或 VARCHAR)。虽然这对于像first_namelast_namephone 这样的属性是完全可以的,但对于像salary 这样的其他属性甚至像标识符(pilot_nbrmanager_nbr)这样的离散值是危险的。特别是salary 应该是DECIMAL(15,2) 或类似的。

    【讨论】:

    • 感谢您的回答,是的,它正在工作。我有一个问题,你从哪里写了@salary in call and select?在创建过程中没有这样的事情。你为什么不在 CALL 和 SELECT 中写 @pilot_Salary,因为它是从薪水列保存输出的地方?这个问题将消除我的困惑。非常感谢朋友
    • 不要混淆表的属性/列名和会话变量(将它们视为“数据库连接的局部变量”)。我只是凭空使用了salary——我可以取任何其他任意名称——甚至my_grandma,它会起作用(如果在callselect中都使用)。它是这样工作的:call 触发过程中的编码,结果存储在pilot_salary 中,它被映射到会话变量salary ——而call @salary 的值只是返回)。希望这会有所帮助。
    猜你喜欢
    • 2020-11-08
    • 1970-01-01
    • 2023-02-08
    • 2012-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-22
    • 1970-01-01
    相关资源
    最近更新 更多