oracle的表或View字段数取得

本文介绍了一种使用Oracle SQL快速统计多个视图中字段数量的方法。通过一条简单的SQL语句,可以有效地获取到指定视图的具体字段数目。
今天同事让我帮忙写个文档,里边有很多是记录View的字段数。
我数了几个,发现实在太费时间了。能不能查出来呢?搜了一下,oracle果然有这个功能。
SQL如下:
select table_name ,COUNT(*) from user_tab_columns 

where table_name IN (

'V_INDV_ALL_INFO_CNT_JP',

'V_INDV_ALL_INFO_CNT_M_JP',

'V_INDV_TRAN_NCNT_RIDER_M_JP'

) group by table_name


实行结果如下:
[table]
|TABLE_NAME|COUNT(*)|
|V_INDV_ALL_INFO_CNT_JP|220|
|V_INDV_ALL_INFO_CNT_M_JP|209|
|V_INDV_TRAN_NCNT_RIDER_M_JP|33|
[/table]
### Oracle Update Join 关联更新字段示例 在Oracle数据库中,可以通过多种方式实现基于关联的字段更新操作。以下是几种常见的方法及其适用场景: #### 方法一:快速游标更新法 这种方法适用于复杂逻辑下的多关联更新。通过将游标嵌套到 `FOR` 循环中,可以直接利用 `ROWID` 字段高效定位目标记录并完成更新。 ```sql BEGIN FOR cr IN ( SELECT a.rowid, b.join_state FROM t_join_situation a, t_people_info b WHERE a.people_number = b.people_number AND a.year = '2011' AND a.city_number = 'M00000' AND a.town_number = 'M51000' ) LOOP UPDATE t_join_situation SET join_state = cr.join_state WHERE ROWID = cr.ROWID; END LOOP; END; ``` 这种方式的优点是可以处理复杂的条件过滤和多层关联关系[^1]。 --- #### 方法二:Inline View 更新法 对于两之间存在主键关联的情况,推荐使用 Inline View 的方式进行更新。这种做法能够显著提升性能,尤其是在数据量较大的情况下。 ```sql UPDATE ( SELECT a.field_to_update AS old_value, b.new_value AS new_value FROM table_a a INNER JOIN table_b b ON a.key_column = b.foreign_key ) temp_table SET temp_table.old_value = temp_table.new_value; ``` 需要注意的是,如果目标列已经是期望值,则仍会被标记为已更新,这可能导致不必要的重复操作[^3]。 --- #### 方法三:Merge 更新法 当被更新的目标并非完全依赖于另一张的主键时,可以考虑使用 `MERGE` 语句来替代传统的 `UPDATE` 操作。它不仅支持插入缺失的数据行,还能同时满足现有记录的修改需求。 ```sql MERGE INTO discount d USING industry i ON (d.v_industry_code = i.v_industry_code) WHEN MATCHED THEN UPDATE SET d.v_parent_industry_code_o = i.v_parent_industry_code, d.v_parent_industry_name_o = m.v_industry_name FROM industry m WHERE i.v_parent_industry_code = m.v_industry_code; ``` 相比其他技术手段而言,`MERGE` 更加灵活且易于维护[^2]。 --- #### 方法四:标准 SQL 更新法(带子查询) 最基础也最常见的形式莫过于借助子查询完成跨间的信息同步工作了。尽管如此简单明了的设计思路容易理解掌握,但在某些特定条件下可能不如前面提到的技术那样高效快捷。 ```sql UPDATE table_a a SET field_to_update = ( SELECT b.new_value FROM table_b b WHERE a.key_column = b.foreign_key ); ``` 不过要注意一点就是,一旦遇到一对多的关系映射情况的话,那么上述代码就会报错提示找不到唯一的匹配项[^4]。 --- #### Java 中动态构建 SQL 并调用 PL/SQL 块 除了纯 SQL 层面的操作外,在实际项目开发过程中还经常需要用到编程语言配合后台脚本共同协作解决问题。比如下面这段 JAVA 程序片段展示了如何向 ORACLE 数据库提交一段包含 LEFT JOIN 的复合型更新请求: ```java String sql = "BEGIN FOR fn IN (" + "SELECT t.id, t.shbj, r.shbj AS shbj1 " + "FROM mj_ry_sg t " + "LEFT JOIN mj_ry r ON t.zgh = r.zgh " + "WHERE t.yxbj = '1' AND r.yxbj = '1' AND r.shbj IS NOT NULL" + ") LOOP " + "UPDATE mj_ry_sg t SET t.shbj = fn.shbj1 WHERE t.id = fn.id;" + "END LOOP; END;"; Db.update(sql); ``` 这里采用了显式的事务控制机制确保整个过程要么全部成功要么彻底失败回滚重试[^5]。 --- ### 总结 以上介绍了四种不同的 Oracle 关联更新策略,分别是 **快速游标更新法**、**Inline View 更新法**、**Merge 更新法** 和 **标准 SQL 子查询更新法**。每种方法各有优劣,需根据具体业务场景选择最适合的一种实施。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值