【问题标题】:DBMS output not printingDBMS 输出不打印
【发布时间】:2019-07-29 14:29:45
【问题描述】:

您好,我想在 PLSql 中编写 ISBN 验证。但是 dbms_output.put_line 不输出任何东西。我没有任何错误,但 dbms_output 是黄色的,带有警告:

无法解析符号“dbms_output”

检查信息:此检查执行未解析的 SQL 引用检查。

。我在 DataGrip 工作,是的,我启用了 SYS.dbms_output。

DECLARE
  v_isbn VARCHAR(13) := 9783161484100;
BEGIN
  isbn_validation(v_isbn);
end;

CREATE OR REPLACE PROCEDURE isbn_validation
(
    p_isbn VARCHAR
)
IS
  v_isbn VARCHAR(13);
  v_checksum INTEGER := 0;
BEGIN
    if LENGTH(p_isbn) = 10 THEN
        v_isbn := CONCAT('978',p_isbn);
        v_checksum := isbn13_checksum(v_isbn);
        if(v_checksum = -1)THEN dbms_output.put_line(v_isbn || ' is a invalid isbn');
        else
          v_isbn:=CONCAT(v_isbn,CAST(v_checksum AS CHAR));
          isbn_validation(v_isbn);
          dbms_output.put_line(v_isbn || ' is a valid isbn');
        end if;
    elsif LENGTH(v_isbn) = 13 THEN
      v_checksum := isbn13_checksum(v_isbn);
        if(v_checksum = -1)THEN dbms_output.put_line(v_isbn || ' is a invalid isbn');
        else
          v_isbn:=CONCAT(v_isbn,CAST(v_checksum AS CHAR));
          isbn_validation(v_isbn);
          dbms_output.put_line(v_isbn || ' is a valid isbn');
        end if;
    end if;
end;



CREATE OR REPLACE FUNCTION isbn13_checksum
(
    v_isbn VARCHAR
)
RETURN INTEGER
IS
  v_checksum INTEGER := 0;
  v_remainder INTEGER := 0;
BEGIN
    FOR i IN 1..12 LOOP
        if MOD(i,2) = 1 THEN
          if SUBSTR(v_isbn,i) = 'X' THEN
            v_checksum := v_checksum + 10;
          else v_checksum := v_checksum + CAST(SUBSTR(v_isbn,i) AS INTEGER);
          end if;
        else
          if SUBSTR(v_isbn,i) = 'X' THEN
            v_checksum := v_checksum + (10 * 3);
          else v_checksum := v_checksum + (CAST(SUBSTR(v_isbn,i) AS INTEGER) * 3);
          end if;
        end if;
    end loop;
    v_remainder := mod(v_checksum, 10);
    if v_remainder = 0 THEN RETURN -1;
    elsif(10-v_remainder)=10 THEN RETURN 0;
    else RETURN (10 - v_remainder);
    end if;
end;

【问题讨论】:

    标签: oracle plsql datagrip dbms-output


    【解决方案1】:

    尝试使用 dbms_output.enable 显式启用 DBMS_OUTPUT

    DECLARE
      v_isbn VARCHAR(13) := 9783161484100;
    BEGIN
    dbms_output.enable;
      isbn_validation(v_isbn);
    end;
    

    【讨论】:

    • 这不会在客户端启用它。
    【解决方案2】:

    执行SET SERVEROUTPUT ON 并再次运行您的代码。

    【讨论】:

      【解决方案3】:

      可能是这个错误:https://youtrack.jetbrains.com/issue/DBE-4702 请使用最新版本。

      【讨论】:

        猜你喜欢
        • 2019-09-19
        • 1970-01-01
        • 2016-04-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-19
        相关资源
        最近更新 更多