DB2 "описывает" вывод таблицы консоли не читается - PullRequest
0 голосов
/ 18 января 2020

Я не знаю, как назвать этот «грязный консольный вывод», поэтому я не могу найти решение для Google.

screenshot of terminal

Я запускаю db2 describe indexes for table TABLENAME show detail

Как я могу прочитать вывод этой команды в удобочитаемом формате?

Ответы [ 2 ]

2 голосов
/ 18 января 2020

Вы можете поместить в файл следующее и запустить его из Db2 CLP:

$ db2 -f myfile. sql

--#SET TERMINATOR @

SET SERVEROUTPUT ON@

BEGIN
  DECLARE L_INDSCHEMA VARCHAR(128);
  DECLARE L_INDNAME   VARCHAR(128);
  DECLARE L_UNIQUE    VARCHAR(128);
  DECLARE L_COLCOUNT  SMALLINT;
  DECLARE L_IDXTYPE   CHAR(26);
  DECLARE L_IDXPART   CHAR(18);
  DECLARE L_IDXID     SMALLINT;
  DECLARE L_DATATYPE  VARCHAR(128);
  DECLARE L_HASHED    CHAR(1);
  DECLARE L_LENGTH    SMALLINT;
  DECLARE L_PATTERN   VARCHAR(500);
  DECLARE L_COLNAMES  VARCHAR(1984);

  DECLARE SQLSTATE    CHAR(5);
  DECLARE l1 RESULT_SET_LOCATOR VARYING;

  CALL ADMIN_CMD('DESCRIBE INDEXES FOR TABLE SYSIBM.SYSTABLES SHOW DETAIL');
  ASSOCIATE RESULT SET LOCATOR (l1) WITH PROCEDURE ADMIN_CMD;
  ALLOCATE C1 CURSOR FOR RESULT SET l1;
  L1: LOOP
    FETCH C1 INTO 
        L_INDSCHEMA, L_INDNAME, L_UNIQUE, L_COLCOUNT, L_IDXTYPE, L_IDXPART
      , L_IDXID, L_DATATYPE, L_HASHED, L_LENGTH, L_PATTERN, L_COLNAMES
    ;
    IF SQLSTATE = '02000' THEN LEAVE L1; END IF;
    CALL DBMS_OUTPUT.PUT_LINE(x'0a' || RTRIM(L_INDSCHEMA) || '.' || L_INDNAME );
    CALL DBMS_OUTPUT.PUT_LINE('  UNIQUE RULE : ' || L_UNIQUE);
    CALL DBMS_OUTPUT.PUT_LINE('  COLUMN COUNT: ' || L_COLCOUNT);
    CALL DBMS_OUTPUT.PUT_LINE('  INDEX TYPE  : ' || L_IDXTYPE);
    --CALL DBMS_OUTPUT.PUT_LINE('  INDEX PART  : ' || L_IDXPART);
    CALL DBMS_OUTPUT.PUT_LINE('  IID         : ' || L_IDXID);
    CALL DBMS_OUTPUT.PUT_LINE('  COLUMN NAMES: ' || L_COLNAMES);
  END LOOP;
  CLOSE C1;
END
@
1 голос
/ 18 января 2020

Это просто длинные строки, обернутые вокруг ширины вашей консоли. Вы можете передать вывод команды в vim или другой редактор, чтобы избежать переноса:

db2 describe indexes for table TABLENAME | vim

Невозможно указать процессору командной строки DB2 выводить данные в другом формате.

...