PLSQL中根据条件(其他变量的值)为变量赋值
Assign value to variable based on condition (value of other variable) in PLSQL
我想根据另一个变量是否为 null 为变量赋值。
我知道我在下面给出的相同代码中存在错误,
但我这样试过,但不知道如何完成。
虽然它清楚地说明了我想做什么。
declare
lv_var1 varchar2(500);
lv_var2 varchar2(20);
ld_date date;
begin
lv_var2 := 'sample value';
lv_var1 := case ld_date when not null
then lv_var2
end case;
dbms_output.put_line(lv_var1);
end;
我想在 ld_date
不为空时将 lv_var2
的值赋给 lv_var1
,否则 lv_var1
将为空。
我收到的错误是 ORA-06550
。
这可能是因为 case 语句,但我还能用什么代替它来获得结果。
请帮忙。
谢谢...
您在 CASE 表达式中有语法错误,使用时不需要 CASE
关键字和 END 关键字它在 SQL 中。 END
PL/SQL.
中需要关键字
使用 CASE 作为 SQL:
SQL> SET serveroutput ON
SQL> DECLARE
2 lv_var1 VARCHAR2(500);
3 lv_var2 VARCHAR2(20);
4 ld_date DATE;
5 BEGIN
6 ld_date:= SYSDATE;
7 lv_var2 := 'sample value';
8 lv_var1 :=
9 CASE
10 WHEN ld_date IS NOT NULL THEN
11 lv_var2
12 END;
13 dbms_output.put_line(lv_var1);
14 END;
15 /
sample value
PL/SQL procedure successfully completed.
SQL>
在 PL/SQL 中使用 CASE:
SQL> SET serveroutput ON
SQL> DECLARE
2 lv_var1 VARCHAR2(500);
3 lv_var2 VARCHAR2(20);
4 ld_date DATE;
5 BEGIN
6 ld_date := SYSDATE;
7 lv_var2 := 'sample value';
8 CASE
9 WHEN ld_date IS NOT NULL THEN
10 lv_var1 := lv_var2;
11 END CASE;
12 dbms_output.put_line(lv_var1);
13 END;
14 /
sample value
PL/SQL procedure successfully completed.
SQL>
同样可以用IF写成PL/SQL:
SQL> SET serveroutput ON
SQL> DECLARE
2 lv_var1 VARCHAR2(500);
3 lv_var2 VARCHAR2(20);
4 ld_date DATE;
5 BEGIN
6 ld_date := SYSDATE;
7 lv_var2 := 'sample value';
8 IF ld_date IS NOT NULL THEN
9 lv_var1 := lv_var2;
10 END IF;
11 dbms_output.put_line(lv_var1);
12 END;
13 /
sample value
PL/SQL procedure successfully completed.
SQL>
lv_var1 := case when ld_date is not null
then lv_var2
end;
或
select nvl2(ld_date,lv_var2,null) into lv_var1 from dual;
这应该有效:
declare
lv_var1 varchar2(500);
lv_var2 varchar2(20);
ld_date date;
begin
ld_date := null; -- initialize the variable with null, or another value like sysdate
lv_var2 := 'sample value';
lv_var1 := case when ld_date is not null -- case statement adapted
then lv_var2
end;
dbms_output.put_line(lv_var1);
end;
Hey you can try nvl2 function which can also suffice your requirement.
Hope this helps.
SET serveroutput ON;
DECLARE
lv_var1 VARCHAR2(500);
lv_var2 VARCHAR2(20);
ld_date DATE:= NULL;
BEGIN
lv_var2 := 'sample value';
SELECT nvl2(ld_date,lv_var2,NULL) INTO lv_var1 FROM dual;
dbms_output.put_line(lv_var1);
END;
lv_var1 := case when ld_date is not null
then lv_var2
else null end case_;
我想根据另一个变量是否为 null 为变量赋值。 我知道我在下面给出的相同代码中存在错误, 但我这样试过,但不知道如何完成。 虽然它清楚地说明了我想做什么。
declare
lv_var1 varchar2(500);
lv_var2 varchar2(20);
ld_date date;
begin
lv_var2 := 'sample value';
lv_var1 := case ld_date when not null
then lv_var2
end case;
dbms_output.put_line(lv_var1);
end;
我想在 ld_date
不为空时将 lv_var2
的值赋给 lv_var1
,否则 lv_var1
将为空。
我收到的错误是 ORA-06550
。
这可能是因为 case 语句,但我还能用什么代替它来获得结果。
请帮忙。 谢谢...
您在 CASE 表达式中有语法错误,使用时不需要 CASE
关键字和 END 关键字它在 SQL 中。 END
PL/SQL.
使用 CASE 作为 SQL:
SQL> SET serveroutput ON
SQL> DECLARE
2 lv_var1 VARCHAR2(500);
3 lv_var2 VARCHAR2(20);
4 ld_date DATE;
5 BEGIN
6 ld_date:= SYSDATE;
7 lv_var2 := 'sample value';
8 lv_var1 :=
9 CASE
10 WHEN ld_date IS NOT NULL THEN
11 lv_var2
12 END;
13 dbms_output.put_line(lv_var1);
14 END;
15 /
sample value
PL/SQL procedure successfully completed.
SQL>
在 PL/SQL 中使用 CASE:
SQL> SET serveroutput ON
SQL> DECLARE
2 lv_var1 VARCHAR2(500);
3 lv_var2 VARCHAR2(20);
4 ld_date DATE;
5 BEGIN
6 ld_date := SYSDATE;
7 lv_var2 := 'sample value';
8 CASE
9 WHEN ld_date IS NOT NULL THEN
10 lv_var1 := lv_var2;
11 END CASE;
12 dbms_output.put_line(lv_var1);
13 END;
14 /
sample value
PL/SQL procedure successfully completed.
SQL>
同样可以用IF写成PL/SQL:
SQL> SET serveroutput ON
SQL> DECLARE
2 lv_var1 VARCHAR2(500);
3 lv_var2 VARCHAR2(20);
4 ld_date DATE;
5 BEGIN
6 ld_date := SYSDATE;
7 lv_var2 := 'sample value';
8 IF ld_date IS NOT NULL THEN
9 lv_var1 := lv_var2;
10 END IF;
11 dbms_output.put_line(lv_var1);
12 END;
13 /
sample value
PL/SQL procedure successfully completed.
SQL>
lv_var1 := case when ld_date is not null
then lv_var2
end;
或
select nvl2(ld_date,lv_var2,null) into lv_var1 from dual;
这应该有效:
declare
lv_var1 varchar2(500);
lv_var2 varchar2(20);
ld_date date;
begin
ld_date := null; -- initialize the variable with null, or another value like sysdate
lv_var2 := 'sample value';
lv_var1 := case when ld_date is not null -- case statement adapted
then lv_var2
end;
dbms_output.put_line(lv_var1);
end;
Hey you can try nvl2 function which can also suffice your requirement. Hope this helps.
SET serveroutput ON;
DECLARE
lv_var1 VARCHAR2(500);
lv_var2 VARCHAR2(20);
ld_date DATE:= NULL;
BEGIN
lv_var2 := 'sample value';
SELECT nvl2(ld_date,lv_var2,NULL) INTO lv_var1 FROM dual;
dbms_output.put_line(lv_var1);
END;
lv_var1 := case when ld_date is not null
then lv_var2
else null end case_;