Печатать переменные в 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?

Ответ 1

Кажется, вы не можете выполнить 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));

Ответ 2

Вы можете использовать ниже, чтобы напечатать Boolean Value в PLSQL

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

Ответ 3

dbms_output.put_line не перегружается, чтобы принять логический аргумент. Простой ответ на один ответ будет

dbms_output.put_line (случай, когда v_six_years = true, затем "true" else "false" end);

Ответ 4

PL/SQL не имеет литерала для представления булевых значений. Вам нужно либо преобразовать значение v_six_years в строку, либо не использовать логическое значение, если вы хотите напечатать значение. PL/SQL booleans отлично подходят для логики, но бесполезны, если вы хотите отобразить значение.

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;

Ответ 5

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

С Новым годом