19

我有以下代码:

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

4

6 回答 6

12

看来你不能 concatvarcharboolean.

定义这个函数:

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));
于 2012-10-22T04:21:22.823 回答
9

您可以使用下面在 PLSQL 中打印布尔值

dbms_output.put_line('v_six_years '||  sys.diutil.bool_to_int(v_six_years));
于 2013-12-22T19:17:11.537 回答
3

dbms_output.put_line不会重载以接受布尔参数。简单的一行答案是

dbms_output.put_line(当 v_six_years = true 然后 'true' 否则 'false' end 时的情况);

于 2015-12-05T10:30:00.417 回答
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;
于 2012-10-22T04:20:49.500 回答
0

\echo您可以使用元命令打印变量的内容。来自man psql

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

testdb=> \echo :foo
bar
于 2020-01-16T18:09:01.230 回答
-5
declare
     v_line varchar2(40); --declare
begin
     v_line := 'Happy new year'; --assigns
     dbms_output.put_line (v_line); --display 
end;

新年快乐

于 2015-11-11T00:47:30.557 回答