在Oracle

时间:2016-01-05 11:17:41

标签: oracle

我在一堆旧解决方案中做了一些清理工作。作为清理的一部分,我正在考虑从Oracle数据库中删除一些旧的触发器。触发器最初是由我的同事设计的,并由第三方顾问设计。除了通过我有权访问的Sql Server中的server link之外,我无法直接访问Oracle数据库。

所以我列出了这样的触发器:

select * from openquery(SERVERLINKNAME, '
    select *
    from ALL_TRIGGERS
    where owner like ''%OURUSERNAME%''
    order by trigger_name
')

这项工作正常,但问题是来自TRIGGER_BODY的{​​{1}}字段属于ALL_TRIGGERS类型,并且字段中的数据会在{{LONG之间的某个点被截断1}}服务器和我的Oracle结果集。所以我只能看到本专栏的前100个字符。

如何选择整个SSMS字段?

2 个答案:

答案 0 :(得分:4)

在Google上搜索TRIGGER_BODY会得到相当多的结果,其中很多都建议使用函数,(临时)表格等等。所有这些都不是我特定情况下的问题,因为我不是允许在oracle convert long to varchar数据库/服务器中创建任何对象。

我终于找到了一个我能够为我的用例修改的示例。样本来自this page,有人自称为Sayan Malakshinov。在修改他的样本后,我最终得到了这个:

Oracle

这省略了select * from openquery(SERVERLINKNAME, ' select * from xmltable( ''/ROWSET/ROW'' passing dbms_xmlgen.getXMLType('' select trigger_name, TRIGGER_BODY from ALL_TRIGGERS where TRIGGER_BODY is not null and owner = ''''OURUSERNAME'''' '') columns trigger_name varchar2(80), TRIGGER_BODY varchar2(4000) ) ') 中的一些列,但我获得了整个触发器体(因为没有触发器超过4000个字符)。

答案 1 :(得分:1)

如果您想稍微更容易阅读它的执行部分,我可以使用{{1},使用文字转义语法从user1429080 转换该版本。 }和§ / [用于转义嵌套字符串:

]

以防万一您想检查sql结果视图中的代码(通常只支持显示单个CHR(13)作为可视换行符),这非常有用:

select * from openquery(SERVERLINKNAME, q'§   
    select *
    from
    xmltable( '/ROWSET/ROW' passing dbms_xmlgen.getXMLType(q'[
        select
            trigger_name,
            TRIGGER_BODY
        from ALL_TRIGGERS
        where TRIGGER_BODY is not null
            and owner = 'OURUSERNAME'
    ]')
    columns
        trigger_name varchar2(80),
        TRIGGER_BODY varchar2(4000)
    )
§')