-1

このトリガーは、ファイル テーブルの「filepath」と一致するように「field_csvfilepath_value」を更新するように設計されています (テーブルの詳細は以下を参照)。しかし、私はそれを機能させることができません。助けてください。

delimiter $$
CREATE TRIGGER csv_filpath 
AFTER INSERT ON content_type_importcsv for each row 
begin
    declare p varchar(80)
    set p := (SELECT filepath FROM content_type_importcsv join files where NEW.content_type_importcsv.field_csv1_fid = files.fid)

    set NEW.field_csvfilepath_value = p

    end$$
    delimiter ;

このトリガーは次のエラーを生成しています:

エラー コード: 1064。SQL 構文にエラーがあります。MySQL サーバーのバージョンに対応するマニュアルを参照して、5 行目の「set p := (SELECT filepath FROM content_type_importcsv join files where NEW.conte」の近くで使用する正しい構文を確認してください。

私はmysqlワークベンチ5.2を使用しています

delimiter $$
delimiter $$

CREATE TABLE `content_type_importcsv` (
  `vid` int(10) unsigned NOT NULL DEFAULT '0',
  `nid` int(10) unsigned NOT NULL DEFAULT '0',
  `field_csv1_fid` int(11) DEFAULT NULL,
  `field_csv1_list` tinyint(4) DEFAULT NULL,
  `field_csv1_data` text,
  `field_csvfilepath_value` longtext,
  PRIMARY KEY (`vid`),
  KEY `nid` (`nid`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8$$


CREATE TABLE `files` (
  `fid` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `uid` int(10) unsigned NOT NULL DEFAULT '0',
  `filename` varchar(255) NOT NULL DEFAULT '',
  `filepath` varchar(255) NOT NULL DEFAULT '',
  `filemime` varchar(255) NOT NULL DEFAULT '',
  `filesize` int(10) unsigned NOT NULL DEFAULT '0',
  `status` int(11) NOT NULL DEFAULT '0',
  `timestamp` int(10) unsigned NOT NULL DEFAULT '0',
  PRIMARY KEY (`fid`),
  KEY `uid` (`uid`),
  KEY `status` (`status`),
  KEY `timestamp` (`timestamp`)
) ENGINE=MyISAM AUTO_INCREMENT=55 DEFAULT CHARSET=utf8$$
4

2 に答える 2

0

いくつかの構文エラーがあります:

  1. リストしたものは が原因です。削除する必要があり:ますset p :=
  2. beginとの間の各行はend$$;
  3. after トリガーでは NEW 行を更新できないため、before トリガーにする必要があります。
于 2013-07-18T08:56:46.730 に答える