如何将shell脚本变量作为OUT参数传递给mysql存储过程?

时间:2019-04-02 22:42:32

标签: mysql sql shell sh

我想将外壳脚本变量作为OUT参数传递给Mysql存储的proc。存储的过程是这样的:

SET sql_mode = 'ANSI_QUOTES';
DELIMITER $$
  CREATE PROCEDURE GetTypeSchemaFromAttributeTable(OUT ColumnType VARCHAR (512), OUT ColumnCharset VARCHAR(128), OUT ColumnCollationName VARCHAR(128))
      BEGIN
        SELECT `COLUMN_TYPE` AS ColumnType, `CHARACTER_SET_NAME` AS ColumnCharset, `COLLATION_NAME` AS ColumnCollationName FROM information_schema.COLUMNS WHERE `TABLE_SCHEMA`='example' AND `TABLE_NAME`='Attribute' AND `COLUMN_NAME`='Type';
      END $$
DELIMITER ;

然后是我的shell脚本:

mysql --host="blabla" --user="blabla" --password="blabla" --database="blabla" -e "CALL GetTypeSchemaFromAttributeTable(@type, @charset, @collation)"
echo $type
echo $charset
echo $collation

但是不幸的是,它没有用。所有这些变量都是空的。有人可以建议我该怎么做吗?

1 个答案:

答案 0 :(得分:0)

将mysql命令的输出分配给变量,然后使用awk或其他实用程序将其拆分 在mysql中使用-sN隐藏列名和表布局


output=`mysql --host="blabla" --user="blabla" --password="blabla" --database="blabla"  -sN -e "CALL GetTypeSchemaFromAttributeTable(@type, @charset, @collation)"`

$type=`echo $output | awk '{ print $1 }'`
$charse=`echo $output | awk '{ print $2 }'`
$collation=`echo $output | awk '{ print $3 }'`


echo $type
echo $charset
echo $collation