php Oracle 生成批量插入或更新的 SQL
// 生成批量插入的 SQL 语句 @
function generateBatchUpdateSQL($table, $update, $where) {
$update_sql = '';
foreach ($update as $k=>$v) {
if(stristr(strtolower($v),'to_date')){
$update_sql .= $k.'='.$v .",";
}else{
// echo gettype(23.52);
switch (gettype($v)) {
case 'integer':
case 'boolean':
$update_sql .= $k.'='. $v .",";
break;
case 'string':
$update_sql .= $k.'='."'". $v ."',";
break;
case 'NULL':
$update_sql .= $k.'='."null ,";
break;
case 'double':
$update_sql .= $k.'='. floatval($v) .",";
break;
default:
break;
}
}
}
$where_sql = "";
foreach ($where as $k=>$v) {
// echo gettype(23.52);
switch (gettype($v)) {
case 'integer':
case 'boolean':
$where_sql .= $k.'='. $v ." and ";
break;
case 'string':
$where_sql .= $k.'='."'". $v ."' and ";
break;
case 'NULL':
$where_sql .= $k.'='."null and ";
break;
case 'double':
$where_sql .= $k.'='.floatval($v)." and ";
break;
default:
break;
}
}
$where_sql .= ';';
$where_sql = str_replace("and ;", "", $where_sql);
$update_sql .= ';';
$update_sql = str_replace(",;", "", $update_sql);
$str = sprintf("UPDATE %s SET %s WHERE %s", $table, $update_sql, $where_sql);
return $str;
}
// 生成批量插入的 SQL 语句 @
function generateBatchInsertSQL($table, $data) {
$data = isset($data[0])?$data:[$data];
$key = implode(',', array_keys($data[0]));
$sql = "INSERT INTO $table ( $key ) ";
$values = [];
$i=0;
foreach ($data as $row) {
$str = "select ";
foreach ($row as $value) {
// 时间参数直接保留 可以只能保留很多Oracle函数,这里只是举例说明
if(stristr(strtolower($value),'to_date')){
$str .= $value .",";
}else{
$str .= "'". $value ."',";
}
}
$i++;
//空值处理
if(trim($str) == 'select'){
continue;
}
if(count($data)>$i){
$str .= " from dual union all";
}else{
$str .= " from dual ";
}
$str = str_replace(", from", " from", $str);
$values[] = $str;
}
if(empty($values)){
return "select * from dual";
}
$sql .= implode(" ", $values);
return $sql;
}
