【问题标题】:PL/SQL concatenate column with variable in UPDATE statementPL/SQL 将列与 UPDATE 语句中的变量连接起来
【发布时间】:2018-03-07 15:17:25
【问题描述】:

我想将现有用户名更新为以下格式 user+(value of loop iterator) 。有什么建议吗?当前语句在执行后显示值'app2nd'

UPDATE users
SET user_name = 'user'|| v_count                
WHERE  id = c_id;

【问题讨论】:

  • “app2nd”在哪里发挥作用,它似乎不是查询的一部分?另外, v_count 应该是行 ID 吗?这是完整的查询吗?
  • “当前语句显示”是什么意思? UPDATE 语句不显示任何内容。

标签: plsql concatenation string-concatenation


【解决方案1】:

当然,您应该提供更多信息。同时,由于我有一些空闲时间,有两个选项供您选择:第一个不需要任何 循环(您提到过),但使用 ROWNUM:

SQL> select * from test;

    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON

SQL> update test set
  2    dname = 'user' || rownum       --> this
  3    where deptno >= 20;

3 rows updated.

SQL> select * From test;

    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK
        20 user1          DALLAS
        30 user2          CHICAGO
        40 user3          BOSTON

SQL>
SQL> rollback;

Rollback complete.

SQL>

另一个选项,LOOP发明了,因为你没有解释你有哪种循环:

SQL> begin
  2    for cur_r in (select deptno, dname,
  3                    row_number() over (order by deptno) rn
  4                    from dept)
  5    loop
  6      update test set
  7        dname = 'user' || cur_r.rn
  8        where deptno = cur_r.deptno;
  9    end loop;
 10  end;
 11  /

PL/SQL procedure successfully completed.

SQL> select * From test;

    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 user1          NEW YORK
        20 user2          DALLAS
        30 user3          CHICAGO
        40 user4          BOSTON

SQL>

如果有帮助,那就好。如果没有,你知道该怎么做——用诗意的方式表达自己。

【讨论】:

  • 谢谢你,这正是我想要的:)
猜你喜欢
  • 2011-01-28
  • 2014-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多