首页 > 数据库 > > Gauss 100 数据库函数介绍之表函数
语法:
select * from table(dba_analyze_table(param1, param2));
功能:查看表的分析信息结果,包含占用总页面数,EXTENTS数,总行数,行连接数,行迁移数,平均每行的长度。
注意:
在数据库参数UPPER_CASE_TABLE_NAMES值为TRUE(缺省值)情况下,数据库中的用户名、表名默认为大写,此函数中的参数是用户和表时,也必须输入大写名称,否则会报对象不存在错误。
若数据库参数UPPER_CASE_TABLE_NAMES值为FALSE,或者用户通过双引号输入大小写敏感的表对象,那么函数中的参数大小写敏感,否则会报对象不存在错误。
说明:
param1:用户名字符串。
param2:表名称字符串。
STAT_ITEM:该列显示解析表涉及的项目的名称。
VALUE:该列显示对应项目的值。
示例:
select * from table(dba_analyze_table('gaussdba', 'test_t1'));
STAT_ITEM VALUE
---------------------------------------------------------------- --------------------
total pages 8
total extents 1
total rows 8
linked rows 0
mirgated rows 0
average row size 133
6 rows fetched.语法:
select * from table(dba_proc_decode(param1, param2, param3));
功能:查看存储过程,自定义函数或触发器的编译结果。按逻辑行显示。
注意:
在数据库参数UPPER_CASE_TABLE_NAMES值为TRUE(缺省值)情况下,数据库中的用户名、表名默认为大写,此函数中的参数是用户和表时,也必须输入大写名称,否则会报对象不存在错误。
若数据库参数UPPER_CASE_TABLE_NAMES值为FALSE,或者用户通过双引号输入大小写敏感的表对象,那么函数中的参数大小写敏感,否则会报对象不存在错误。
说明:
param1:用户名字符串。
param2:程序名称字符串。
param3:程序类型字符串,仅支持‘PROCEDURE’,‘FUNCTION’,‘TRIGGER’三种类型。
LINE_NUM:逻辑行编号。
LINE_TYPE:逻辑行类型。
LOC_LINE:逻辑行对应首个物理行号。
SPECIAL_DESCRIPTION:逻辑行特殊说明(目前仅提供逻辑行跳转关系说明信息)。
示例:
SQL> select * from table(dba_proc_decode('gaussdba', 'GATHER_CHANGE_STATS', 'PROCEDURE'));
LINE_NUM LINE_TYPE LOC_LINE SPECIAL_DESCRIPTION
------------ -------------------------------- ------------ ----------------------------------------------------------------
1 LINE_BEGIN 9 except[null];end[29];
2 LINE_IF 11 t_line[null];f_line[7];next[7];
3 LINE_SQL 12
4 LINE_IF 13 t_line[null];f_line[6];next[6];
5 LINE_RETURN 14
6 LINE_END_IF 15
7 LINE_END_IF 16
8 LINE_PROC 19
9 LINE_FOR 22 next[18];
10 LINE_BEGIN 28 except[12];end[17];
11 LINE_PROC 29
12 LINE_EXCEPTION 30 end[16];
13 LINE_WHEN 31
14 LINE_NULL 32
15 LINE_END_WHEN 32
16 LINE_END_EXCEPTION 32
17 LINE_END 33
18 LINE_END_LOOP 34 loop[9];
19 LINE_FOR 37 next[28];
20 LINE_BEGIN 38 except[22];end[27];
21 LINE_PROC 39
22 LINE_EXCEPTION 40 end[26];
23 LINE_WHEN 41
24 LINE_NULL 42
25 LINE_END_WHEN 42
26 LINE_END_EXCEPTION 42
27 LINE_END 43
28 LINE_END_LOOP 44 loop[19];
29 LINE_END 46
29 rows fetched.语法:
select * from table(dba_proc_line(param1, param2));
功能:查看存储过程源码。按行显示。
注意:
在数据库参数UPPER_CASE_TABLE_NAMES值为TRUE(缺省值)情况下,数据库中的用户名、表名默认为大写,此函数中的参数是用户和表时,也必须输入大写名称,否则会报对象不存在错误。
若数据库参数UPPER_CASE_TABLE_NAMES值为FALSE,或者用户通过双引号输入大小写敏感的表对象,那么函数中的参数大小写敏感,否则会报对象不存在错误。
说明:
param1:用户名字符串。
param2:程序名称字符串。
LOC_LINE:物理行号。
SOURCE_LINE:单个物理行对应程序源码。
示例:
SQL> select * from table(dba_proc_line('gaussdba', 'GATHER_CHANGE_STATS'));
LOC_LINE SOURCE_LINE
------------ ----------------------------------------------------------------
1 CREATE OR REPLACE PROCEDURE GATHER_CHANGE_STATS (
2 estimate_percent NUMBER DEFAULT 30,
3 change_percent NUMBER DEFAULT 10,
4 force BOOLEAN DEFAULT TRUE
5 )
6 --force false: don't gather when cbo is disable
7 IS
8 cbo_enable VARCHAR(3);
9 BEGIN
10 --check cbo flag
11 IF force = FALSE THEN
12 SELECT VALUE INTO cbo_enable FROM SYS.V$PARAMETER WHERE NAME='CBO';
13 IF UPPER(cbo_enable) = 'OFF' THEN
14 RETURN;
15 END IF;
16 END IF;
17
18 --flush modification to table
19 DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO();
20
21 --gather the table changed
22 FOR ITEM IN (SELECT A.OWNER, A.TABLE_NAME
23 FROM DBA_TABLES A, DBA_TAB_MODIFICATIONS B
24 WHERE A.PARTITIONED = 0 AND A.OWNER = B.TABLE_OWNER AND A.TABLE_NAME=B.TABLE_NAME
25 AND( A.NUM_ROWS is null or
26 ((NVL(B.INSERTS, 0) + NVL(B.UPDATES, 0) + NVL(B.DELETES, 0))>= (CHANGE_PERCENT * A.NUM_ROWS/100))))
27 LOOP
28 BEGIN
29 DBMS_STATS.GATHER_TABLE_STATS(ITEM.OWNER, ITEM.TABLE_NAME, NULL, estimate_percent);
30 EXCEPTION
31 WHEN OTHERS THEN
32 NULL;
33 END;
34 END LOOP;
35
36 --temp table without statistic will gather at the first time
37 FOR ITEM IN (SELECT OWNER, TABLE_NAME FROM DBA_TABLES WHERE PARTITIONED = 0 AND TABLE_TYPE <> 'HEAP' AND LAST_ANALYZED IS NULL) LOOP
38 BEGIN
39 DBMS_STATS.GATHER_TABLE_STATS(ITEM.OWNER, ITEM.TABLE_NAME, null, estimate_percent);
40 EXCEPTION
41 WHEN OTHERS THEN
42 NULL;
43 END;
44 END LOOP;
45
45 rows fetched.语法:
select * from table(get_tab_parallel(param1, param2));
功能:获取表并行扫描的分组信息。
说明:
param1:表名字。
param2:并行度。
PART_ID:返回的表分区号,普通表返回-1。
BEG:返回分组信息的begin pageid。
END:返回的分组信息的end pageid。
示例:
SQL> select * from table(get_tab_parallel('tab1', 4));
PART_ID BEG END
------------ -------------------- --------------------
-1 12884901892 12884902266
-1 12884902267 12884902641
-1 12884902642 12884903018
-1 12884903019 4393751543808
4 rows fetched.语法:
select * from table(get_tab_rows(param1, param2,param3,param4,param5,param6));
功能:直接获取存储引擎原始row记录。
说明:
param1:表名字。
param2:表分区号,普通表该值传-1。
param3:scn号。
param4:匹配条件,无匹配条件传入NULL。
param5:起始pageid。
param6:结束pageid。
示例:
SQL> select * from table(get_tab_rows('tab1', -1, 'NULL', 1641400608411649, 12884903244,4393751543808));
C1 C2 NAME
------------ ------------ ------------------------------
0 23454 12334546
1 23454 12334546
2 23454 12334546
3 23454 12334546
4 23454 12334546
5 23454 12334546
6 23454 12334546
7 23454 12334546
8 23454 12334546
9 23454 12334546
10 23454 12334546
11 23454 12334546
12 23454 12334546
13 23454 12334546
14 23454 12334546
15 23454 12334546
...语法:
select * from table(parallel_scan(param1,param2,param3,param4,param5));
功能:并行扫描表数据。
说明:
param1:表名字。
param2:scn号。
param3:起始pageid。
param4:结束pageid。
param5:表分区号,普通表传入-1。
示例:
SQL> select * from table(parallel_scan('tab1', 1641400608411649, 12884903244,4393751543808,-1));
C1 C2 NAME
------------ ------------ ------------------------------
213 23454 12334546
214 23454 12334546
215 23454 12334546
216 23454 12334546
217 23454 12334546
218 23454 12334546
219 23454 12334546
220 23454 12334546
221 23454 12334546
222 23454 12334546
223 23454 12334546
0 23454 12334546
1 23454 12334546
2 23454 12334546
3 23454 12334546
4 23454 12334546
5 23454 12334546
6 23454 12334546
7 23454 12334546
...来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69959250/viewspace-3149768/ ,如需转载,请注明出处,否则将追究法律责任。