2016-07-27 82 views
0

我听说可能性使用双表中的选择生成更新/插入语句。我试图创建一些声明,但我总是得到无效的标识符。如何通过选择生成更新?

我的发言:

select 'update some_table_1 t1 set t1.s_name = ' || some_table_2.s_name ||' 
where some_table_2.s_code = some_table_1.code; ' from dual; 

例如我的情况是: 表some_table_1s_name由数据从some_table_2s_name更新,我想 创建更新statments,但仅适用于需要行。

如何正确地做到这一点?

编辑: 看看我的答案,这是非常有用的理解我的意思。

回答

4

我发现怎么做是正确的,一般的例子执行上面的查询:

select 'update table_name set column_name = 
'||variable_from_target_table||' where column_code = 
'||variable_from_target_table_2||';' from target_table; 

例如:

select 'update some_table_1 set 
    s_name = ''' ||s_name|| ''' where s_code = ''' ||s_code|| ''';' from some_table_2; 

这generetes更新:

udpate some_table_1 set s_name = 'Jon' where s_code = 'Y'; 
udpate some_table_1 set s_name = 'Adam' where s_code = 'Y'; 
udpate some_table_1 set s_name = 'Matt' where s_code = 'Y'; 
udpate some_table_1 set s_name = 'Jess' where s_code = 'Y'; 
udpate some_table_1 set s_name = 'Carl' where s_code = 'Y'; 

我认为这是有用的,当你想产生许多陈述。

+0

我希望你的真实陈述比给定的例子更复杂。对于这样的更新,你不需要任何动态语句。 –

+0

@WernfriedDomscheit当然:) – Ice

+0

谢谢@Ice。我花了太多的时间来使它与Sqlite合作。 –

2
select 'update some_table_1 t1 set t1.s_name = ''' + D.CODE + ''' 
where some_table_2.s_code = some_table_1.code; ' from ADMDEPTMAST D; 

我在SQL2008

+0

我想收集更新不要更新表:)看看我的回答:) @Karthick Rajan – Ice