• 締切済み

MSSQLサーバーから移行

お世話になっております。 MS-SQLServer2008からMySQL5.1への移植を行っています。 MYSQLの知識がまったくなく、調べながら行っているのですが、 TriggerがどうしてもCreateでエラーになってしまいます。 CREATE TRIGGER tgrMデータ AFTER UPDATE ON M_データ FOR EACH ROW BEGIN UPDATE M_データ SET `DATA切替日` = now(), `使用区分` = 'Regular' where (`使用区分` <> 'Trial' or `使用区分` is null) and `DATA切替日` is null and `ステータス` = '1'; END; phpMyAdminというツールのSQLをデータベースに対し 発行するSQLの箇所で上記を実行しています。 エラー内容がよく理解できず、何がおかしいのか まったくわかりません。 お忙しい中とは存じますが、ご教授願えませんでしょうか。

  • MySQL
  • 回答数2
  • ありがとう数5

みんなの回答

  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.2

SUPER privilege が必要とあるので、phpMyAdmin でMySQLにアクセスするユーザーに、SUPER権限が必要ということです。デリミタ変更時に必要のようです。 権限付与が出来るユーザー(通常root) でアクセスして、対象ユーザーに、SUPER, TRIGGER の権限も追加付与するか、root ユーザーから triger 文を発行してしまうかしてください。 http://dev.mysql.com/doc/refman/5.1/ja/grant.html

  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.1

create trigger の様に、内部に ; セミコロンを含む文は「デリミタ」の変更が必要です。 デリミタの欄に別の記号 # などを入れて、end の後ろは、end# としましょう

mattys
質問者

補足

回答有難うございます。 phpMyAdminでデリミタを#にし、 SQLを以下の様に変更しました。 CREATE TRIGGER tgrMデータ AFTER UPDATE ON M_データ FOR EACH ROW BEGIN UPDATE M_データ SET `DATA切替日` = now(), `使用区分` = 'Regular' where (`使用区分` <> 'Trial' or `使用区分` is null) and `DATA切替日` is null and `ステータス` = '1'; END# 実行したところ エラーで #1227 - Access denied; you need the SUPER privilege for this operation となってしまいます。 何がいけないんでしょうか。 たびたび申し訳御座いません。

関連するQ&A

  • MSSQL2005からMySQL5.1への移行

    Hyper-VのゲストOS上に、Windows Server 2008 R2 + MySQL5.1を利用してDBを構築しています。 今回このMySQL環境に、MSSQL2005よりデータを移行したいと思っていますが上手く移行できないデータがありご相談いたします。 ■相談点 SQL Server 2005からの移行データにMAC外字の文字コード(0x8540~0x889E)が保存されおり、 そのデータをMySQL Migration Toolkit(Version1.1.17)を利用し移行すると異なる文字コードへ変換されてしまう。 例:0x8646 → 0x8145 ■MySQL環境 MySQL5.1の設定、および移行先のテーブル作成構文は下記の様にしています。 [mysql] default-character-set=cp932 [mysqld] character-set-server=cp932 テーブルCreateSQL構文 CREATE TABLE `TBL01` ( `ID` int(10) NOT NULL, `NAME` char(40) COLLATE cp932_bin DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=cp932 COLLATE=cp932_bin' ■MySQL Migration Toolkitの指定 ・MSSQL接続方法  jdbc:mysql://192.168.1.1:3306/?user=test&password=test&useServerPrepStmts=false&characterEncoding=cp932 ・MySQL接続方法  jdbc:mysql://192.168.1.2:3306/?user=test&password=test&useServerPrepStmts=false&characterEncoding=cp932 対処方法をご存じの方がいらっしゃいましたら、教えて頂けないでしょうか。 よろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • PDOのデータ取得方法について

    お世話になります。 以前まで「mysql_query」でSQLを実行していたのをPDOで行うように変更しております。 prepareの「?」の部分までのSQLにした場合(1)、データ取得出来ますが (2)ですとエラーも返ってこなくデータ取得出来ません。 色々と試してはいますが、全く出来なくて大変困っています。どうかご教示くださいませ。 1)SELECT * FROM table WHERE data_code = ? and data_code2 = ? 2)SELECT * FROM table WHERE data_code = ? and data_code2 = ? and (data_code3 = "null" or data_code3 is null or data_code3 = "") ※PHP5.3、MySQL5.0です。

    • 締切済み
    • PHP
  • MySQLで同じデータにフラグ付け出来ますか?

    データベースの初心者です。MySQLを使用してSQL文を試しましたが、うまくいきません。 わかりやすく教えていただけますか? 下のような2つのテーブルで、テーブル2の項目カラムに存在するデータが、 テーブル1の区分にあれば、一致する行(NOカラムの5~7)だけに、 フラグ”1”を付けたいのです。(区分カラムに、"*"で始まるデータは除きます) 区分に、データが全て埋まっていれば簡単に出来るのですが、 先頭行のみデータがあって、次の区分まで、Nullが入っています。 テーブル1 NO 区分 フラグ 1  aaaaa   null 2  null     null 3  null     null 4  null     null 5  bbbbb   null 6  null     null 7  *nozoku  null 8  ccccc null 9  null null テーブル2 NO 項目 1  bbbbb 2  eeeee よろしくお願いします。

    • ベストアンサー
    • MySQL
  • phpmyadminはトリガーやIF文を使えますか

    mysql> delimiter $$ mysql> create trigger trigger_update after update on user for each row -> begin -> update address set name = new.name where name = old.name; -> end; -> $$ mysql> delimiter ; こちらをphpmyadminでどのようにしたら使うことができますか。

    • ベストアンサー
    • MySQL
  • 【至急】さくらサーバーMySQLインポート出来無

    誰か助けて下さい!! さくらインターネットのデータベースで、 MySQLのヴァージョンが低くて、 設置不能のブログ(ワードプレス等)があったので、 ヴァージョンを最新する方法を探していました。 「一回消して再登録する」という記事を読んで、 バックアップも取った上で再登録したのですが、 データをインポートできません。 以前のものは mysql24.db.sakura.ne.jp 今回のは mysql443.db.sakura.ne.jp です。 エクスポートしたデータは「SQL」 「SQL圧縮」「 CSV 」の3つで保存してあります。 再度データベースを作るときにデータベース名を入力する欄がありましたが 以前使っていたものには、そんな入力は要求されなかったような気がします。 もしかしたら、それが原因かも…と思っているのですが、 お分かりになる方いらっしゃいませんでしょうか。 エラーはこちら *-------------------------* エラー 実行した SQL: -- -- データベース: `aaa_01` -- CREATE DATABASE `aaa_01` ; MySQLのメッセージ: #1007 - Can't create database 'aaa_01'; database exists *------------------------------*

  • PostgreSQLからMySQLへ変換

    現在ECサイトに追加カスタマイズ機能を導入したいと考えているのですが、 その際の使用コードが以下のようにPostgreSQLの記載となっており、 使用しているphpMyAdminにてSQLコードを入力するとエラーとなってしまいます。 ↓PostgreSQLコード CREATE TABLE dtb_bookmark ( bookmark_id serial NOT NULL, customer_id integer NOT NULL, product_id integer NOT NULL, memo text, create_date timestamp without time zone NOT NULL, update_date timestamp without time zone NOT NULL, del_flg integer ); ALTER TABLE ONLY dtb_bookmark ADD CONSTRAINT dtb_bookmark_pkey PRIMARY KEY (bookmark_id); COMMENT ON TABLE dtb_bookmark IS 'お気に入り情報'; エラーはtimestamp型とALTER以降の文で発生致します。 mysql文にて解釈させるにはどのように変更したらよろしいのでしょうか? 使用mysqlバージョンはMySQL 4.1.21です。 アドバイスなど頂けましたら幸いです。 よろしくお願い致します。

    • ベストアンサー
    • MySQL
  • UPDATE文のWHERE句について

    if(!is_null($_GET['sid'])) $sid = (int)$_GET['sid']; $sql = "UPDATE ideamemo_table SET update_date = '$update' WHERE sid = $sid;"; mysql_query($sql, $con) or die(mysql_error()); と書いた時に、下記のようなエラーが表示されます。 どこがどう間違っているのでしょうか。 $sidを、シングルクォーテーションでくくっても、エラーが出ます。 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE sid = ''' at line 1

  • Null値を入れるには?

    初歩的な質問です! SQLでデータの更新をかけたいんですが、データがNull値でもUPDATEできるようにしたいんです。 DB側でNull値の許可をしていたら問題なく動くと思ったんですが…現在Access2000を使用しています。 そこで、VBAを使ってSQLでUPDATEをかけようとしているんですが、Null値を受け取ってくれません。 受け取ってくれないため、操作ができなくなってしまいました(/_;) そこで、Null値のUPDATEの方法を教えてください。 よろしくお願いします。

  • サーバーの移行について(エクスポートとインポート)

    ご覧頂きありがとうございます。 サーバーの移行がうまくいかず困っているのでご質問させていただきます。 やりたいことは、本サーバーにあるOracleデータベースのデータをエクスポートして、開発環境にインポートさせようと思っています。 以下、行った作業です。 windowsのコマンドプロンプトから以下のコマンドを実行してエクスポート C:\>emp sadmin/password@sid file=C:\ora_data\empsid.dmp consistent=y owner=sadmin 開発環境にて、表領域の作成とユーザの作成、権限の付与を行う。 SQL>CREATE TABLESPACE HOGE datafile 'C:\temp\HOGE1.dbf' size 800M reuse logging online segment space management auto; SQL>CREATE TEMPORARY TABLESPACE HOGE_TEMP tempfile 'C:\temp\HOGE_TEMP1.dbf' size 800M extent management local uniform size 10M; SQL>CREATE USER sadmin IDENTIFIED BY hogehoge DEFAULT TABLESPACE HOGE TEMPORARY TABLESPACE HOGE_TEMP QUOTA UNLIMITED ON HOGE; SQL>GRANT DBA TO sadmin; GRANT IMP_FULL_DATABASE TO sadmin; 以下のコマンドを実行して、windowsのコマンドプロンプトからインポート。 C:\>imp sadmin/password@sid file=C:\ora_data\empsid.dmp log=C:\ora_data\impsid.log fromuser=sadmin touser=sadmin ignore=y 状況としましては、エクスポートは問題なく終了しています。(確信はありませんが(汗)) インポート実行時、トリガーの箇所だと思うのですが処理が止まってしまいインポートが完了しません。 画面上では、「制約を使用可能にします・・」と表示されて止まってしまいます。 ログには以下のようなエラーが出ています。 IMP-00003: Oracleエラー439が発生しました。 ORA-00439: 機能は有効ではありません: Partitioning IMP-00041: 警告: オブジェクト作成の際、コンパイル・エラーが発生しました。 DBを見てみると、データのインポートはできているようなのですが、トリガーのインポートができていないみたいです。 当方Oracleを触るのは初めてで、書籍やGoogle検索などで調べているのですが、原因解明できず途方にくれています。 どなたかご助言頂けないでしょうか? 宜しくお願いします。

  • テーブル作成時に、「`id` int(100000000) 」とやるとエラーになるのはなぜ?対応策は?

    MySQLでint型は、 「符号付きの範囲は -2147483648 ~ 2147483647。符号なしの範囲は 0 ~ 4294967295」 と、本やサイトに書いてありますが、 create table時に、 桁数として1億を指定しようとしたら、 以下のように怒られてしまいました。 mysql> create table `page_master` (`id` int(100000000) not null,`lang` varchar(5) not null ,`is_top` tinyint(2) not null,`is_valid` tinyint(1) not null) type = innodb -> ; ERROR 1439 (42000): Display width out of range for column 'id' (max = 255) mysql> なぜこのようなことが起こるのでしょうか? また、対応策はありますでしょうか? 以上、よろしくお願いいたします。

    • ベストアンサー
    • MySQL