问题 在pl / sql中打印变量


我有以下代码:

DECLARE
   v_hire_date DATE:='30-Oct-2000';
   v_six_years BOOLEAN;  
BEGIN
IF MONTHS_BETWEEN(SYSDATE,v_fecha_contrato)/12 > 6 THEN
      v_six_years:=TRUE;
ELSE
      v_six_years:=FALSE;
END IF;
DBMS_OUTPUT.PUT_LINE('flag '||v_six_years);
END;

我想打印变量的值 v_six_years,但我收到错误:

ORA-06550: line 10, column 24:
PLS-00306: wrong number or types of arguments in call to '||'
ORA-06550: line 10, column 3

如何打印变量的值 v_six_years


1157
2017-10-22 04:08


起源



答案:


看来你不能连续 varchar 和 boolean

定义此功能:

FUNCTION BOOLEAN_TO_CHAR(FLAG IN BOOLEAN)
RETURN VARCHAR2 IS
BEGIN
  RETURN
   CASE FLAG
     WHEN TRUE THEN 'TRUE'
     WHEN FALSE THEN 'FALSE'
     ELSE 'NULL'
   END;
END;

并像这样使用它:

DBMS_OUTPUT.PUT_LINE('flag '|| BOOLEAN_TO_CHAR(v_six_years));

11
2017-10-22 04:21





您可以使用以下命令在PLSQL中打印布尔值

dbms_output.put_line('v_six_years '||  sys.diutil.bool_to_int(v_six_years));

6
2017-12-22 19:17





dbms_output.put_line 没有重载接受一个布尔参数。简单的一行答案就是

dbms_output.put_line(v_six_years = true时的情况,然后是'true',否则'false'结束);


3
2017-12-05 10:30





PL / SQL没有表示布尔值的文字。您必须将v_six_years布尔值转换为字符串,或者如果要打印该值,则不使用布尔值。 PL / SQL布尔值非常适合逻辑,但如果您希望显示值,则无用。

DECLARE
   v_hire_date DATE:='30-Oct-2000';
   v_six_years VARCHAR2(1);  
BEGIN
IF MONTHS_BETWEEN(SYSDATE,v_fecha_contrato)/12 > 6 THEN
      v_six_years:='1';
ELSE
      v_six_years:='0';
END IF;
DBMS_OUTPUT.PUT_LINE('flag '||v_six_years);
END;

要么

DECLARE
   v_hire_date DATE:='30-Oct-2000';
   v_six_years BOOLEAN;  
   v_six_years_display VARCHAR2(5);
BEGIN
IF MONTHS_BETWEEN(SYSDATE,v_fecha_contrato)/12 > 6 THEN
      v_six_years:=TRUE;
      v_six_years_display := 'true';
ELSE
      v_six_years:=FALSE;
      v_six_years_display := 'false';
END IF;
DBMS_OUTPUT.PUT_LINE('flag '||v_six_years_display);
END;

1
2017-10-22 04:20





declare
     v_line varchar2(40); --declare
begin
     v_line := 'Happy new year'; --assigns
     dbms_output.put_line (v_line); --display 
end;

新年快乐


-5
2017-11-11 00:47



能不能请你 编辑 解释为什么这段代码回答了这个问题?仅代码的答案是 灰心,因为他们没有教解决方案。 (此外,代码格式严重缺乏。使用Ctrl-K和 在提交之前预览您的帖子。) - Nathan Tuggy
这不回答OP问题。 dbms_output.put_line 可以采用varchar2参数但不是布尔值,这就是问题所在。 - Aniket Thakur


答案:


看来你不能连续 varchar 和 boolean

定义此功能:

FUNCTION BOOLEAN_TO_CHAR(FLAG IN BOOLEAN)
RETURN VARCHAR2 IS
BEGIN
  RETURN
   CASE FLAG
     WHEN TRUE THEN 'TRUE'
     WHEN FALSE THEN 'FALSE'
     ELSE 'NULL'
   END;
END;

并像这样使用它:

DBMS_OUTPUT.PUT_LINE('flag '|| BOOLEAN_TO_CHAR(v_six_years));

11
2017-10-22 04:21





您可以使用以下命令在PLSQL中打印布尔值

dbms_output.put_line('v_six_years '||  sys.diutil.bool_to_int(v_six_years));

6
2017-12-22 19:17





dbms_output.put_line 没有重载接受一个布尔参数。简单的一行答案就是

dbms_output.put_line(v_six_years = true时的情况,然后是'true',否则'false'结束);


3
2017-12-05 10:30





PL / SQL没有表示布尔值的文字。您必须将v_six_years布尔值转换为字符串,或者如果要打印该值,则不使用布尔值。 PL / SQL布尔值非常适合逻辑,但如果您希望显示值,则无用。

DECLARE
   v_hire_date DATE:='30-Oct-2000';
   v_six_years VARCHAR2(1);  
BEGIN
IF MONTHS_BETWEEN(SYSDATE,v_fecha_contrato)/12 > 6 THEN
      v_six_years:='1';
ELSE
      v_six_years:='0';
END IF;
DBMS_OUTPUT.PUT_LINE('flag '||v_six_years);
END;

要么

DECLARE
   v_hire_date DATE:='30-Oct-2000';
   v_six_years BOOLEAN;  
   v_six_years_display VARCHAR2(5);
BEGIN
IF MONTHS_BETWEEN(SYSDATE,v_fecha_contrato)/12 > 6 THEN
      v_six_years:=TRUE;
      v_six_years_display := 'true';
ELSE
      v_six_years:=FALSE;
      v_six_years_display := 'false';
END IF;
DBMS_OUTPUT.PUT_LINE('flag '||v_six_years_display);
END;

1
2017-10-22 04:20





declare
     v_line varchar2(40); --declare
begin
     v_line := 'Happy new year'; --assigns
     dbms_output.put_line (v_line); --display 
end;

新年快乐


-5
2017-11-11 00:47



能不能请你 编辑 解释为什么这段代码回答了这个问题?仅代码的答案是 灰心,因为他们没有教解决方案。 (此外,代码格式严重缺乏。使用Ctrl-K和 在提交之前预览您的帖子。) - Nathan Tuggy
这不回答OP问题。 dbms_output.put_line 可以采用varchar2参数但不是布尔值,这就是问题所在。 - Aniket Thakur