暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

创建表时为何会提示“[-2670]:对象[ID]默认约束表达式无效”?

69



概述

有小伙伴提问题[-2670
]什么原因,想着好记性不如烂笔头,也为了让更多不了解的小伙伴知晓,把这个问题记录下来分享给大家。

问题现象

创建以下SQL
时提示[-2670]:对象[ID]DEFAULT
约束表达式无效,如下所示:

SQL> CREATE TABLE "EMPTEST"
2   (
3   "ID" NUMBER(11,0DEFAULT EMPTEST_SEQ.NEXTVAL NOT NULL,
4   "NAME" VARCHAR2(64NOT NULL,
5   NOT CLUSTER PRIMARY KEY("ID")) ;
CREATE TABLE "EMPTEST"
(
"ID" NUMBER(11,0DEFAULT EMPTEST_SEQ.NEXTVAL NOT NULL,
"NAME" VARCHAR2(64NOTNULL,
NOT CLUSTER PRIMARY KEY("ID")) ;
第5 行附近出现错误[-2670]:对象[ID]DEFAULT约束表达式无效.
已用时间: 44.809(毫秒). 执行号:0.
SQL>

错误定位在第 5 行附近,提示默认约束表达式无效。

问题分析

通过以下查询确认关键信息:

-- 序列所有者验证
SELECT OWNER, OBJECT_NAME FROM DBA_OBJECTS WHERE OBJECT_NAME='EMPTEST_SEQ';
-- 当前用户验证
SELECT USER;

  • 查询对象与用户信息
SQL> SELECT OWNER,OBJECT_NAME from DBA_OBJECTS where OBJECT_NAME ='EMPTEST_SEQ';

行号       OWNER    OBJECT_NAME
---------- -------- -----------
1          DBDOCTOR EMPTEST_SEQ

已用时间: 43.125(毫秒). 执行号:12319901.
SQL>
SQL> select user;

行号       USER
---------- ------
1          SYSDBA

已用时间: 41.441(毫秒). 执行号:12319902.
SQL>

结果显示:

  • EMPTEST_SEQ
    属于DBDOCTOR
    用户
  • 当前操作用户为SYSDBA

核心问题:DM 默认采用严格的权限隔离机制,用户只能直接访问自己拥有的对象。

解决方案

方法一:在后面的版本中可以使用SET SCHEMA
方式切换 schema。

SQL> SET SCHEMA DBDOCTOR;
操作已执行
已用时间: 42.462(毫秒). 执行号:0.
SQL> CREATE TABLE "EMPTEST"
2   (
3   "ID" NUMBER(11,0) DEFAULT EMPTEST_SEQ.NEXTVAL NOT NULL,
4   "NAME" VARCHAR2(64) NOT NULL,
5   NOT CLUSTER PRIMARY KEY("ID")) ;
操作已执行
已用时间: 51.425(毫秒). 执行号:12319904.
SQL>

适用场景:需要长期在多个SCHEMA
间操作的场景,推荐使用此方法。

方法二:显式指定SCHEMA
前缀

--删除上一次测试表
SQL> drop table EMPTEST;
操作已执行
已用时间: 84.487(毫秒). 执行号:12319906.
SQL> CREATE TABLE DBDOCTOR."EMPTEST"
2   (
3   "ID" NUMBER(11,0DEFAULT DBDOCTOR.EMPTEST_SEQ.NEXTVAL NOT NULL,
4   "NAME" VARCHAR2(64NOT NULL,
5   NOT CLUSTER PRIMARY KEY("ID")) ;
操作已执行
已用时间: 53.653(毫秒). 执行号:12319907.
SQL>

适用场景:临时访问其他SCHEMA
对象时使用。

方法三:切换登录用户

-- 使用DBDOCTOR用户登录
CONNECT DBDOCTOR/xxx@localhost:5236

-- 直接创建表
CREATE TABLE"EMPTEST"(
"ID" NUMBER(11,0DEFAULT EMPTEST_SEQ.NEXTVAL NOT NULL,
"NAME" VARCHAR2(64NOT NULL,
  PRIMARY KEY ("ID")
);

适用场景:最直接的解决方案,符合最小权限原则。





往期分享

安装部署

1.分享一个以前搭建主备集群遇到的一个路径乱码案例
2.给大家分享如何标准化部署达梦单机环境
3.DM 达梦数据库中大写敏感介绍分享
4.达梦 DSC 集群+DW 备库部署实战:高可用架构搭建指南

数据迁移

1.分享工作中数据迁移的实用技巧与方法
2.Oracle 迁移 DM 数据库实践
3.SQLark 迁移实践分享(oracle-达梦数据库)
4.年过完了,SQLark 3.3 发版了!连接分组,断点续迁,顺滑建表,数据筛选,导出结构这些都有!)

SQL 调优

1.DM 传统行业 SQL 优化案例分享
2.DM 数据库 SQL 优化案例分享
3.如何查询 DM 数据库缓存执行计划与清理
4.使用 ob_tools 包收集分析 oceanbase 数据库 oracle 租户缓慢 sql 语句
5.使用 format_obproxy_digest_log 工具分析 obproxy 网络层耗时 SQL
6.DM 数据库回表优化案例
7.SQL 优化案例分享
8.DM SQL 关联列 like 优化案例
9.达梦数据库 SQL 关联列 like 使用 hint 方式优化案例

工具使用与日常处理

1.DataGrip 访问国产数据库_datagrip 连接国产数据库
2.如何使用 dbeaver 连接达梦数据库
3.更新大字段提示-2201 无效的对象问题
4.DM7 读写分离部署问题总结
5.DM7 读写分离集群备库数据不同步问题处理
6.达梦数据库 DISQL 工具部署及使用技巧
7.达梦数据库日常巡检方法分享
8.如何查询达梦数据库缓存执行计划与清理
9.达梦数据库运维工具分享
10.东方通中间件环境中如何部署达梦企业管理工具(DEM)
11.达梦 dmdbchk 使用秘籍:掌握 DM 数据库检查工具的功能与参数
12.ET 工具快速上手:从入门到精通的使用步骤
13.达梦数据库 SQL 日志详解:关键概念、功能及实践方法
14.搞懂达梦数据库 SQL 日志使用延伸,这些方法超实用!
15.DM 数据库守护集群入门指南:带你走进数据守护的世界

游玩攻略

1.邂逅高明,打卡小众景点
2.别瞎逛北京了!这份攻略带你玩出京城新高度




文章转载自国产数据库学堂,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论