【问题标题】:printing variables in pl/sql在 pl/sql 中打印变量
【发布时间】:2012-10-11 20:59:54
【问题描述】:

我有以下代码:

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的值?

【问题讨论】:

    标签: plsql oracle10g


    【解决方案1】:

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

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

    testdb=> \echo :foo
    bar
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:
        declare
             v_line varchar2(40); --declare
        begin
             v_line := 'Happy new year'; --assigns
             dbms_output.put_line (v_line); --display 
        end;
        

        新年快乐

        【讨论】:

        • 能否请您 edit 解释为什么这段代码回答了这个问题?纯代码答案是discouraged,因为它们不教授解决方案。 (此外,代码格式严重不足。使用 Ctrl-K 并在提交之前预览您的帖子。)
        • 这不回答 OP 问题。 dbms_output.put_line 可以接受 varchar2 参数,但不能接受布尔值,这就是问题所在。
        【解决方案4】:

        您似乎无法连接 varcharboolean

        定义这个函数:

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

        【讨论】:

          【解决方案5】:

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

          dbms_output.put_line('v_six_years '||  sys.diutil.bool_to_int(v_six_years));
          

          【讨论】:

            【解决方案6】:

            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;
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2021-12-26
              • 1970-01-01
              相关资源
              最近更新 更多