Oracle版本: Oracle Database 12c企业版12.2.0.1.0版-64位生产版本
查询:
ALTER TABLE "TAB" ADD "XVAR" CLOB CHECK ("XVAR" IS JSON);
我不太明白这句话有什么问题。有人可以指出这是什么问题吗?
据我了解,默认情况下不需要命名约束。甚至命名约束也无济于事。
我正在尝试通过go-oci8 driver在数据库上运行查询。
执行相同操作的代码是:
package main
import (
"database/sql"
"fmt"
_ "github.com/mattn/go-oci8"
)
func main() {
db, err := sql.Open("oci8", "<connectionString>")
if err != nil {
fmt.Println(err)
return
}
defer func(db *sql.DB) {
if err := db.Close(); err != nil{
fmt.Println(err)
}
}(db)
_sql := `ALTER TABLE "TAB" ADD "XVAR" CLOB CHECK ("XVAR" IS JSON);`
result, err := db.Exec(_sql)
if err != nil {
fmt.Println("Issue with altering table...")
fmt.Println(err)
return
}
fmt.Println(result.RowsAffected())
}
输出:
Issue with altering table...
ORA-01735: invalid ALTER TABLE option
我的查询有问题吗?还是我用来执行相同操作的第三方驱动程序似乎有问题?
答案 0 :(得分:2)
在ALTER
语句的末尾删除分号:
_sql := `ALTER TABLE "TAB" ADD "XVAR" CLOB CHECK ("XVAR" IS JSON)`
分号是客户端语句分隔符,不是实际语句的一部分(对于SQL; PL / SQL是另一回事)。
通过动态SQL(而不是堆栈)演示问题并解决,但是问题和解决方案相同:
BEGIN
EXECUTE IMMEDIATE 'ALTER TABLE "TAB" ADD "XVAR" CLOB CHECK ("XVAR" IS JSON);';
END;
/
ORA-01735: invalid ALTER TABLE option
ORA-06512: at line 2
BEGIN
EXECUTE IMMEDIATE 'ALTER TABLE "TAB" ADD "XVAR" CLOB CHECK ("XVAR" IS JSON)';
END;
/
Table altered.