Печатать переменные в 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;
С Новым годом