我想根据另一个变量是否为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;
我想在lv_var2
不为空时将lv_var1
的值分配到ld_date
,否则lv_var1
将为空。
我得到的错误是ORA-06550
。
这可能是因为case语句,但我可以用什么代替它来获得结果。
请帮忙。 谢谢......
答案 0 :(得分:1)
CASE 表达式中存在语法错误,在 SQL中使用 END 关键字时不需要CASE
关键字。 PL / SQL 中需要END
个关键字。
将 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>
可以使用 PL / SQL
中的 IF 编写相同的内容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>
答案 1 :(得分:1)
lv_var1 := case when ld_date is not null
then lv_var2
else null end case_;
答案 2 :(得分:0)
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;
答案 3 :(得分:0)
这应该有效:
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;
答案 4 :(得分:0)
嘿,你可以尝试nvl2功能,这也足以满足你的要求。 希望这会有所帮助。
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;