-
-
chenz 数据达人Lv4
发表于2020-12-31 17:17
悬赏100
已解决
楼主
后台表T有四个字段,分别是:ID VARCHAR2 DEFAULT SYS_GUID() NOT NULL,A VARCHAR2 NOT NULL,
B VARCHAR2 NOT NULL,
C DATE DEFAULT SYSDATE NOT NULL;
手动INSERT T(A,B),ID 和C可以自动获取到默认值,但是ABI中只回填A,B两个字段会报错:ID不允许为空。
我们猜想可能是应用程序在拼SQL的时候默认把ID 赋值NULL,C 也赋值了NULL,烦请老师指点。
B VARCHAR2 NOT NULL,
C DATE DEFAULT SYSDATE NOT NULL;
手动INSERT T(A,B),ID 和C可以自动获取到默认值,但是ABI中只回填A,B两个字段会报错:ID不允许为空。
我们猜想可能是应用程序在拼SQL的时候默认把ID 赋值NULL,C 也赋值了NULL,烦请老师指点。
最佳答案
关贴总结:
在回填的时候,直接写回填值;之前想实现前台不用回填默认值的字段,只回填需要填写的说明。
感谢楼主分享
在回填的时候,直接写回填值;之前想实现前台不用回填默认值的字段,只回填需要填写的说明。
感谢楼主分享
15个回答
报表的结果页插入数据时会指定主键,建表时同理,检查一下主键字段是否在insert的内容中
杨思怡 发表于 2020-12-31 17:20
报表的结果页插入数据时会指定主键,建表时同理,检查一下主键字段是否在insert的内容中 ...
ID就是主键,后台表设置了默认值的,不需要再insert数据。
你的意思是不是后台表ID为主键,应用拼接sql的时候就必须要insert ID值?
chenz 发表于 2020-12-31 17:25
ID就是主键,后台表设置了默认值的,不需要再insert数据。
你的意思是不是后台表ID为主键,应用拼接sql的 ...
嗯嗯,是这个意思
chenz 发表于 2020-12-31 17:25
ID就是主键,后台表设置了默认值的,不需要再insert数据。
你的意思是不是后台表ID为主键,应用拼接sql的 ...
id默认值是设置过自增吗
chenz 发表于 2020-12-31 17:29
应用拼接sql不指定ID值,数据库自动赋值
如果是后台插入的话可以不指定id,但是如果是从报表内回填的话是需要指定一下的
杨思怡 发表于 2020-12-31 17:31
如果是后台插入的话可以不指定id,但是如果是从报表内回填的话是需要指定一下的 ...
报表回填的时候可不可以把ID默认为SYS_GUID(),或者说ABI有类似的生成唯一标识的函数
chenz 发表于 2020-12-31 17:35
报表回填的时候可不可以把ID默认为SYS_GUID(),或者说ABI有类似的生成唯一标识的函数 ...
可以,可以在表元的表达式内写函数自定义生成
chenz 发表于 2020-12-31 17:35
报表回填的时候可不可以把ID默认为SYS_GUID(),或者说ABI有类似的生成唯一标识的函数 ...
就是需要前台生成自动生成主键id是吗?
杨思怡 发表于 2020-12-31 17:38
就是需要前台生成自动生成主键id是吗?
数据库是Oracle,ID不需要区分先后,也不用比较大小,只是判断唯一,所以不需要自增,只需要随机数,所以用的是oracle的sys_guid()。理论上讲应用不应该强制去写主键字段,如果主键字段后台没有设置好自己会抛出错误,用户可以自愿选择是否写入主键值,也可以选择主键值是通过后台还是前台写入,强制从前台写入主键值感觉不是很灵活。当然,如果应用强制要写入主键值,那当前场景就是要前台应用写入随机的ID值。