sql - 循环遍历 Oracle db 中的所有表并检索每个表的主键的最高值
问题描述
有什么方法可以让我使用存储过程和游标遍历 OracleDB 中的所有表,并假设它们是整数类型,并检索每个表的每个主键值的最大值并将它们显示在一行或一列中?
解决方案
如果你加入
user_constraints
,因为它包含有关哪些约束是主键的信息 (P
)user_cons_columns
,因为它包含有关这些约束中涉及的列的信息,并允许您选择该列在约束中的位置,如果它是复合键(为简单起见,我使用了 position1
)并且它用于另一个连接user_tab_columns
因为它包含列数据类型
并使用一点动态 SQL,你会得到这样的结果:
SQL> set serveroutput on
SQL> declare
2 l_max number;
3 begin
4 for cur_r in
5 (select cc.table_name, cc.column_name
6 from user_constraints uc join user_cons_columns cc on uc.constraint_name = cc.constraint_name
7 join user_tab_columns c on c.table_name = cc.table_name
8 and c.column_name = cc.column_name
9 where uc.constraint_type = 'P'
10 and cc.position = 1
11 and c.data_type = 'NUMBER'
12 )
13 loop
14 execute immediate 'select max(' || cur_r.column_name ||') from ' ||
15 cur_r.table_name into l_max;
16 dbms_output.put_line(cur_r.table_name ||'.'|| cur_r.column_name ||' -> max value = '|| l_max);
17 end loop;
18 end;
19 /
DEPT.DEPTNO -> max value = 40
STUDENT.RNO -> max value =
EMPLOY.ID -> max value =
DEPARTMENT.DEPT_ID -> max value =
CARS.ID -> max value =
MOVIE.MOV_ID -> max value = 2
ACCOUNTS.ACCOUNT_ID -> max value = 3
EMPLOYEES.EMPLOYEE_ID -> max value =
INF_AUSBAUPLAENE.AUSB_ID -> max value =
EMPLOYEE_NOTES.EMPLOYEE_NOTES_ID -> max value =
PL/SQL procedure successfully completed.
SQL>
推荐阅读
- javascript - 如何在 TypeScript 中安全地解构 JavaScript 对象
- nginx - Nginx 自动在查询字符串前添加斜杠
- php - 显示图片网址的linkedin api帖子
- php - PHP preg_match:带有+或*修饰符的多个组匹配不会出现在结果中?
- azure - 将消息从 Azure 事件中心路由到 Azure 服务总线
- javascript - 条不出现
- python - 通过与其他数据框列映射更改数据框列名称,Python 3.6
- c - 将生成的程序集重写为 GCC 内联程序集
- javascript - 当图像将在 Json 数据中时在 Array.map 中显示图像
- python - 获取所有动态和二级导入的名称