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;
}