いっぽんの猟銃のむこうに (DAIZOじいさんとGun)

ヌルめの技術メモとか。フリーランスやってます (http://acez.jp/)

SYSDATEをSYSDATE()で置き換えるのはNG

結論から言うと「OracleのSYSDATEをMySQLに移行する場合はNOW()使え」ということらしい。
http://nippondanji.blogspot.com/2009/04/sysdatenow.html


以下検証ソース。

SQL> CONN / AS SYSDBA
SQL> GRANT EXECUTE ON DBMS_LOCK TO SCOTT ;  // 権限あげないとdbms_lock.sleepが使えないので

SQL> ALTER SESSION SET NLS_DATE_FORMAT='yyyy-mm-dd hh24:mi:ss';

SQL> CREATE OR REPLACE FUNCTION tesf(dt IN NUMBER) RETURN NUMBER
	  IS
	    d NUMBER;
	  BEGIN
            dbms_lock.sleep(dt);
	    RETURN d;
	  END;
	/

SQL> SELECT SYSDATE, testf(10), SYSDATE from dual();

SYSDATE 	      TESF(10) SYSDATE
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
2011-10-18 18:09:57	       2011-10-18 18:09:57

SYSDATE()だと挙動がちがくなっちゃうらしい。もーめんどくさいなー