gpt4 book ai didi

oracle - Oracle 的其余 V$ View 定义在哪里?

转载 作者:行者123 更新时间:2023-12-04 03:35:37 24 4
gpt4 key购买 nike

View V$FIXED_VIEW_DEFINITION包含所有 V$ View 的定义。但是,数据类型是 VARCHAR2(4000),因此只显示 View 正文的前 4000 个字符:

SELECT column_name, data_type, data_length 
FROM dba_tab_cols
WHERE table_name = 'V_$FIXED_VIEW_DEFINITION';

COLUMN_NAME DATA_TYPE DATA_LENGTH
--------------- --------- -----------
VIEW_NAME VARCHAR2 128
VIEW_DEFINITION VARCHAR2 4000
CON_ID NUMBER 22

这适用于较短的 View ,但对于其他 View ,如 V$SESSION,查询文本会在字符 4000 之后停止:

SELECT * FROM v$fixed_view_definition WHERE view_name = 'GV$SESSION';

VIEW_NAME VIEW_DEFINITION
---------- --------------------------------------------
GV$SESSION select s.inst_id, ... ,decode(bitand(s.ksuse
here it stops abruptly ^

现在,显然,Oracle 已将全文存储在某处,函数 DBMS_UTILITY. EXPAND_SQL_TEXT T重建完整的查询,但并非没有对查询做一些奇怪的事情,比如引用所有列、引入别名等:

DECLARE
c CLOB;
i NUMBER := 1;
linelen CONSTANT NUMBER := 100;
BEGIN
DBMS_UTILITY.EXPAND_SQL_TEXT('SELECT * FROM V$SESSION', c);
LOOP
EXIT WHEN i > DBMS_LOB.GETLENGTH(c);
DBMS_OUTPUT.PUT_LINE(DBMS_LOB.SUBSTR(c, linelen, i));
i := i + linelen;
END LOOP;
END;
/


SELECT "A1"."SADDR" "SADDR","A1"."SID" "SID","A1"."SERIAL#" "SERIAL#","A1"."AUDS
ID" "AUDSID","A1"."PADDR" "PADDR","A1"."USER#" "USER#","A1"."USERNAME" "USERNAME
...

那么,其余的 V$ 查询主体在哪里?

最佳答案

为了得到一个清晰的答案,听起来您发现了使用编译到 Oracle 二进制文件中的完整固定 View 源查询

strings $ORACLE_HOME/bin/oracle

并搜索特定 View 的输出。

Burleson had provided a hint固定 View 同义词是由 $ORACLE_HOME/rdbms/admin/ 目录脚本(特别是 cdfixed.sql)创建的。

关于oracle - Oracle 的其余 V$ View 定义在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66991236/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com