Plsql 在pl/sql中打印变量

Plsql 在pl/sql中打印变量,plsql,oracle10g,Plsql,Oracle10g,我有以下代码: 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);

我有以下代码:

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_六年
的值,但得到错误:

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

如何打印变量的值
v_六年

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;


似乎您无法将
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\u输出。put\u行
不会重载以接受布尔参数。简单的单行答案是

dbms_output.put_line(当v_六年=true,则为'true'或'false'结束时)


您可以使用
\echo
meta命令打印变量的内容。从
man psql

要检索变量的内容,请在名称前面加一个冒号,例如:

testdb=> \echo :foo
bar

你能解释一下为什么这个代码能回答这个问题吗?代码唯一的答案是,因为他们不教解决方案。(此外,代码格式非常缺乏。请在提交之前使用Ctrl-K并预览您的文章。)这并不能回答问题
dbms\u输出。put\u行
可以接受varchar2参数,但不能接受布尔值,这就是问题所在。
declare
     v_line varchar2(40); --declare
begin
     v_line := 'Happy new year'; --assigns
     dbms_output.put_line (v_line); --display 
end;
testdb=> \echo :foo
bar