При использовании API данных AWS RDS для выполнения хранимой процедуры в базе данных MySQL, как получить значение параметров out, установленных хранимой процедурой?
В приведенном ниже примере я ищукак получить значение «99», установленное процедурой для @ o.
SQL:
DELIMITER ||
CREATE PROCEDURE say_hello_and_out_99(
OUT p_ INT
)
SQL SECURITY INVOKER
BEGIN
SET p_ = 99;
SELECT
'hello' info
;
END
||
DELIMITER ;
GRANT EXECUTE ON PROCEDURE say_hello_and_out_99 TO '(my user)';
Test Lambda :
exports.handler = async (event) => {
const aws = require('aws-sdk');
const rdsd = new aws.RDSDataService();
const util = require('util');
await rdsd.executeStatement({
resourceArn: '(my arn)',
secretArn: '(secret for my user)',
database: '(my db)',
sql: 'CALL say_hello_and_out_99(@o);',
continueAfterTimeout: true,
includeResultMetadata: true
})
.promise()
.then(
val => console.log('yes',val,util.inspect(val.records)),
err => console.log('err',err, err.stack)
)
;
return {
statusCode: 200
};
};
Лямбда-результаты:
Response:
{
"statusCode": 200
}
Request ID:
"(---)"
Function Logs:
START RequestId: (---) Version: $LATEST
2019-10-19T20:23:29.550Z (---) INFO yes { columnMetadata:
[ { arrayBaseColumnType: 0,
isAutoIncrement: false,
isCaseSensitive: false,
isCurrency: false,
isSigned: false,
label: 'info',
name: 'info',
nullable: 0,
precision: 5,
scale: 0,
schemaName: '',
tableName: '',
type: 12,
typeName: 'VARCHAR' } ],
numberOfRecordsUpdated: 0,
records: [ [ [Object] ] ] } [ [ { stringValue: 'hello' } ] ]
END RequestId: (---)
mysql Результаты клиента:
mysql> CALL say_hello_and_out_99(@o); SELECT @o;
+-------+
| info |
+-------+
| hello |
+-------+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
+------+
| @o |
+------+
| 99 |
+------+
1 row in set (0.00 sec)