печать переменных в 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?
5 ответов:
Похоже, вы не можете объединить
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));
Вы можете использовать НИЖЕ, чтобы вывести логическое значение в PLSQL
dbms_output.put_line('v_six_years '|| sys.diutil.bool_to_int(v_six_years));
dbms_output.put_lineне перегружен для принятия логического аргумента.Простой ответ в одну строку будетDbms_output.put_line (случай, когда v_six_years = true, то' true 'else' false ' end);
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;
declare v_line varchar2(40); --declare begin v_line := 'Happy new year'; --assigns dbms_output.put_line (v_line); --display end;С Новым годом
Comments