ラベル MySQL の投稿を表示しています。 すべての投稿を表示
ラベル MySQL の投稿を表示しています。 すべての投稿を表示

2017年9月25日月曜日

MYSQL カーソルのネスト

DELIMITER //
CREATE PROCEDURE test1()
BEGIN
  DECLARE not_found INT DEFAULT 0;
  DECLARE v_deptno INT;
  DECLARE v_dname VARCHAR(14);
  DECLARE cur1 CURSOR FOR SELECT deptno FROM emp ORDER BY empno;
  DECLARE cur2 CURSOR FOR SELECT dname FROM dept WHERE deptno = v_deptno;
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET not_found = 1;
 
  OPEN cur1;
  loop1: LOOP
    FETCH cur1 INTO v_deptno;
    IF not_found THEN
      CLOSE cur1;
      LEAVE loop1;
    END IF;
   
    OPEN cur2;
    loop2: LOOP
      FETCH cur2 INTO v_dname;
      IF not_found THEN
        SET not_found = 0; ← フラグを戻す
        CLOSE cur2;
        LEAVE loop2;
      END IF;
      INSERT INTO work (dname) VALUES (v_dname);
    END LOOP;
  END LOOP;
END
//
DELIMITER ;

2017年7月20日木曜日

MySQLのコマンドラインでCSVからデータ取込みを実行する

MySQLのコマンドラインでCSVからデータ取込みを実行する

MYSQL> LOAD DATA INFILE 'ファイル名'
INTO TABLE テーブル名
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\r\n';


これをファイルにしてから実行するには

MySQL>source 実行するファイル

2017年7月19日水曜日

MySQLのCHARとVARCHARの指定はバイトでは無く文字数

MySQLのCHARとVARCHARの指定はバイトでは無く文字数

OracleやMS-SQLのようにCHAR , VARCHARの指定はバイトと思っていました。
MySQL Version4以降からバイトから文字に指定が変わったそうです。

2017年3月28日火曜日

Oracle -> MySQL SQL変換メモ

http://terukizm.hatenablog.com/entry/20110801/1312181426

■システム日付
・Oracle
SYSDATE

・MySQL
NOW()
■日付型→文字列型変換(YYYY/MM/DD)
・Oracle:
TO_DATE(TO_CHAR(SYSDATE), 'YY-MM-DD')

・MySQL:
DATE_FORMAT( SYSDATE() , '%Y-%m-%d')
■TRUNC(日付)
・Oracle
TRUNC(SYSDATE)

・MySQL
DATE(SYSDATE())
■ADD_MONTH
・Oracle
ADD_MONTHS(SYSDATE, 1)

・MySQL
DATE_ADD(SYSDATE(),INTERVAL 1 MONTH)
■MONTHS_BETWEEN
・Oracle
MONTHS_BETWEEN(SYSDATE, SYSDATE+1)

・MySQL
DATEDIFF(SYSDATE(), SYSDATE()+1)
■TO_NUMBER
・Oracle
TO_NUMBER('-100')

・MySQL
CAST('-0008000' as signed)
■TO_DATE
・Oracle
TO_DATE('9999/12/31', 'YYYY/MM/DD')

・MySQL
STR_TO_DATE('9999/12/31', '%Y/%m/%d')
■NULL文字変換
・Oracle: 
NVL(exp1,exp2)

・MySQL:
IFNULL(exp1, exp2)

■外部結合
・Oracle:
WHERE
 A.id(+) = B.id

・MySQL:
 FROM A
  RIGHT OUTER JOIN B
    ON (A.id = B.id)


・Oracle:
WHERE
 A.id = B.id(+)

・MySQL:
 FROM A
  LEFT OUTER JOIN B
    ON (A.id = B.id)

2013年2月26日火曜日

MYSQL WORKBENCHでError Code: 1175の対処法

MYSQL WORKBENCHでError Code: 1175の対処法

このエントリーを含むはてなブックマークはてなブックマーク - MYSQL WORKBENCHでError Code: 1175の対処法 この記事をクリップ!Livedoorクリップ - MYSQL WORKBENCHでError Code: 1175の対処法 Yahoo!ブックマークに登録 FC2ブックマークへ追加 Googleブックマークに追加
WorkBenchの初期インストールではsafe update modeが有効になっているのでdelete from hogeだけの削除ができない。
Error Code: 1175
You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column

safe updateモードをoffにするには

  1. Edit -> Preferences
  2. SQL Queriesタブを開く
  3. 次のチェックをはずす “Safe Updates…”
その後OKボタンで設定を変更し、Workbenchの再起動が必要。再起動しないと設定が有効にならない。
 

元ネタ
http://www.jwaver.com/mysql-workbench%E3%81%A7error-code-1175%E3%81%AE%E5%AF%BE%E5%87%A6%E6%B3%95

2012年12月5日水曜日