| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- package functions
-
- import (
- "fmt"
-
- "github.com/jmoiron/sqlx"
- )
-
- // ExecuteDDL 执行DDL语句(创建、删除、更新表等)
- func ExecuteDDL(db *sqlx.DB, ddlSQL string) error {
-
- if ddlSQL == "" {
- return fmt.Errorf("DDL SQL statement is empty")
- }
-
- // 执行DDL语句
- _, err := db.Exec(ddlSQL)
- if err != nil {
- return fmt.Errorf("failed to execute DDL: %v", err)
- }
-
- return nil
- }
-
- // ExecuteDDLWithTx 在事务中执行DDL语句
- func ExecuteDDLWithTx(db *sqlx.DB, ddlSQL string) error {
-
- if ddlSQL == "" {
- return fmt.Errorf("DDL SQL statement is empty")
- }
-
- // 开始事务
- tx, err := db.Begin()
- if err != nil {
- return fmt.Errorf("failed to begin transaction: %v", err)
- }
-
- // 执行DDL语句
- _, err = tx.Exec(ddlSQL)
- if err != nil {
- // 回滚事务
- tx.Rollback()
- return fmt.Errorf("failed to execute DDL in transaction: %v", err)
- }
-
- // 提交事务
- if err := tx.Commit(); err != nil {
- return fmt.Errorf("failed to commit transaction: %v", err)
- }
-
- return nil
- }
-
- // ExecuteMultipleDDL 执行多个DDL语句
- func ExecuteMultipleDDL(db *sqlx.DB, ddlSQLs []string) error {
-
- if len(ddlSQLs) == 0 {
- return fmt.Errorf("DDL SQL statements are empty")
- }
-
- // 开始事务
- tx, err := db.Begin()
- if err != nil {
- return fmt.Errorf("failed to begin transaction: %v", err)
- }
-
- // 依次执行所有DDL语句
- for i, ddlSQL := range ddlSQLs {
- if ddlSQL == "" {
- tx.Rollback()
- return fmt.Errorf("DDL SQL statement at index %d is empty", i)
- }
-
- _, err = tx.Exec(ddlSQL)
- if err != nil {
- tx.Rollback()
- return fmt.Errorf("failed to execute DDL at index %d: %v", i, err)
- }
- }
-
- // 提交事务
- if err := tx.Commit(); err != nil {
- return fmt.Errorf("failed to commit transaction: %v", err)
- }
-
- return nil
- }
|