Skip to content

Commit 63b93a3

Browse files
committed
✨ 添加批量设置和移除会话参数工具函数
- AddSessionParams setting database connection session parameters - DelSessionParams remove session parameters Signed-off-by: liutianqi <[email protected]>
1 parent 1c7e78f commit 63b93a3

File tree

2 files changed

+88
-0
lines changed

2 files changed

+88
-0
lines changed

oracle.go

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,44 @@ func GetStringExpr(value string, quotes ...bool) clause.Expr {
8282
return gorm.Expr(value)
8383
}
8484

85+
// AddSessionParams setting database connection session parameters
86+
func AddSessionParams(db *sql.DB, params map[string]string) (keys []string, err error) {
87+
if db == nil {
88+
return
89+
}
90+
if _, ok := db.Driver().(*go_ora.OracleDriver); !ok {
91+
return
92+
}
93+
94+
for key, value := range params {
95+
if key == "" || value == "" {
96+
continue
97+
}
98+
if err = go_ora.AddSessionParam(db, key, value); err != nil {
99+
return
100+
}
101+
keys = append(keys, key)
102+
}
103+
return
104+
}
105+
106+
// DelSessionParams remove session parameters
107+
func DelSessionParams(db *sql.DB, keys []string) {
108+
if db == nil {
109+
return
110+
}
111+
if _, ok := db.Driver().(*go_ora.OracleDriver); !ok {
112+
return
113+
}
114+
115+
for _, key := range keys {
116+
if key == "" {
117+
continue
118+
}
119+
go_ora.DelSessionParam(db, key)
120+
}
121+
}
122+
85123
func convertCustomType(val interface{}) interface{} {
86124
rv := reflect.ValueOf(val)
87125
ri := rv.Interface()

oracle_test.go

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package oracle
22

33
import (
4+
"database/sql"
45
"log"
56
"os"
67
"reflect"
@@ -111,3 +112,52 @@ func openTestConnection(ignoreCase, namingCase bool) (db *gorm.DB, err error) {
111112
}
112113
return
113114
}
115+
116+
func TestAddSessionParams(t *testing.T) {
117+
db, err := openTestConnection(true, false)
118+
if err != nil {
119+
t.Fatal(err)
120+
}
121+
var sqlDB *sql.DB
122+
if sqlDB, err = db.DB(); err != nil {
123+
t.Fatal(err)
124+
}
125+
type args struct {
126+
params map[string]string
127+
}
128+
tests := []struct {
129+
name string
130+
args args
131+
}{
132+
{name: "TimeParams", args: args{params: map[string]string{
133+
"TIME_ZONE": "+08:00", // alter session set TIME_ZONE = '+08:00';
134+
"NLS_DATE_FORMAT": "YYYY-MM-DD", // alter session set NLS_DATE_FORMAT = 'YYYY-MM-DD';
135+
"NLS_TIME_FORMAT": "HH24:MI:SSXFF", // alter session set NLS_TIME_FORMAT = 'HH24:MI:SS.FF3';
136+
"NLS_TIMESTAMP_FORMAT": "YYYY-MM-DD HH24:MI:SSXFF", // alter session set NLS_TIMESTAMP_FORMAT = 'YYYY-MM-DD HH24:MI:SS.FF3';
137+
"NLS_TIME_TZ_FORMAT": "HH24:MI:SS.FF TZR", // alter session set NLS_TIME_TZ_FORMAT = 'HH24:MI:SS.FF3 TZR';
138+
"NLS_TIMESTAMP_TZ_FORMAT": "YYYY-MM-DD HH24:MI:SSXFF TZR", // alter session set NLS_TIMESTAMP_TZ_FORMAT = 'YYYY-MM-DD HH24:MI:SS.FF3 TZR';
139+
}}},
140+
}
141+
for _, tt := range tests {
142+
t.Run(tt.name, func(t *testing.T) {
143+
//queryTime := `SELECT SYSDATE FROM DUAL`
144+
queryTime := `SELECT CAST(SYSDATE AS VARCHAR(30)) AS D FROM DUAL`
145+
var timeStr string
146+
if err = db.Raw(queryTime).Row().Scan(&timeStr); err != nil {
147+
t.Fatal(err)
148+
}
149+
t.Logf("SYSDATE 1: %s", timeStr)
150+
151+
var keys []string
152+
if keys, err = AddSessionParams(sqlDB, tt.args.params); err != nil {
153+
t.Fatalf("AddSessionParams() error = %v", err)
154+
}
155+
if err = db.Raw(queryTime).Row().Scan(&timeStr); err != nil {
156+
t.Fatal(err)
157+
}
158+
defer DelSessionParams(sqlDB, keys)
159+
t.Logf("SYSDATE 2: %s", timeStr)
160+
t.Logf("keys: %#v", keys)
161+
})
162+
}
163+
}

0 commit comments

Comments
 (0)