YII MYSQL 转移至 Oracle

1.字段大小写有所不同,特别注意,mysql不区分在小写,oracle区分大小,如果使用小写需要用“”进行引起。如yii ar 自定义t,在相关使用时,需要用“t”进行表示。

		$criteria->order .= '"t".ID desc';

		$models = AdminLog::model ()->with ( 'admin' )->findAll ( $criteria );

2.逻辑上,分组排序不同于mysql,需要用

		$criteria->select = "ICON,ROW_NUMBER () OVER (
		PARTITION BY ICON
		ORDER BY
			ordernum asc
	)";
		// $criteria->group = "ICON";
		$models = Menu::model ()->findAll ( $criteria );

3.主键自增也有所不同,凡原来涉及insert  null操作相关地方,需要用OracleTools::getNewId()获取id进行替换,现在使用通用序列,后需特殊字段,需要进行特殊处理

	protected function beforeSave() {
		$this->ID = OracleTools::getNewId ();
		if ($this->hasEventHandler ( 'onBeforeSave' )) {
			$event = new CModelEvent ( $this );
			$this->onBeforeSave ( $event );
			return $event->isValid;
		} else
			return true;
	}

 

<?php
/**
 * 
 * 现在简单实现,可以处理成,根据对应的表,生成对应的序列进行生成,主要同步自增id
 *
 */
class OracleTools {
	const TABLE_COMMOON = "seq_common";
	/**
	 * 通过序列获取最新的id
	 */
	public static function getNewId($tablename = "seq_common") {
		$id = sql_fetch ( "SELECT seq_common.nextVal newid FROM dual", 'newid' );
		return $id;
	}
}

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注