我有一个简单的查询:
select * from countries
Run Code Online (Sandbox Code Playgroud)
结果如下:
country_name
------------
Albania
Andorra
Antigua
.....
Run Code Online (Sandbox Code Playgroud)
我想在一行中返回结果,所以像这样:
Albania, Andorra, Antigua, ...
Run Code Online (Sandbox Code Playgroud)
当然,我可以编写一个PL/SQL函数来完成这项工作(我已经在Oracle 10g中完成了),但是对于这个任务是否有更好的,最好是非特定于Oracle的解决方案(或者可能是内置函数) ?
我通常会用它来避免子查询中的多行,所以如果一个人有一个以上的公民身份,我不希望她/他在列表中是重复的.
我的问题是基于SQL Server 2005上的类似问题.
更新:我的功能如下:
CREATE OR REPLACE FUNCTION APPEND_FIELD (sqlstr in varchar2, sep in varchar2 ) return varchar2 is
ret varchar2(4000) := '';
TYPE cur_typ IS REF CURSOR;
rec cur_typ;
field varchar2(4000);
begin
OPEN rec FOR sqlstr;
LOOP
FETCH rec INTO field;
EXIT WHEN rec%NOTFOUND;
ret := ret || field || sep;
END LOOP;
if length(ret) …Run Code Online (Sandbox Code Playgroud) 我想列出一系列卓越的机器人仿真环境,包括它们的优缺点.我所知道的一些例子是Webots和Player/Stage.
程序员处理很少使用但不能简单删除的数据的可能性有多大,因为至少报告仍需要它?
我想到的一些例子:
一些部分解决方案是活动标记,活动周期,可视化的优先级,但每个都意味着逐案决策,很难知道哪种类型的实体需要这种特殊处理.
可能是这个问题的设计模式.
结论:(根据目前的答案)
我对Oracle数据库中常见的日志记录方法感兴趣.我们的方法如下:
我们为要记录的表创建一个日志表.日志表包含原始表的所有列以及一些特殊字段,包括时间戳,修改类型(插入,更新,删除),修饰符的id.原始表上的触发器为每个插入和删除创建一个日志行,为修改创建两行.日志行包含更改原始行之前和之后的数据.
虽然使用此方法可以及时挖掘记录的状态,但它有一些缺点:
还有其他可能性吗?可以使用哪种工具来解决这个问题?
我只知道log4plsql.这个工具的优点/缺点是什么?
编辑:根据Brian的回答,我找到了以下参考资料,解释了标准和细粒度审核.
我不知道如何使用事务数据库实现用户友好界面的撤销属性.
一方面,建议用户拥有,因为它是说多(无限)撤销的可能性在这里的答案.可能有助于此问题的模式是Memento 或Command.
但是,使用包含触发器,不断增长的序列号和不可逆转的过程的复杂数据库,很难想象撤消操作如何在不同于事务边界的点处起作用.换句话说,撤消到最后一次提交的事务只是回滚时,但是如何回到不同的时刻呢?
更新(基于到目前为止的答案):我不一定希望撤消在修改已经提交时有效,我将专注于具有开放事务的正在运行的应用程序.每当用户点击保存时,它意味着提交,但在保存之前 - 在同一事务期间 - 撤消应该有效.我知道使用数据库作为持久层只是一个实现细节,用户不应该为此烦恼.但是,如果我们认为"在数据库和GUI中撤消的想法是根本不同的东西",并且我们不对数据库使用撤销,那么无限撤消只是一个流行语.我知道"回滚是......不是用户撤消".
那么如何在同一个事务中给出"由于任何更改而产生的级联效果",实现客户端级撤销?
oracle ×2
css ×1
database ×1
environment ×1
html ×1
logging ×1
modeling ×1
multi-agent ×1
pivot ×1
robotics ×1
simulation ×1
sql ×1
toolkit ×1
tooltip ×1
undo ×1