mysql将变量值添加到存储过程内的结果集

时间:2017-03-26 23:43:41

标签: mysql stored-procedures

我有这种情况(工作正常):

CREATE PROCEDURE `my_sp`(
  IN in_var VARCHAR(32),
  OUT out_var VARCHAR(255)
)
BEGIN   

  DECLARE mysql_query VARCHAR(255);
  DECLARE mysql_result VARCHAR(32);

  SET @mysql_query = CONCAT("
    CALL other_BD.other_Stored_Procedure( '",in_var,"', @other_sp_result );
  ");

  PREPARE stmt FROM @mysql_query;
  EXECUTE stmt;
  SELECT @other_sp_result INTO @mysql_result;
  DEALLOCATE PREPARE stmt;

  IF (@mysql_result = 'OK') 
  THEN
    SELECT * FROM my_table WHERE my_column = 'my_value' LIMIT 1;
    SET out_var = 'whatever';
  ELSE
    SET out_var = 'NOT OK'; 
  END IF;
END;

PHP:

$dbh = new PDO( $connection_params );

$sql = "CALL my_sp( :in_var , @outvar )";

$stmt = $dbh->prepare( $sql );
$stmt->execute( array( ':in_var' => $_POST['in_var'] ) );

//that return the result from SELECT * FROM my_table ... (from my_sp)
$result1 = $stmt->fetchAll( PDO::FETCH_ASSOC );

//That avoid error: Cannot execute queries while other unbuffered queries are active ...
$stmt->closeCursor();


$sql = "SELECT @outvar";
$query = $dbh->query( $sql );
//that return the out_var result ("whatever" for this case);
$result2 = $query->fetchAll( PDO::FETCH_ASSOC );

问题是:

有没有办法添加

  

设置out_var ='无论'

到此结果

  

SELECT * FROM my_table WHERE my_column =' my_value'限制1;

因此在php中只有一个查询可以将所有数据组合在一起,如:

  

col_1 => ' val',... col_n => ' VAL' ... my_out_var => ' whatever_value'

2 个答案:

答案 0 :(得分:1)

尝试这样使用:

第一个程序:

create procedure proc_get_outvar(input int)
begin 

    call proc_out(input, @outvar);
    select @outvar;

end;

或者

将旧的存储过程包裹起来:

第二程序:

$sql ="call proc_out(10);"

使用:

chart.focus.dispatch.on('onBrush', function brushChanged(brushExtent) {
  otherCharts.forEach((chart) => chart.brushExtent(brushExtent));
});

您可以替换该过程所需的数据类型:

希望它对你有所帮助。

答案 1 :(得分:0)

最后我用这个解决了自己:

SELECT * , @out_var as new_column FROM my_table WHERE my_column = 'my_value' LIMIT 1;

所以现在我将'new_column'添加到mi记录集中作为预期

  

col_1 => 'val',... col_n => 'val'... new_column => 'out_var_value'