Tenho acesso ao V7R1 AS/400 de um cliente e posso executar consultas como SELECT NAME FROM INFORMATION_SCEMA.TABLES
e
SELECT
COLUMN_NAME,
DATA_TYPE,
TYPE_NAME,
COLUMN_SIZE,
COLUMN_TEXT
FROM "SYSIBM"."SQLCOLUMNS"
WHERE
TABLE_SCHEM = 'MYLIB'
AND TABLE_NAME = 'SOMEPF'
Muito bem nisso. Eu sou QSECOFR 1 nesse sistema.
No entanto, em uma conta greenscreen gratuita em PUB1.DE executando V5R3M0, não consigo executar esse comando do STRSQL ou do comando db2 dentro do QSH. Eu tentei o formato alternativo de INFORMATION_SCHEMA/TABLES que eu vi por aí também. Eu recebo os seguintes erros do 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.
Isso é um problema de permissão, uma diferença de sintaxe entre V5 e V7 ou algo mais?
1 - Perfil de usuário do Agente de Segurança do Sistema Operacional
Você está experimentando a diferença entre os modos "convenção de nomenclatura do sistema" e "convenção de nomenclatura SQL". Originalmente, o modo de nomenclatura do sistema exigia um caractere de barra
/
como delimitador ao qualificar com um nome de esquema, enquanto o modo de nomenclatura SQL usava um.
delimitador de ponto. Uma atualização para v7.1 agora permite qualquer delimitador ao usar a nomenclatura do sistema. O V5R3 não é mais suportado nem atualizado. Em uma sessão de tela verde, você pode especificarSTRSQL NAMING(*SYS)
. Ou especifique a convenção de nomenclatura do sistema em suas configurações de string de conexão JDBC/ODBC.Existem outras diferenças funcionais entre os dois modos. Veja aqui e aqui . A principal delas é que o modo de nomenclatura do sistema permite o uso da lista de bibliotecas, desde que você não especifique um ESQUEMA ATUAL. Mas você pode especificar uma biblioteca atual, com o
CHGCURLIB
comando em CL ou em SQL comCALL QCMDEXC('CHGCURLIB MYLIB',15)
(onde 15 é o comprimento deste exemplo de comando)As exibições de catálogo do DB2 para i podem ser encontradas em QSYS2.
A maioria das lojas do IBM i usava nomes de 10 caracteres (regras do sistema operacional) e normalmente não usava nomes de 128 caracteres permitidos pelo DB2, portanto, geralmente SYSTEM_COLUMN_NAME, SYSTEM_TABLE_NAME e SYSTEM_SCHEMA_NAME serão suficientes.
O V5R3 SQL Reference está disponível como um PDF, como Dave Jones mencionou.
Não sou especialista em DB2 para iSeries (minha única experiência com ele é ajudar outras pessoas online!), Portanto, isso pode estar totalmente errado ...
Acho que o suporte para o padrão
INFORMATION_SCHEMA
só foi adicionado recentemente. Como no DB2 para LUW (com o qual estou um pouco mais familiarizado),INFORMATION_SCHEMA
é provavelmente apenas um conjunto relativamente fino de visualizações sobre o catálogo do sistema "real" que no DB2 para iSeries costumava estar no esquema QSYS2 (no DB2 para LUW é no SYSCAT e no DB2 para z/OS está no SYSIBM).Parece que os documentos do DB2 para iSeries V5Rx não estão mais online, mas se for parecido com o catálogo do DB2 para z/OS, você encontrará as informações que deseja em QSYS2.SYSTABLES (que pode ser necessário consultar como QSYS2/SYSTABLES, dependendo do interface que você está usando). Da minha memória reconhecidamente enferrujada, você vai querer algo como:
Em que TABLE_OWNER é o esquema e TABLE_NAME é o nome. Você deve encontrar várias outras exibições úteis no catálogo, como SYSVIEWS, SYSCOLUMNS, SYSTRIGGERS, etc. Pode valer a pena baixar os PDFs dos antigos documentos do DB2 para iSeries , que ainda parecem estar disponíveis. Suspeito que as informações sobre a estrutura do catálogo do sistema estarão na "Referência SQL".