如何为PL/SQL块的表达式中的变量赋值?

Mah*_*iya 3 oracle plsql

当我运行此脚本时,它会在此语句中返回错误 no1:=(no1+no2)-(no2:=no1);

declare
    no1 number(3):=31;
    no2 number(3):=34;
begin
    dbms_output.put_line('Before swap');
    dbms_output.put_line('No1 : '||no1||'  No2 : '||no2 );
--  no1:=(no1+no2)-(no2:=no1);  generate error
    dbms_output.put_line('After swap');
    dbms_output.put_line('No1 : '||no1||'  No2 : '||no2 );
end;
Run Code Online (Sandbox Code Playgroud)

Jus*_*ave 11

除了在PL/SQL中使用xor技巧之外,您还可以使用SQL语句

DECLARE
  a number := 17;
  b number := 42;
BEGIN
  SELECT a, b
    INTO b, a
    FROM dual;
  dbms_output.put_line( 'a = ' || a );
  dbms_output.put_line( 'b = ' || b );
END;
Run Code Online (Sandbox Code Playgroud)

它在不使用临时变量的情况下交换两个变量

SQL> ed
Wrote file afiedt.buf

  1  DECLARE
  2    a number := 17;
  3    b number := 42;
  4  BEGIN
  5    SELECT a, b
  6      INTO b, a
  7      FROM dual;
  8    dbms_output.put_line( 'a = ' || a );
  9    dbms_output.put_line( 'b = ' || b );
 10* END;
SQL> /
a = 42
b = 17

PL/SQL procedure successfully completed.
Run Code Online (Sandbox Code Playgroud)