T-SQL から MySQL に作成した関数を再作成しようとしていますが、トリガーを機能させるのに苦労しています。
ここで私がやるべきことは次のとおりです: 1. この形式に基づいて特殊化 ID を作成する関数を作成する必要があります: 日付 - 増分の実際の ID になる 6 桁のコード
- 次に、新しいレコードを挿入しようとするたびに、作成した関数を呼び出して ID を生成するトリガーを作成する必要があります。
これが私がしたことです:
-- created the table first
DROP TABLE abc
Create table abc
(
IDnumber INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
name varchar(32)
)
-- Function
DROP FUNCTION GenerateID
CREATE FUNCTION GenerateID (id int)
RETURNS VARCHAR(10)
RETURN CONCAT(substr((cast(CURDATE() as char(10))),3,2), '-', right(concat('000000', cast( id as char(6) ) ), 6) );
-- create the Trigger
DELIMITER ||
CREATE TRIGGER ID_Insert BEFORE INSERT ON ABC
FOR EACH ROW
BEGIN
UPDATE abc
SET abc.IDNumber = generateID(abc.IDNumber) ;
-- FROM abc
-- INNER JOIN Inserted ON abc.IDNumber = inserted.IDNumber;
END
||
--FROM abc と -- INNER JOIN の部分をコメントアウトしました。これは、T-SQL で使用した構文であるためです。ここに適用しようとしましたが、構文エラーが発生します。これでトリガーは正常に作成されましたが、問題はレコードの挿入を開始したときです。
insert into abc (name) values('cammie')
insert into abc (name) values('helios')
etc
「この関数/sp を呼び出したステートメントで既に使用されているため、トリガー/関数を使用してテーブルを更新できない」というエラー 1442 が表示されます。
私に何が欠けていると思いますか?