Lexus. 2024-08-10 23:18 采纳率: 0%
浏览 4

Oracle 触发查询ALL_TAB_COLS、ALL_TYPES两张表

以下这个sql是在什么情况下触发的

SELECT NULL AS TABLE_CAT, T.OWNER AS TABLE_SCHEM, T.TABLE_NAME AS TABLE_NAME, T.COLUMN_NAME AS COLUMN_NAME, DECODE(SUBSTR(T.DATA_TYPE, 1, 9), 'TIMESTAMP', DECODE(SUBSTR(T.DATA_TYPE, 10, 1), '(', DECODE(SUBSTR(T.DATA_TYPE, 19, 5), 'LOCAL', -102, 'TIME ', -101, 93), DECODE(SUBSTR(T.DATA_TYPE, 16, 5), 'LOCAL', -102, 'TIME ', -101, 93)), 'INTERVAL ', DECODE(SUBSTR(T.DATA_TYPE, 10, 3), 'DAY', -104, 'YEA', -103), DECODE(T.DATA_TYPE, 'BINARY_DOUBLE', 101, 'BINARY_FLOAT', 100, 'BFILE', -13, 'BLOB', 2004, 'CHAR', 1, 'CLOB', 2005, 'COLLECTION', 2003, 'DATE', 93, 'FLOAT', 6, 'LONG', -1, 'LONG RAW', -4, 'NCHAR', -15, 'NCLOB', 2011, 'NUMBER', 2, 'NVARCHAR', -9, 'NVARCHAR2', -9, 'OBJECT', 2002, 'OPAQUE/XMLTYPE', 2009, 'RAW', -3, 'REF', 2006, 'ROWID', -8, 'SQLXML', 2009, 'UROWID', -8, 'VARCHAR2', 12, 'VARRAY', 2003, 'XMLTYPE', 2009, DECODE((SELECT A.TYPECODE FROM ALL_TYPES A WHERE A.TYPE_NAME = T.DATA_TYPE AND ((A.OWNER IS NULL AND T.DATA_TYPE_OWNER IS NULL) OR (A.OWNER = T.DATA_TYPE_OWNER)) ), 'OBJECT', 2002, 'COLLECTION', 2003, 1111))) AS DATA_TYPE, T.DATA_TYPE AS TYPE_NAME, DECODE (T.DATA_PRECISION, NULL, DECODE(T.DATA_TYPE, 'NUMBER', DECODE(T.DATA_SCALE, NULL, 0 , 38), DECODE (T.DATA_TYPE, 'CHAR', T.CHAR_LENGTH, 'VARCHAR', T.CHAR_LENGTH, 'VARCHAR2', T.CHAR_LENGTH, 'NVARCHAR2', T.CHAR_LENGTH, 'NCHAR', T.CHAR_LENGTH, 'NUMBER', 0, T.DATA_LENGTH) ), T.DATA_PRECISION) AS COLUMN_SIZE, 0 AS BUFFER_LENGTH, DECODE (T.DATA_TYPE, 'NUMBER', DECODE(T.DATA_PRECISION, NULL, DECODE(T.DATA_SCALE, NULL, -127 , T.DATA_SCALE), T.DATA_SCALE), T.DATA_SCALE) AS DECIMAL_DIGITS, 10 AS NUM_PREC_RADIX, DECODE (T.NULLABLE, 'N', 0, 1) AS NULLABLE, NULL AS REMARKS, T.DATA_DEFAULT AS COLUMN_DEF, 0 AS SQL_DATA_TYPE, 0 AS SQL_DATETIME_SUB, T.DATA_LENGTH AS CHAR_OCTET_LENGTH, T.COLUMN_ID AS ORDINAL_POSITION, DECODE (T.NULLABLE, 'N', 'NO', 'YES') AS IS_NULLABLE, NULL AS SCOPE_CATALOG, NULL AS SCOPE_SCHEMA, NULL AS SCOPE_TABLE, NULL AS SOURCE_DATA_TYPE, 'NO' AS IS_AUTOINCREMENT, T.VIRTUAL_COLUMN AS IS_GENERATEDCOLUMN FROM ALL_TAB_COLS T WHERE T.OWNER LIKE :B3 ESCAPE '/' AND T.TABLE_NAME LIKE :B2 ESCAPE '/' AND T.COLUMN_NAME LIKE :B1 ESCAPE '/' AND T.USER_GENERATED = 'YES' ORDER BY TABLE_SCHEM, TABLE_NAME, ORDINAL_POSITION 

  • 写回答

2条回答 默认 最新

  • 一直免费一直爽 2024-08-10 23:18
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    在Oracle数据库中,ALL_TAB_COLSALL_TYPES 表是用于获取所有列信息的视图。这些视图通常被用来分析SQL语句执行性能,并为优化器提供一些额外的信息。

    根据您的描述,您可能希望在此SQL查询中添加一个触发器(Triggers),以便在某些特定条件下自动执行某些操作。触发器可以是一个非常有用的功能,特别是在处理大量数据时,因为它们可以在程序运行过程中执行特定的操作,而不需要每次执行时都重新编译和加载数据。

    在Oracle中,触发器可以通过创建一个自定义的触发器来实现。下面是如何创建这样一个触发器的一个例子:

    首先,确保您已经启用了触发器功能。打开CREATE TRIGGER命令后,选择ENABLE PLUGGABLE DATABASE选项卡以启用触发器功能。

    然后,您可以编写触发器代码如下所示:

    -- 创建触发器
    CREATE OR REPLACE TRIGGER all_tab_cols_trigger
    BEFORE INSERT ON all_tab_cols
    FOR EACH ROW
    BEGIN
        -- 在这里编写触发器逻辑
    END;
    

    在这个例子中,我们创建了一个名为all_tab_cols_trigger的触发器,在插入新行到all_tab_cols表时进行执行。具体来说,当INSERT语句被执行时,触发器中的代码将被执行。

    请注意,上述代码仅作为示例,实际应用中您需要根据具体情况调整触发器的具体内容和条件。例如,您可能需要检查某些特定条件是否满足,或者执行其他特定任务等。

    此外,如果您想要进一步控制触发器的行为,比如限制其只在特定时间点触发,或者在特定用户或角色级别上设置权限,那么您需要修改触发器的参数或配置。

    对于更详细的指导和解释,建议查阅Oracle数据库的官方文档,或者向Oracle技术支持寻求帮助。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 8月10日

悬赏问题

  • ¥15 需要写计算过程,不要写代码,求解答,数据都在图上
  • ¥15 向数据表用newid方式插入GUID问题
  • ¥15 multisim电路设计
  • ¥20 用keil,写代码解决两个问题,用库函数
  • ¥50 ID中开关量采样信号通道、以及程序流程的设计
  • ¥15 U-Mamba/nnunetv2固定随机数种子
  • ¥15 C++行情软件的tick数据如何高效的合成K线
  • ¥15 vba使用jmail发送邮件正文里面怎么加图片
  • ¥15 vb6.0如何向数据库中添加自动生成的字段数据。
  • ¥20 在easyX库下编写C语言扑克游戏跑的快,能实现简单的人机对战