我在一堆旧解决方案中做了一些清理工作。作为清理的一部分,我正在考虑从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
字段?
答案 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)
)
§')