暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

华为GaussDB T 表函数

墨天轮 2019-10-12
998

表函数

DBA_ANALYZE_TABLE

语法:

select * from table(dba_analyze_table(param1, param2));

功能:查看表的分析信息结果,包含占用总页面数,EXTENTS数,总行数,行连接数,行迁移数,平均每行的长度。

注意:

  • 在数据库参数UPPER_CASE_TABLE_NAMES值为TRUE(缺省值)情况下,数据库中的用户名,表名默认为大写,此函数必须给定参数大写名,否则会报对象不存在错误或者用户没有权限的错误。
  • 若参数值修改为FALSE或者如果用户通过双引号输入大小写敏感的表对象,那么函数中给定的相同大小写敏感的参数,否则会报对象不存在错误。
  • 该表函数只允许当前用户查询自己名下的表,或者赋予了dba角色权限的用户查询其他用户的表。

说明:

  • param1:用户名字符串。
  • param2:表名称字符串。
  • STAT_ITEM:该列显示解析表涉及的项目的名称。
  • VALUE:该列显示对应项目的值。

示例

select * from table(dba_analyze_table('omm', '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.

DBA_PROC_DECODE

语法:

select * from table(dba_proc_decode(param1, param2, param3));

功能:查看存储过程,自定义函数或触发器的编译结果。按逻辑行显示。

注意:

  • 在数据库参数UPPER_CASE_TABLE_NAMES值为TRUE(缺省值)情况下,数据库中的用户名,表名默认为大写,此函数必须给定参数大写名,否则会报对象不存在错误或者用户没有权限的错误。
  • 若参数值修改为FALSE或者如果用户通过双引号输入大小写敏感的表对象,那么函数中给定的相同大小写敏感的参数,否则会报对象不存在错误。
  • 该表函数只允许当前用户查询自己名下的存储过程,自定义函数或触发器,或者赋予了dba角色权限的用户查询其他用户的存储过程,自定义函数或触发器。

说明:

  • param1:用户名字符串。
  • param2:程序名称字符串。
  • param3:程序类型字符串,仅支持‘PROCEDURE’,‘FUNCTION’,‘TRIGGER’三种类型。
  • LINE_NUM:逻辑行编号。
  • LINE_TYPE:逻辑行类型。
  • LOC_LINE:逻辑行对应首个物理行号。
  • SPECIAL_DESCRIPTION:逻辑行特殊说明(目前仅提供逻辑行跳转关系说明信息)。

示例

SQL> select * from table(dba_proc_decode('omm', '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.

DBA_PROC_LINE

语法:

select * from table(dba_proc_line(param1, param2));

功能:查看存储过程源码。按行显示。

注意:

  • 在数据库参数UPPER_CASE_TABLE_NAMES值为TRUE(缺省值)情况下,数据库中的用户名,表名默认为大写,此函数必须给定参数大写名,否则会报对象不存在或者用户没有权限的错误。
  • 若参数值修改为FALSE或者如果用户通过双引号输入大小写敏感的表对象,那么函数中给定的相同大小写敏感的参数,否则会报对象不存在错误。
  • 该表函数允许当前用户查询自己创建的存储过程、自定义函数或触发器,或被赋予了DBA角色权限的用户查询其他用户的存储过程,自定义函数或触发器。

说明:

  • param1:用户名字符串。
  • param2:程序名称字符串。
  • LOC_LINE:物理行号。
  • SOURCE_LINE:单个物理行对应程序源码。

示例

SQL> select * from table(dba_proc_line('omm', '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.DV_PARAMETERS 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.

DBG_BREAK_INFO

语法:

select * from table(dbg_break_info(param1));

功能:查询断点信息,包含断点编号,断点所在程序的用户,断点所在程序的名称,断点所在程序的物理行号,使能禁止标志,断点触发条件(暂不支持),最大忽略次数。

注意:

  • 当前session为debug session且被调试程序为WAITING or IDLE状态,才可以使用该表函数。

说明:

  • 输入参数说明
    • param1:int类型,断点编号,从1开始计数。如果设置为0,则查询所有在使用的断点。
  • 返回参数说明
    • BREAK_ID:断点编号,从1开始计数。
    • OWNER:断点所在程序对应的用户。
    • OBJECT:断点所在程序名称。
    • LOC_LINE:断点所在程序对应物理行号。
    • IS_ENABLED:使能禁止标志。
    • COND:断点触发条件(暂不支持)。
    • MAX_SKIP:断点最大忽略次数。

示例

select * from table(dbg_break_info(1)); BREAK_ID OWNER OBJECT LOC_LINE IS_ENABLED COND MAX_SKIP ------------ ---------------------------------------------------------------- ---------------------------------------------------------------- ------------ ---------- ---------------------------------------------------------------- ------------ 1 SYS TEST_BREAK_LV3_FUNC1 4 TRUE 0 1 rows fetched.

DBG_CONTROL_INFO

语法:

select * from table(dbg_control_info());

功能:查询target session的调试信息控制参数。

注意:

  • 当前session为debug session才可以使用该表函数。

说明:

  • NAME:调试参数名称。
  • VALUE:调试参数值。

示例

SQL> select * from table(dbg_control_info()); NAME VALUE -------------------------------- ------------ timeout 100000 curr_count 1 status 1 is_force_pause 0 is_force_terminate 0 is_attached 1 debug_id 64 brk_flag 7 brk_flag_stack_id 1 max_stack_id 1 max_break_id 9 11 rows fetched.

DBG_SHOW_VALUES

语法:

select * from table(dbg_show_values(param1));

功能:查询变量信息,包含变量所在的调用栈编号,变量所在语句块的名称,如果是record类型的属性上一级record类型名称,变量名称或者record类型属性名称,语句块编号,语句块内变量编号,record类型变量的属性偏移量,变量值。

注意:

  • 当前session为debug session且被调试程序为WAITING状态,才可以使用该表函数。

说明:

  • 输入参数说明
    • param1:int类型,设置需要查看的调用栈编号,0表示查询所有调用栈的变量信息,大于0表示查询对应调用栈中的变量信息。如果参数值已经大于当前最大调用栈深度,则查询所有调用栈的变量信息。
  • 返回参数说明
    • STACK_ID:变量所在的调用栈编号,从1开始计数。
    • BLOCK_NAME:变量所在语句块的名称。
    • PARENT:如果是record类型的属性,上一级record类型名称。
    • NAME:变量名称或者record类型属性名称。
    • VID_BLOCK:语句块编号。
    • VID_ID:语句块内变量编号。
    • VID_OFFSET:record类型变量的属性偏移量。
    • VALUE:变量值,其中游标类型显示对应属性值。
    • TYPE:变量类型。

示例

select * from table(dbg_show_values(0)); STACK_ID BLOCK_NAME PARENT NAME VID_BLOCK VID_ID VID_OFFSET VALUE TYPE ------------ ---------------------------------------------------------------- ---------------------------------------------------------------- ---------------------------------------------------------------- ------------ ------------ ------------ ---------------------------------------------------------------- ---------------------------------------------------------------- 1 TEST_STEP1_BEGIN V1_INT 0 0 0 13 BINARY_INTEGER 1 TEST_STEP1_BEGIN V2_NUM 0 1 0 6.7 NUMBER 1 TEST_STEP1_BEGIN V3_VARC 0 2 0 pfa VARCHAR 1 TEST_STEP1_BEGIN V4_C 0 3 0 CHAR 1 TEST_STEP1_BEGIN V5_DATE 0 4 0 DATE 1 TEST_STEP1_BEGIN V6_DOUB 0 5 0 BINARY_DOUBLE 2 P1 0 0 0 pfa VARCHAR 3 :NEW.ID 0 0 0 5 BINARY_INTEGER 3 V1 1 0 0 5 BINARY_INTEGER 9 rows fetched.

DBG_PROC_CALLSTACK

语法:

select * from table(dbg_proc_callstack(param1));

功能:查询调用栈信息,包含调用栈编号,从1开始计数,调用程序对应的用户,调用程序名称,调用程序对应物理行号,调用程序对应行类型。

注意:

  • 当前session为debug session且被调试程序为WAITING状态,才可以使用该表函数。

说明:

  • param1:int类型,设置需要查看的调用栈编号,0表示查询所有调用栈的变量信息,大于0表示查询对应调用栈中的变量信息。
  • STACK_ID:调用栈编号,从1开始计数。
  • OWNER:调用程序对应的用户。
  • OBJECT:调用程序名称。
  • LOC_LINE:调用程序对应物理行号。
  • LINE_TYPE:调用程序对应行类型。

示例

SQL> select * from table(dbg_proc_callstack(0)); STACK_ID OWNER OBJECT LOC_LINE LINE_TYPE ------------ ---------------------------------------------------------------- ---------------------------------------------------------------- ------------ -------------------------------- 1 10 LINE_SETVAL 2 SYS TEST_BREAK_LV1_FUNC1 4 LINE_RETURN 3 SYS TEST_BREAK_LV2_FUNC1 4 LINE_SETVAL 4 SYS TEST_BREAK_LV3_FUNC1 4 LINE_SETVAL 4 rows fetched.

GET_TAB_PARALLEL

语法:

select * from table(get_tab_parallel(param1, param2))

功能:获取表并行扫描的分组信息。

说明:

  • param1:表名字。
  • param2:并行度,取值范围[1,16]。
  • 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.

GET_TAB_ROWS

语法:

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 ...

PARALLEL_SCAN

语法:

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 ...
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论