楼主: yulihua49

[讨论] 侃一下关于程序的“柔性”

[复制链接]
论坛徽章:
14
2009新春纪念徽章
日期:2009-01-04 14:52:28沸羊羊
日期:2015-03-04 14:51:52优秀写手
日期:2014-03-14 06:00:13马上有房
日期:2014-02-18 16:42:022014年新春福章
日期:2014-02-18 16:42:022013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-09 18:08:15蜘蛛蛋
日期:2012-06-27 21:08:142012新春纪念徽章
日期:2012-01-04 11:53:29ITPUB十周年纪念徽章
日期:2011-11-01 16:23:26
251#
 楼主| 发表于 2025-10-17 20:32 | 只看该作者
本帖最后由 yulihua49 于 2025-10-17 20:51 编辑
newkid 发表于 2025-10-16 21:46
insert ... select 是不支持returning子句的。merge直到23ai才支持returning。如果是pl/sql它会返回一个数 ...

insert into  tablename /*+  ignore_row_on_dupkey_index */(....) values (......) where NOT EXIST  returning   ROWID into :ROWID;
支持不支持?11G。
这是一个数组插入,一个大数组,一部分插入了,一部分没有,怎么知道哪个插入了,哪个没有?

使用道具 举报

回复
论坛徽章:
520
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
252#
发表于 2025-10-17 22:05 | 只看该作者
yulihua49 发表于 2025-10-17 20:32
insert into  tablename /*+  ignore_row_on_dupkey_index */(....) values (......) where NOT EXIST  re ...

把WHERE NOT EXISTS去掉就行,前面那个HINT就是为了忽略重复。
假设你知道哪些插入了,哪些没有,这个信息对你有什么帮助?接下来要用它做什么?

使用道具 举报

回复
论坛徽章:
14
2009新春纪念徽章
日期:2009-01-04 14:52:28沸羊羊
日期:2015-03-04 14:51:52优秀写手
日期:2014-03-14 06:00:13马上有房
日期:2014-02-18 16:42:022014年新春福章
日期:2014-02-18 16:42:022013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-09 18:08:15蜘蛛蛋
日期:2012-06-27 21:08:142012新春纪念徽章
日期:2012-01-04 11:53:29ITPUB十周年纪念徽章
日期:2011-11-01 16:23:26
253#
 楼主| 发表于 2025-10-18 19:33 | 只看该作者
newkid 发表于 2025-10-17 22:05
把WHERE NOT EXISTS去掉就行,前面那个HINT就是为了忽略重复。假设你知道哪些插入了,哪些没有,这个信息对 ...

我怎么知道哪些插入了,哪些没有?就是靠ROWID呀!有ROWID的就是插入了。

使用道具 举报

回复
论坛徽章:
14
2009新春纪念徽章
日期:2009-01-04 14:52:28沸羊羊
日期:2015-03-04 14:51:52优秀写手
日期:2014-03-14 06:00:13马上有房
日期:2014-02-18 16:42:022014年新春福章
日期:2014-02-18 16:42:022013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-09 18:08:15蜘蛛蛋
日期:2012-06-27 21:08:142012新春纪念徽章
日期:2012-01-04 11:53:29ITPUB十周年纪念徽章
日期:2011-11-01 16:23:26
254#
 楼主| 发表于 2025-10-18 19:36 | 只看该作者
newkid 发表于 2025-10-17 22:05
把WHERE NOT EXISTS去掉就行,前面那个HINT就是为了忽略重复。假设你知道哪些插入了,哪些没有,这个信息对 ...

有没有:
replace into  tablename (。。。。)values(。。。。)
语句?用于没有的插入,有的update。

使用道具 举报

回复
论坛徽章:
520
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
255#
发表于 2025-10-19 03:05 | 只看该作者
本帖最后由 newkid 于 2025-10-19 03:12 编辑
newkid 发表于 2025-10-17 22:05
把WHERE NOT EXISTS去掉就行,前面那个HINT就是为了忽略重复。假设你知道哪些插入了,哪些没有,这个信息对 ...

你没有理解我的问题。我的意思是,你“并不需要”知道哪些插入成功了,也即,那些RETURNING的ROWID对你无用。只要把需求说明白,很可能有其他方法实现。
你说的那个"REPLACE INTO",其实就是"MERGE INTO", 在同一个语句实现INSERT和UPDATE,而且它支持批量绑定。
用你前面数据做例子:
MERGE INTO  EMASS_TRANS.T_TXN_REPEAT_DDT
USING DUAL
ON (card_serial_number=:1 AND txn_date_time=TO_DATE(:2,'YYYY-MM-DD HH24:MI:SS') AND device_id=:3 AND udsn=:4 AND line_number=:5 AND ud_subtype=:6 AND ud_type=:7)
WHEN NOT MATCHED THEN INSERT (  ----根据需要添加
    card_serial_number,txn_date_time,device_id,udsn,line_number,ud_subtype,ud_type
    )
    VALUES (:1,:2,:3,:4,:5,:6,:7)
WHEN MATCHED THEN UPDATE SET settlement_date=settlement_date ----- 根据需要改写这部分
;


其中的USING DUAL看起来有点奇怪,这是因为你所有的数据都来自于绑定变量,而不是某一张源数据表,所以你只需要DUAL来构造一个一行数据集。

使用道具 举报

回复
论坛徽章:
14
2009新春纪念徽章
日期:2009-01-04 14:52:28沸羊羊
日期:2015-03-04 14:51:52优秀写手
日期:2014-03-14 06:00:13马上有房
日期:2014-02-18 16:42:022014年新春福章
日期:2014-02-18 16:42:022013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-09 18:08:15蜘蛛蛋
日期:2012-06-27 21:08:142012新春纪念徽章
日期:2012-01-04 11:53:29ITPUB十周年纪念徽章
日期:2011-11-01 16:23:26
256#
 楼主| 发表于 2025-10-19 20:53 | 只看该作者
newkid 发表于 2025-10-19 03:05
你没有理解我的问题。我的意思是,你“并不需要”知道哪些插入成功了,也即,那些RETURNING的ROWID对你无用 ...

哦,我把你的意见反馈给他,看看他有啥想法。

使用道具 举报

回复
论坛徽章:
14
2009新春纪念徽章
日期:2009-01-04 14:52:28沸羊羊
日期:2015-03-04 14:51:52优秀写手
日期:2014-03-14 06:00:13马上有房
日期:2014-02-18 16:42:022014年新春福章
日期:2014-02-18 16:42:022013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-09 18:08:15蜘蛛蛋
日期:2012-06-27 21:08:142012新春纪念徽章
日期:2012-01-04 11:53:29ITPUB十周年纪念徽章
日期:2011-11-01 16:23:26
257#
 楼主| 发表于 2025-10-20 11:27 | 只看该作者
newkid 发表于 2025-10-19 03:05
你没有理解我的问题。我的意思是,你“并不需要”知道哪些插入成功了,也即,那些RETURNING的ROWID对你无用 ...

请教下,merge是对数据库内两表合并吧?可以针对外部数据吗?特别是有些数据正在从网络传过来,连文件都不是。就是内存数据。

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
258#
发表于 2025-10-20 19:25 | 只看该作者
merge是insert或update的命令

使用道具 举报

回复
论坛徽章:
520
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
259#
发表于 2025-10-20 21:57 | 只看该作者
yulihua49 发表于 2025-10-20 11:27
请教下,merge是对数据库内两表合并吧?可以针对外部数据吗?特别是有些数据正在从网络传过来,连文件都不 ...

我就知道你要问这个问题,所以255楼特地举了一个纯内存的例子,估计你看都没看。
"其中的USING DUAL看起来有点奇怪,这是因为你所有的数据都来自于绑定变量,而不是某一张源数据表,所以你只需要DUAL来构造一个一行数据集"

MERGE最强大之处在于USING后面那个源数据集的构造,既然你是纯内存数据,这个福利就用不上。

使用道具 举报

回复
论坛徽章:
14
2009新春纪念徽章
日期:2009-01-04 14:52:28沸羊羊
日期:2015-03-04 14:51:52优秀写手
日期:2014-03-14 06:00:13马上有房
日期:2014-02-18 16:42:022014年新春福章
日期:2014-02-18 16:42:022013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-09 18:08:15蜘蛛蛋
日期:2012-06-27 21:08:142012新春纪念徽章
日期:2012-01-04 11:53:29ITPUB十周年纪念徽章
日期:2011-11-01 16:23:26
260#
 楼主| 发表于 2025-10-21 09:46 | 只看该作者
newkid 发表于 2025-10-20 21:57
我就知道你要问这个问题,所以255楼特地举了一个纯内存的例子,估计你看都没看。"其中的USING DUAL看起来有 ...

看了。
再请问,insert有没有 不管任何错误的hint?
意思是,在一个数组插入时,有错的跳过。

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表