当我们在sql中使用*时,只更改单个列值

时间:2014-02-27 09:03:40

标签: sql oracle

是否有办法只更改选择oracle sql时更新的单列值。

SELECT  ORDD.id||'sdaf' as id,ORDD.* 
FROM RDT_ORDER ORDM,RDT_ORDERDETAIL ORDD;

这里在RDT_ORDERDETAIL中有一些Hundered列但只有一个coulmn我需要更新。

我不想通过在select查询中写下所有列来选择所有的一百列,如下所示

SELECT  ORDD.id||'sdaf' as id,ORDD.col1,ORDD.col2,ORDD.col3,ORDD.col4 
FROM RDT_ORDER ORDM,RDT_ORDERDETAIL ORDD;

请注意我已经删除了where子句,我需要获取其他列的单个更新列值。但是我不应该在Select中写入所有coulmns。

现有数据库记录:

ID NAME COL3 COL4
1  name1 ..   ..
2  name2 ..   ..
3  name3 ..   ..

现在结果:

ID       ID NAME COL3 COL4
1_'sdaf' 1  name1 ..   ..
2_'sdaf' 2  name2 ..   ..
3_'sdaf' 3  name3 ..   ..

预期结果:

ID        NAME COL3 COL4
1_'sdaf'  name1 ..   ..
2_'sdaf'  name2 ..   ..
3_'sdaf'  name3 ..   ..

2 个答案:

答案 0 :(得分:2)

我认为您不能通过查询select * from...来排除单个列。可能是VIEW可以为您提供帮助。

CREATE OR REPLACE VIEW <view_name> AS
     SELECT  ordd.id||'sdaf' AS id, ordd.col1, ordd.col2, ordd.col3, ordd.col4 
     FROM    rdt_order ordm,
             rdt_orderdetail ordd
     WHERE   .....;

答案 1 :(得分:2)

如果您想选择除一行外的所有行,则答案为 - you either get all fields (*) OR specify the fields you want.这就是Oracle的工作方式。

如果您仍然坚持,那么可能会有一些解决方法,例如Dynamic SQL using query generator or data cartridge

您可以在here中提及类似问题。

如果你想要一个字符串操作,你可以使用别名来完成所有列。

SELECT COL1||'_asd_', T.*
FROM MYTABLE T;

您无法直接从一个表中获取所有列的操作,而这些列在一个或多个列上没有编写器限制。您可以尝试使用动态SQL,但我不建议任何事情,因为可维护性低,从长远来看会头疼。