GORM Oracle Driver
Description
GORM Oracle driver for connect Oracle DB and Manage Oracle DB, Based on CengSin/oracle
and sijms/go-ora (pure go oracle client),not recommended for use in a production environment.
Required dependency Install
- Oracle
11g
+ (v1.6.3
and earlier versions support only 12c
+)
- Golang
v1.6.1
: go1.16
+
v1.6.2
: go1.18
+
- gorm
1.24.0
+
Quick Start
How to install
go get -d github.com/godoes/gorm-oracle
Usage
package main
import (
oracle "github.com/godoes/gorm-oracle"
"gorm.io/gorm"
)
func main() {
options := map[string]string{
"CONNECTION TIMEOUT": "90",
"LANGUAGE": "SIMPLIFIED CHINESE",
"TERRITORY": "CHINA",
"SSL": "false",
}
url := oracle.BuildUrl("127.0.0.1", "1521", "service", "user", "password", options)
dialector := oracle.New(oracle.Config{
DSN: url,
IgnoreCase: false,
NamingCaseSensitive: true,
VarcharSizeIsCharLength: true,
RowNumberAliasForOracle11: "ROW_NUM",
})
db, err := gorm.Open(dialector, &gorm.Config{
SkipDefaultTransaction: true,
DisableForeignKeyConstraintWhenMigrating: true,
NamingStrategy: schema.NamingStrategy{
NoLowerCase: true,
IdentifierMaxLength: 30,
},
PrepareStmt: false,
CreateBatchSize: 50,
})
if err != nil {
}
if sqlDB, err := db.DB(); err == nil {
_, _ = oracle.AddSessionParams(sqlDB, map[string]string{
"TIME_ZONE": "+08:00",
"NLS_DATE_FORMAT": "YYYY-MM-DD",
"NLS_TIME_FORMAT": "HH24:MI:SSXFF",
"NLS_TIMESTAMP_FORMAT": "YYYY-MM-DD HH24:MI:SSXFF",
"NLS_TIME_TZ_FORMAT": "HH24:MI:SS.FF TZR",
"NLS_TIMESTAMP_TZ_FORMAT": "YYYY-MM-DD HH24:MI:SSXFF TZR",
})
}
}
Questions
ORA-01000: 超出打开游标的最大数
ORA-00604: 递归 SQL 级别 1 出现错误
ORA-01000: 超出打开游标的最大数
show parameter OPEN_CURSORS;
alter system set OPEN_CURSORS = 1000;
commit;
ORA-01002: 提取违反顺序
如果重复执行同一查询,第一次查询成功,第二次报 ORA-01002
错误,可能是因为启用了 PrepareStmt
,关闭此配置即可。
推荐配置:
&gorm.Config{
SkipDefaultTransaction: true,
DisableForeignKeyConstraintWhenMigrating: true,
NamingStrategy: schema.NamingStrategy{
NoLowerCase: true,
IdentifierMaxLength: 30,
},
PrepareStmt: false,
CreateBatchSize: 50,
}
Contributors
LICENSE
MIT license