Redian新闻
>
再问大虾:对那些违反contraint的数据是如何处理的?
avatar
再问大虾:对那些违反contraint的数据是如何处理的?# Database - 数据库
t*o
1
对那些违反contraint的数据是如何处理的? 比如, 我insert的时候, 有一个column
的data 违反了某一栏的unique条件, 那么这整个insert的data在执行失败后就丢失了
?(好像LOG里的东西,不能直接读吧)。
按照我的理解, 有2中方案:
1.front-end, programming side做好data validation,
2.先把这些data写进一个temp table里。
想问问大虾们都是咋处理的? 是不是写个啥高级点的sp, 或者trigger?
avatar
c*d
2

column
正确
1和2都可以,不过不很明白你的业务要求,这些不符合要求的记录也要保存下来?

【在 t***o 的大作中提到】
: 对那些违反contraint的数据是如何处理的? 比如, 我insert的时候, 有一个column
: 的data 违反了某一栏的unique条件, 那么这整个insert的data在执行失败后就丢失了
: ?(好像LOG里的东西,不能直接读吧)。
: 按照我的理解, 有2中方案:
: 1.front-end, programming side做好data validation,
: 2.先把这些data写进一个temp table里。
: 想问问大虾们都是咋处理的? 是不是写个啥高级点的sp, 或者trigger?

avatar
B*g
3
2. In application
try
{
}
catch {}

【在 c*****d 的大作中提到】
:
: column
: 正确
: 1和2都可以,不过不很明白你的业务要求,这些不符合要求的记录也要保存下来?

avatar
w*r
4
if it is transaction based data, the commit/rollback should be used in
transaction to avoid dirty data in SQL blocks and exceptions should be throw
out and handled by application.
If it is ETL / ELT process, the data validation should be handled in the
loading logic and branched to error table before the data reached the load
utility stage. Usually if you use load utility error handling table, it will
be much slower than a customized error handling table both loaded by load
utility.

column

【在 t***o 的大作中提到】
: 对那些违反contraint的数据是如何处理的? 比如, 我insert的时候, 有一个column
: 的data 违反了某一栏的unique条件, 那么这整个insert的data在执行失败后就丢失了
: ?(好像LOG里的东西,不能直接读吧)。
: 按照我的理解, 有2中方案:
: 1.front-end, programming side做好data validation,
: 2.先把这些data写进一个temp table里。
: 想问问大虾们都是咋处理的? 是不是写个啥高级点的sp, 或者trigger?

avatar
t*o
5
我们这里的问题是, insert里有一个column的记录, 是用一个sp产生的。。。但是,
有时候,这个新产生的值不unique,所以, 被插进table的时候, 就会被报错, 但是
, 我不想都掉那个data, 只想在run一下那个sp,在产生一个新的。。。

【在 c*****d 的大作中提到】
:
: column
: 正确
: 1和2都可以,不过不很明白你的业务要求,这些不符合要求的记录也要保存下来?

avatar
B*g
6
how do you generate this value?

【在 t***o 的大作中提到】
: 我们这里的问题是, insert里有一个column的记录, 是用一个sp产生的。。。但是,
: 有时候,这个新产生的值不unique,所以, 被插进table的时候, 就会被报错, 但是
: , 我不想都掉那个data, 只想在run一下那个sp,在产生一个新的。。。

avatar
t*o
7
大虾, 你讲的有点高深。。。窝不太懂

throw
will

【在 w*r 的大作中提到】
: if it is transaction based data, the commit/rollback should be used in
: transaction to avoid dirty data in SQL blocks and exceptions should be throw
: out and handled by application.
: If it is ETL / ELT process, the data validation should be handled in the
: loading logic and branched to error table before the data reached the load
: utility stage. Usually if you use load utility error handling table, it will
: be much slower than a customized error handling table both loaded by load
: utility.
:
: column

avatar
t*o
8
我们公司用的文物级的一个叫Goldmine的老database. 我执行的时候就是这样
exec master..xp_gmnewrecid 'Master', @recidval OUTPUT
select @recidval
这个xp_gmnewrecid, call 了一个dll文件, 那个文件我就看不见了。。。(看图)
所以, 我能做的, 就是保证这个recid不是duplicated的。

【在 B*****g 的大作中提到】
: how do you generate this value?
avatar
w*r
9
okey, the solution is still use application to throw your data into a error
file/table depends on your
environment. And then use a batch to process those error data. When I say
batch, I means a separated
application which takes that error file / table when system is not busy and
try the insert on after
another in order again.
Your issue sounds to me like when you get this recidval, due to the parallel
nature of the application,
you are not guaranteed to have a atomic transaction to get a unique

【在 t***o 的大作中提到】
: 我们公司用的文物级的一个叫Goldmine的老database. 我执行的时候就是这样
: exec master..xp_gmnewrecid 'Master', @recidval OUTPUT
: select @recidval
: 这个xp_gmnewrecid, call 了一个dll文件, 那个文件我就看不见了。。。(看图)
: 所以, 我能做的, 就是保证这个recid不是duplicated的。

avatar
t*o
10
谢谢。。。我去试试(我可能还需要补一些功课才能学会, 不是DB出身。。。)

error
and
parallel

【在 w*r 的大作中提到】
: okey, the solution is still use application to throw your data into a error
: file/table depends on your
: environment. And then use a batch to process those error data. When I say
: batch, I means a separated
: application which takes that error file / table when system is not busy and
: try the insert on after
: another in order again.
: Your issue sounds to me like when you get this recidval, due to the parallel
: nature of the application,
: you are not guaranteed to have a atomic transaction to get a unique

avatar
B*g
11
lvIsInsertSucess = "F"
while (lvIsInsertSucess == "F")
{
try
{
get id
insert
lvIsInsertSucess = "T"
}
catch
{
do nothing
}
}

【在 t***o 的大作中提到】
: 谢谢。。。我去试试(我可能还需要补一些功课才能学会, 不是DB出身。。。)
:
: error
: and
: parallel

avatar
B*g
12
赞。不会DB的搞DB,会DB的在灌水

【在 t***o 的大作中提到】
: 谢谢。。。我去试试(我可能还需要补一些功课才能学会, 不是DB出身。。。)
:
: error
: and
: parallel

avatar
j*n
13
re

【在 B*****g 的大作中提到】
: 赞。不会DB的搞DB,会DB的在灌水
avatar
w*r
14
不要这样,会无端端得给server带来无数request, flood server只会降低拿到unique
key的probability

【在 B*****g 的大作中提到】
: lvIsInsertSucess = "F"
: while (lvIsInsertSucess == "F")
: {
: try
: {
: get id
: insert
: lvIsInsertSucess = "T"
: }
: catch

avatar
B*g
15
我觉得lz的系统肯定没几个人用,这种dup也就是偶尔发生,要是常年发生,系统早死
了。

unique

【在 w*r 的大作中提到】
: 不要这样,会无端端得给server带来无数request, flood server只会降低拿到unique
: key的probability

avatar
w*r
16
那也不能用这样的infinite look来搞,本来搞不死的系统就给你这样搞死了

【在 B*****g 的大作中提到】
: 我觉得lz的系统肯定没几个人用,这种dup也就是偶尔发生,要是常年发生,系统早死
: 了。
:
: unique

avatar
B*g
17
呵呵,改一下.
InsertCount = 0
while InsertCount < 5)
{
try
{
get id
insert
InsertCount = 5
}
catch
{
InsertCount ++

if(InsertCount == 5)
{
print("rp也太差了吧")
}
}
}

早死

【在 w*r 的大作中提到】
: 那也不能用这样的infinite look来搞,本来搞不死的系统就给你这样搞死了
avatar
w*r
18
中!
这成

【在 B*****g 的大作中提到】
: 呵呵,改一下.
: InsertCount = 0
: while InsertCount < 5)
: {
: try
: {
: get id
: insert
: InsertCount = 5
: }

avatar
t*o
19
不要这样自责吗。。。哈哈。。。
我学的很杂,某日听说做DB能挣大钱, 就打算削尖了头, 像DB靠拢。。。特别是看到
你老人家,一遍灌水, 一边数钱, 更坚定了我往死里学的决心。。。。
谢谢Beijing 和Wyr.

【在 B*****g 的大作中提到】
: 赞。不会DB的搞DB,会DB的在灌水
avatar
B*g
20
有啥可数的,俺挣的只有大牛门的一半都不到

【在 t***o 的大作中提到】
: 不要这样自责吗。。。哈哈。。。
: 我学的很杂,某日听说做DB能挣大钱, 就打算削尖了头, 像DB靠拢。。。特别是看到
: 你老人家,一遍灌水, 一边数钱, 更坚定了我往死里学的决心。。。。
: 谢谢Beijing 和Wyr.

avatar
w*r
21
可以了,不少了,DB上没有什么大牛,DB的真正的革新还没有实际应用的出现呢,只是
在理论上天天玩虚的。所以现在的都不是什么牛,最多是肥猪和瘦猪之间的差别

【在 B*****g 的大作中提到】
: 有啥可数的,俺挣的只有大牛门的一半都不到
avatar
B*g
22
我不愿意当瘦猪

【在 w*r 的大作中提到】
: 可以了,不少了,DB上没有什么大牛,DB的真正的革新还没有实际应用的出现呢,只是
: 在理论上天天玩虚的。所以现在的都不是什么牛,最多是肥猪和瘦猪之间的差别

avatar
t*o
23
那给咱科普一下DB最新的方向。。。让咱早早看到了, 也好朝着麦加的方向前进吗。
。。。

【在 w*r 的大作中提到】
: 可以了,不少了,DB上没有什么大牛,DB的真正的革新还没有实际应用的出现呢,只是
: 在理论上天天玩虚的。所以现在的都不是什么牛,最多是肥猪和瘦猪之间的差别

avatar
B*g
24
As words from a big java niu: "db is dying, all java later"

【在 t***o 的大作中提到】
: 那给咱科普一下DB最新的方向。。。让咱早早看到了, 也好朝着麦加的方向前进吗。
: 。。。

avatar
w*r
25
这位牛是谁啊?

【在 B*****g 的大作中提到】
: As words from a big java niu: "db is dying, all java later"
avatar
B*g
26
好虫

【在 w*r 的大作中提到】
: 这位牛是谁啊?
avatar
j*n
27
key BDA earns 200K+, so ....

【在 B*****g 的大作中提到】
: 有啥可数的,俺挣的只有大牛门的一半都不到
avatar
t*o
28
我倒。。。java programmer已经多的像蝗虫一样。。。。
北京,麻烦再给看一些这个oracle connect 的问题, 那个SID填啥呀?或者,有没有
办法不建立connection,就用里面带的sample database 学习呀?

【在 B*****g 的大作中提到】
: As words from a big java niu: "db is dying, all java later"
avatar
w*r
29
别理好虫,偶就是DB/JAVA两手抓,两手都要硬

【在 B*****g 的大作中提到】
: 好虫
avatar
B*g
30
换成service_name.

【在 t***o 的大作中提到】
: 我倒。。。java programmer已经多的像蝗虫一样。。。。
: 北京,麻烦再给看一些这个oracle connect 的问题, 那个SID填啥呀?或者,有没有
: 办法不建立connection,就用里面带的sample database 学习呀?

avatar
B*g
31
俺java硬不起来了。

【在 w*r 的大作中提到】
: 别理好虫,偶就是DB/JAVA两手抓,两手都要硬
avatar
j*n
32
I have no java at all :)

【在 B*****g 的大作中提到】
: 俺java硬不起来了。
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。