order_id
挿入しようとする注文に設定された自動インクリメント ID を格納するという変数を宣言しました。で構文エラーが発生しOUTPUT
ます。
私は多くの例を読みましたが、これが正しいコーディング方法です。すべてのコードはストアド プロシージャ内にあります。別のテーブルに挿入するために自動インクリメントされた ID が必要であることを除いて、注文の挿入と残りの手順は機能します。
CREATE DEFINER=`name`@`%` PROCEDURE `conduct_order`(
IN username_par VARCHAR(50),
IN addr_par VARCHAR(100),
IN zip_par VARCHAR(45))
BEGIN
DECLARE user_addr VARCHAR(100);
DECLARE user_zip VARCHAR(45);
DECLARE user_country VARCHAR(100);
DECLARE user_phone VARCHAR(45);
DECLARE user_email VARCHAR(45);
DECLARE this_date VARCHAR(45);
DECLARE temp INT;
SET user_id = (SELECT id FROM customers WHERE username= username_par);
SET user_addr = addr_par;
SET user_zip = zip_par;
SET user_country = (SELECT country FROM customers WHERE username=username_par);
SET user_phone = (SELECT phone FROM customers WHERE username=username_par);
SET user_email = (SELECT email FROM customers WHERE username=username_par);
SET this_date = (SELECT CURDATE());
INSERT INTO orders(
customer_id,
customer_addr,
customer_phone,
customer_email,
order_date,
order_state,
customer_postalcode,
customer_country)
OUTPUT order_id INTO temp
VALUES(
user_id,
user_addr,
user_phone,
user_email,
this_date,
'not sent',
user_zip,
user_country);
INSERT INTO order_items(order_id, product_id, amount)
VALUES(
(SELECT id FROM orders
WHERE customer_id=user_id
AND order_date=this_date
AND customer_addr=user_addr
AND customer_postalcode=user_zip
AND customer_country=user_country),
(SELECT product_id FROM carts WHERE customer_id=user_id),
(SELECT amount FROM carts WHERE customer_id=user_id));
END
MySQLワークベンチは言う
構文エラー: 予期しない '出力' (識別子)
何が悪いのかわかりません。
編集:テーブル変数を使用して解決された同様の問題を伴うstackoverflowに関する別の質問を見つけましたが、テーブル変数を宣言できないようです。ワードベンチ 言う
TABLE は現時点では有効な入力ではありません。
これは、「DECLARE MyTableVar TABLE (IdentityColumn BIGINT);」を試したときです。