2012-10-22 3 views
11

나는 다음과 같은 코드가 있습니다인쇄 변수

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의 값?

답변

11

당신이 varcharboolean을 CONCAT 수없는 것 같다.

이 함수를 정의합니다

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)); 
1

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; 
6

당신은 PLSQL에서 부울 값을 인쇄 아래 사용할 수 있습니다

dbms_output.put_line('v_six_years '|| sys.diutil.bool_to_int(v_six_years)); 
-5
declare 
    v_line varchar2(40); --declare 
begin 
    v_line := 'Happy new year'; --assigns 
    dbms_output.put_line (v_line); --display 
end; 

새로운 해피 연도

0 이 코드는 질문에 대한 답 이유에 대한 설명에서 [편집]을 기쁘시게 할 수
+2

것 받아 들일 과부하가되지 않는 이유는 무엇입니까? 코드 전용 답변은 솔루션을 가르치지 않기 때문에 [낙담] (http://meta.stackexchange.com/q/148272/274165)입니다. (또한 코드 서식이 비참하게 부족합니다. ** 제출하기 전에 Ctrl-K 및 ** 미리보기를 사용하십시오.) –

+0

이것은 OP 질문에 응답하지 않습니다. 'dbms_output.put_line'은 varchar2 인수를 취할 수는 있지만 boolean 값은 사용할 수 없습니다. –

3

은 부울 argument.Simple 한 줄 답변이

dbms_output.put_line(case when v_six_years = true then 'true' else 'false' end);