niedziela, 8 maja 2016

iSeries DB2 - reverse enginering składowych DB2 z poziomu SQL

Podczas pierwszego uruchomienia iSeries Navigator-a jest zakładana w schemacie QIWS procedura QZDGDBGS która pozwala odczytywać kod źródłowy zdefiniowanych elementów. W zależności od wersji systemu iSeries ma różna ilość parametrów. Procedura jest wywoływana z poziomu navigatora do generacji kodu. Nie jest bezpośrednio opisana w dokumentacji.

  • name - nazwa obiektu
  • schema - nazwa schemy
  • type - TABLE, VIEW, INDEX, ALIAS, FUNCTION, PROCEDURE, TYPE, CONSTRAINT, SCHEMA, TRIGGER, SEQUENCE

Ważne aby podany element do generacji oddzielić znakiem \0

Dla starszych wersji < 5.4 ma postać z 20 parametrami IN:
  • 01 - '02','01'
  • 02 - output file
  • 03 - output schema
  • 04 - output member
  • 05 - 0,1 isAppend 
  • 06 - 0,1 is format statement
  • 07 - date format
  • 08 - date separator
  • 09 - time format
  • 10 - time separator
  • 11 - decimal separator
  • 12 - 0,1 is as400 Extensions
  • 13 - naming convention
  • 14 - 0,1 is as400 Extensions & is label on
  • 15 - = 14
  • 16 - 0,1 is drop statements
  • 17 - '000','010' is info messages
  • 18 - 1 ?
  • 19 - '00001' ?
  • 20 - element selector
CALL QIWS.QZDGDBGS(
'01', '', '', '', '1',
'1', 'ISO', '-', 'ISO', '.',
'.', '0', 'SQL', '1', '1',
'0', '000' ,'1', '00001', '${name}\0${schema}\0${type}')


W nowszych wersjach > 7.x ma 25 parametrów IN (5 dodatkowych)
  • 21 - systemName
  • 22 - triggers
  • 23 - triggers
  • 24 - sql privileges
  • 25 - ?

CALL QIWS.QZDGDBGS(
'01', '', '', '', '1',
'1', 'ISO', '-', 'ISO', '.',
'.', '0', 'SQL', '1', '1',
'0', '000' ,'1', '00001', '${name}\0${schema}\0${type}',
'0', '1' ,'1', '1', '0'
)

Procedura wywołuje natywne mechanizmy na iSeries do pozyskania źródła elementu. Jedne z lepszych sposobów na pozyskanie poprawnych znaków w opisach elementów.

Rezultat wynikowy to kod źródłowy w postaci tekstu.

Niewiele o tym piszą którka wzmianka w http://newsolutions.de/forum-systemi-as400-i5-iseries/archive/index.php/t-19498.html

Od wersji 7.1.9 dstępne jako QSYS2.GENERATE_SQL w wersji z 33 parametry IN (specific name QSQGENSQL)

Na podstawie cwbundbf.jar DBG_GenerateSQLBean