私はストアドプロシージャのnoobieです。今は動作するものがありますが、最適化する方法を学びたいと思います。MySQLストアドプロシージャは複数のパラメータを返します
CREATE DEFINER=`simonh`@`%` PROCEDURE `get_normalized_client_id`(IN source_id INT, IN source_division VARCHAR(255), IN source_currency VARCHAR(255), OUT NORMALIZED_ID INT, OUT NAME VARCHAR(255), OUT ADDRESS VARCHAR(255))
BEGIN
IF source_id > 100000 THEN SET source_id = source_id - 100000; END IF;
SELECT
CLIENT.NEW_GROUP_REFERENCE_NUMBER INTO NORMALIZED_ID
FROM ccis_vendors.client_id SOURCE
INNER JOIN ccis_vendors.receivable CLIENT ON CLIENT.id = SOURCE.ACCOUNT_ID
WHERE SOURCE.number = source_id AND SOURCE.division = source_division;
SELECT
CLIENT.name INTO NAME
FROM ccis_vendors.client_id SOURCE
INNER JOIN ccis_vendors.receivable CLIENT ON CLIENT.id = SOURCE.ACCOUNT_ID
WHERE SOURCE.number = source_id AND SOURCE.division = source_division;
SELECT
CONCAT(IFNULL(CLIENT.OPERATION_STREET,''), ' ', IFNULL(CLIENT.OPERATION_CITY,''), ' ',
IFNULL(CLIENT.OPERATION_STATE_PROVINCE, ''), ' ', IFNULL(CLIENT.OPERATION_ZIP, '')) INTO ADDRESS
FROM ccis_vendors.client_id SOURCE
INNER JOIN ccis_vendors.receivable CLIENT ON CLIENT.id = SOURCE.ACCOUNT_ID
WHERE SOURCE.number = source_id AND SOURCE.division = source_division;
END
ご覧のとおり、同じクエリを3回使用して3つのOUTパラメータを設定しています。
私の質問は、1つのクエリでそれを行う方法はありますか?
ありがとうございました。
EDIT: なぜINTOが今私にとってうまくいかなかったのか分かります。私は構文が間違っている。
CREATE PROCEDURE `t_get_normalized_client_id`(IN source_id INT, IN source_division VARCHAR(255), IN source_currency VARCHAR(255), OUT NORMALIZED_ID INT, OUT NAME VARCHAR(255), OUT ADDRESS VARCHAR(255))
BEGIN
IF source_id > 100000 THEN SET source_id = source_id - 100000; END IF;
SELECT
CLIENT.NEW_GROUP_REFERENCE_NUMBER,
CLIENT.name,
CONCAT(IFNULL(CLIENT.OPERATION_STREET,''), ' ', IFNULL(CLIENT.OPERATION_CITY,''), ' ',
IFNULL(CLIENT.OPERATION_STATE_PROVINCE, ''), ' ', IFNULL(CLIENT.OPERATION_ZIP, ''))
INTO
NORMALIZED_ID,
NAME,
ADDRESS
FROM ccis_vendors.client_id SOURCE
INNER JOIN ccis_vendors.receivable CLIENT ON CLIENT.id = SOURCE.ACCOUNT_ID
WHERE SOURCE.number = source_id AND SOURCE.division = source_division;
END
みんなありがとう:
ここで作業バージョンです!
おそらく、私が持っているmysqlが期限切れです。エラーメッセージが表示されます。 #1064 - SQL構文にエラーがあります。あなたのMySQLサーバのバージョンに対応するマニュアルをチェックして、適切な構文を使用して ':= CLIENT.NEW_GROUP_REFERENCE_NUMBER、 out_Name:= CLIENT.NAME、 ' 12行目に表示してください。 –
MySQLクライアントバージョン:5.5.29 –
@SimonHU。 。 。 'INTO'バージョンは動作しますか? –