简体   繁体   English

Oracle 11g中的更新

[英]Update in Oracle 11g

I have to update a field in a table. 我必须更新表中的字段。 I'm using following queries. 我正在使用以下查询。 Help me, which one is right? 帮助我,哪一个是对的?

update table1
set col1=<value>,col2=<value>....
from table1 t,table2 s
where t.id=s.num
  and s.code='abc';

or 要么

update table1
set col1=<value>,col2=<value>....
where table1.id=table2.num
  and table2.code='abc';

Which one is right? 哪一个是对的? Or both are incorrect? 或两者都不正确? Please suggest some way... 请提出一些建议......

Neither is correct. 两者都不正确。 It's not clear from your fragment what you are trying to do, but the syntax to update one table with values from another would be more like: 从你的片段中你不清楚你要做什么,但用另一个表更新一个表的语法更像是:

update table1
set (col1, col2) =
( select col1, col2
  from   table2
  where  table2.num = table1.id
  and    table2.code = 'abc'
)
where table1.id in (select num from table2);

The final WHERE clause is to prevent updating all non-matched table1 rows with nulls. 最后的WHERE子句是为了防止使用null更新所有不匹配的table1行。

Another method that works when table1 is "key preserved" in the query is: 当table1在查询中“密钥保留”时,另一种方法是:

update
( select table1.id, table1.col1, table1.col2
  ,      table2.col1 as new_col1, table2.col as new_col2
  from   table1
         join table2 on table2.num = table1.id
)
set col1 = new_col1, col2 = new_col2;
MERGE
INTO table1 t1
USING (
 SELECT *
 FROM table2
 WHERE table2.code = 'abc'
) t2
ON (t1.id = t2.num)
WHEN MATCHED THEN
  UPDATE
  SET col1 = t2.value1, col2 = t2.value2

Remember to always qualify the SET statement, ie t2.value1 . 请记住始终限定SET语句,即t2.value1 No error is thrown when ambiguous. 不明确时不会抛出任何错误。 In other words, SET col1 = value1 would be t2.value1 , but would be t1.value1 if t2.value1 was missing. 换句话说, SET col1 = value1将是t2.value1 ,但如果缺少t2.value1则为t1.value1

Based on your last remark, you need to update table table1 with fixed values that are not in a database table. 根据您的上一条注释,您需要使用不在数据库表中的固定值更新表table1。 But only for rows in table1 that match with specific rows in table 2. In that case you can use this statement: 但仅适用于table1中与表2中的特定行匹配的行。在这种情况下,您可以使用以下语句:

update table1 t1
set t1.col1='value',
t1.col2='value2',
t1.col3='value3'
where exists ( select ''
               from table2 s 
               where  t1.id=s.num 
               and s.code='abc'
);

I have used the following query: 我使用了以下查询:

update (select col1 from table1 t inner join table2 s
on t.id=s.num where s.code='abc') t1
set t1.col1='value';

it worked fine.. 它工作得很好..

But when I used it for updating multiple cols, it produced an error: 但是当我用它来更新多个cols时,它产生了一个错误:

Missing right parenthesis. 缺少右括号。

Could you help... 你能帮忙吗...

update (select col1,col2,col3 from table1 t inner join table2 s
on t.id=s.num where s.code='abc') t1
set t1.col1='value',t1.col2='value2',t1.col3='value3';

I have to add values on click event of button1. 我必须在button1的click事件上添加值。 I have used the following code: 我使用了以下代码:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    val = TextBox1.Text

    If RadioButton1.Checked = True Then
        rcvd = RadioButton1.Text
    ElseIf RadioButton2.Checked = True Then
        rcvd = RadioButton2.Text
    End If

    If RadioButton5.Checked = True Then
        type = RadioButton5.Text
    ElseIf RadioButton6.Checked = True Then
        type = RadioButton6.Text
    ElseIf RadioButton7.Checked = True Then
        type = RadioButton8.Text
    ElseIf RadioButton9.Checked = True Then
        type = RadioButton9.Text
    ElseIf RadioButton10.Checked = True Then
        type = RadioButton10.Text
    End If

    Try

        XXX = "update(select rcvd,amount,instype,chq,ucode,uname,remarks from fapark04 f inner join sumast04 s on f.party=s.account where s.abnmn=' " & val & " ' ) fa set fa.rcvd=' " & rcvd & " ', fa.amount= " & TextBox5.Text & " ,fa.instype='" & type & " ',fa.chq= " & TextBox9.Text & " ,fa.ucode=' " & TextBox12.Text & "',fa.uname='" & TextBox13.Text & "',fa.remarks='" & TextBox14.Text & "' "

        cmd1 = New OracleCommand(XXX, con)
        cmd1.ExecuteNonQuery()

    Catch ex As Exception
        MsgBox("A Run time error occured!!!", ex.ToString)

    End Try

End Sub

This does not updates the rows but when same query is fired at the backend it updates the rows. 这不会更新行,但在后端触发相同的查询时会更新行。

When updated from front end it shows 0 rows updated. 从前端更新时,它显示0行已更新。 Why is it so?? 为什么会这样?

help.. 救命..

In your query, you are using two tables in where clause condition. 在您的查询中,您在where子句条件中使用两个表。 So you have to either join or subquery or merge type, use so that u can get correct output 因此,您必须加入或子查询或合并类型,使用以便您可以获得正确的输出

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM