【问题标题】:Update one column values with another column values using variables使用变量将一列值更新为另一列值
【发布时间】:2012-12-11 07:20:35
【问题描述】:

下面是一个查询:

`UPDATE table1 SET column1 = coulmn2;`

这里,column1 的值将被更新为 column2 的值。

但是,我正在编写一个 PROCEDURE,我想在其中更新列值,在循环中通过字符串变量传递列名。

例如

`str1 varchar(50) := 'column1';`
`str2 varchar(50) := 'column2';`
`str3 varchar(200) := 'update table1 set' + str1 + '=' + str2;`
`execute immediate str3;`

但是,这里的查询执行为:column1 = 'column2' column1 中的所有值都由“column2”字符串更新,而不是由 column2 的值更新。

我该如何解决这个问题?

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    您必须将 SQL 语句构建为字符串,然后使用“立即执行”执行它;

    create procedure ...
      sql_txt varchar2(32000)
    begin
      sql_txt := ...;
      execute immediate sql_txt;
    end;
    

    【讨论】:

    • 我已经在上面的代码中做到了。我的问题是,从我的代码中, str1 被视为列名,但 str2 被视为字符串而不是列名。我希望 str2 也被解释为列名。
    • 如果您运行 DBMS_Output 来查看您正在构建的 SQL,您将看到错误在哪里。例如,您在“set”和以下单引号之间没有空格,所以实际上您正在构造一条 SQL 语句“update table1 setcolumn1=column2”,所以我怀疑您列出的代码是否正在运行。
    • 请假设没有语法错误。我对逻辑感到困扰。查询正在运行,但是我没有实现我想要做的事情。我希望你明白,我想说什么。你真的了解查询在做什么吗??
    • 如果 str2 被视为字符串而不是列名,那么这是语法问题。你实际生成的 SQL 语句是什么样子的
    • 是的。所以,我希望将 str2 的分辨率作为列名而不是字符串值。
    猜你喜欢
    • 1970-01-01
    • 2014-11-25
    • 1970-01-01
    • 2010-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-10
    相关资源
    最近更新 更多