在我在 Oracle 的旅途中,当我不得不动态创建动态 SQL 查询时,“stragg”函数或“String Aggregator”可以挽救生命。
你可以在这里阅读:http ://www.oratechinfo.co.uk/delimited_lists_to_collections.html
它的基本用途是:
select stragg(fruit) from food;
fruit
-----------
apple,pear,banana,strawberry
1 row(s) returned
使用起来非常简单,连接 chr(13) 将其变成一个长列表,从系统表中选择信息为动态生成的 SQL 提供了 5 分钟的解决方案,例如审计触发器。
现在我负责将与审计相关的 oracle 功能转移到 Sybase 中,类似 Stragg 的功能将非常适合此目的。
例如
select @my_table = 'table_of_fruit'
select 'insert into '+@mytable+'_copy (' +char(10)
+ stragg(c.name) +char(10)
+ 'select '
+ stragg('inserted.'+c.name) + char(10)
+ 'from '+@mytable
from syscolumns c
where objectid(@mytable) = c.id
------------------------------------------
insert into table_of_fruit_copy
(fruit, sweetness, price)
select fruit, sweetness,price
from inserted
完毕。简单的。
除了我不知道如何让字符串聚合函数在 Sybase 中工作。
有谁知道尝试做这种事情,或者可以与可以以这种方式使用的 stragg 相同的代码?
目前的替代方法是打印基于复杂游标等的代码(示例 LOC:500),或者选择结合用户表中的静态字符串和列的语句(示例 LOC:200)。Stragg 将大大降低此代码的复杂性,并且在将来会有很大的帮助(示例 LOC:谁知道呢,可能是 50 个?)
ps 我通过 shell 脚本调用这些选择,然后将它们传送到文件,然后通过 iSQL 运行文件。不是最好的解决方案,但它比替代方案更好。