J'ai accès à V7R1 AS/400 d'un client et je peux exécuter des requêtes comme SELECT NAME FROM INFORMATION_SCEMA.TABLES
et
SELECT
COLUMN_NAME,
DATA_TYPE,
TYPE_NAME,
COLUMN_SIZE,
COLUMN_TEXT
FROM "SYSIBM"."SQLCOLUMNS"
WHERE
TABLE_SCHEM = 'MYLIB'
AND TABLE_NAME = 'SOMEPF'
Tout va bien sur ça. Je suis Qsecofr sur ce système.
Cependant, sur un compte Greenscreen gratuit sur PUB1.DE exécutant v5r3m0, je ne peux pas exécuter cette commande de STRSQL ou de la commande DB2 à l'intérieur de qsh. J'ai essayé le format alternatif d'informations_schema/tables que j'ai vus aussi bien. Je reçois les erreurs suivantes de STRSQL:
> SELECT name FROM INFORMATION_SCHEMA/TABLES
TABLES in QSYS2 type *FILE not found.
> SELECT name FROM INFORMATION_SCHEMA.TABLES
Qualified object name TABLES not valid.
Est-ce un problème d'autorisations, une différence de syntaxe entre V5 et V7 ou autre chose?
Vous rencontrez la différence entre les modes "Convention de nommage du système" et "Convention de nommage SQL". À l'origine, le mode de nommage du système nécessite un caractère SLASH /
En tant que délimiteur lorsqu'il se qualifie avec un nom de schéma, tandis que le mode de nommage SQL a utilisé une période .
Délimiteur. Une mise à jour de V7.1 permet maintenant de délimiter lors de l'utilisation de la nommage du système. V5R3 n'est plus pris en charge, ni mis à jour. Sur une session d'écran vert, vous pouvez spécifier STRSQL NAMING(*SYS)
. Ou spécifier la convention de nommage du système sur les paramètres de chaîne de connexion JDBC/ODBC.
Il existe d'autres différences fonctionnelles entre les deux modes. Voir ICI et ici . Le chef d'entre eux est que le mode de nommage du système permet d'utiliser la liste de la bibliothèque, à condition que vous ne spécifiez pas de schéma actuel. Mais vous pouvez spécifier une bibliothèque de courant, avec la commande CHGCURLIB
dans CL ou dans SQL avec CALL QCMDEXC('CHGCURLIB MYLIB',15)
(où 15 est la longueur de cette commande d'échantillon)
DB2 pour i Catalog Vues peut être trouvé dans qsys2.
SELECT COLNO
,SYSTEM_COLUMN_NAME
,DATA_TYPE
,coalesce(PRECISION,LENGTH) as len
,smallint(SCALE) as dp
,STORAGE as bytes
,varchar(COLUMN_TEXT,50) as fldtext
,varchar(substr(LABEL, 1,20),20) as hdg1
,varchar(substr(LABEL,21,20),20) as hdg2
,varchar(substr(LABEL,41,20),20) as hdg2
,CCSID
,IS_NULLABLE
FROM QSYS2/SYSCOLUMNS
WHERE SYSTEM_TABLE_SCHEMA = 'MYLIB'
AND SYSTEM_TABLE_NAME = 'SOMEPF'
La plupart des magasins IBM I ont utilisé des noms de 10 caractères (règles du système d'exploitation) et n'a généralement pas utilisé de noms de 128 caractères autorisés par db2, donc généralement System_Column_Name, System_Table_Name et System_Schema_Name seront suffisants.
Le référence V5R3 SQL est disponible en PDF, comme Dave Jones mentionné.
Je ne suis pas expert sur DB2 pour Iseries (ma seule expérience avec elle aide les autres en ligne!), Donc cela peut être tout à fait faux ...
I pense Support pour la norme INFORMATION_SCHEMA
n'a été ajouté que récemment. Comme dans DB2 pour LUW (que je suis plutôt plus familier), INFORMATION_SCHEMA
est probablement juste un ensemble relativement mince de vues sur le catalogue de systèmes "réel" sur DB2 pour les iSeries utilisées dans le schéma QSYS2 (en DB2 pour LUW, c'est dans SysCat, et dans le DB2 pour Z/OS, c'est dans Sysibm) .
Il semble que le DB2 pour ISERIES V5RX DOCS n'est plus en ligne, mais s'il s'agit de rien comme le catalogue DB2 pour z/OS, vous trouverez les informations souhaitées dans qsys2.systables (que vous devrez peut-être interroger en tant que QSYS2/Systables en fonction du interface que vous utilisez). De ma mémoire certes rouillée, vous voudrez quelque chose comme:
SELECT TABLE_OWNER, TABLE_NAME FROM FROM QSYS2.SYSTABLES
Où est le schéma de Table_Welener et Table_Name est le nom. Vous devriez trouver diverses autres vues utiles dans le catalogue comme sysviews, syscolumns, systrygois, etc. Cela peut valoir la peine de télécharger les PDF de l'ancien DB2 pour Iseries Docs qui semblent toujours être disponibles. Je soupçonne que les informations sur la structure du catalogue du système seront dans la "référence SQL".