Qual é a melhor maneira de lidar com valores booleanos em Db2?
Base de Dados
Db2
Cenário
Tenho uma coluna que precisa de ser verdadeira ou falsa. Encontrei duas fontes que apontam para a forma de o conseguir; no entanto, quando as reúno, tenho um erro.Solução Actual
CREATE TABLE USERS
(
ID INT NOT NULL,
.
.
.
IS_LOCKED SMALLINT NOT NULL WITH DEFAULT 0,
PRIMARY KEY(ID)
);
SELECT U.ID, CAST(U.IS_LOCKED AS BOOLEAN) as IS_LOCKED FROM USERS U
erro: A value with data type "SYSIBM.SMALLINT" cannot be CAST to type "SYSIBM.BOOLEAN"
Pergunta
Como posso usar Booleanos em Db2?
3 answers
Db2 V11. 1 no Linux / Unix / Windows suporta BOOLEAN como um tipo de dados de coluna e tais colunas podem ser devolvidas em um conjunto de resultados. Aqui está um exemplo usando o processador de linha de comando (na linha de comandos bash shell):
create table mytable( id integer, mybool boolean with default true )
DB20000I The SQL command completed successfully.
insert into mytable(id, mybool) values (1, false), (2, true), (3, false)
DB20000I The SQL command completed successfully.
select id,mybool from mytable order by 1
ID MYBOOL
----------- ------
1 0
2 1
3 0
3 record(s) selected.
No entanto, enquanto o DDL simples e o CLP para o SQL DML suportam o boolean, considere o impacto nas aplicações de usar o DB2 column-datatype boolean. Verifique como o PHP , Python, Java,. Net, etc pode manipular este tipo de dados de acordo com quaisquer linguagens utilizadas para aceder ao seu banco.
Tip : ao pedir ajuda sobre o Db2, é aconselhável mencionar sempre a sua versão-Db2 e o sistema operativo que executa o DB2-server (ou seja , z/os, iSeries, linux/unix/windows) e marcar a sua pergunta em conformidade.
Você dá uma ligação para os manuais DB2 11.1, e uma segunda ligação para os manuais DB2 9.7. Aqui reside a tua resposta. Booleano é suportado como um tipo de dados de coluna em DB2 11.1.1.1, mas não em DB2 9.7.
Ver as melhorias listadas para a embalagem Mod 1 Fix Pack 1 de DB2 11.1 aqui https://www.ibm.com/support/knowledgecenter/en/SSEPGG_11.1.0/com.ibm.db2.luw.wn.doc/doc/c0061179.html#c0061179__FP1{[5]onde diz:
O tipo de dados booleanos pode agora ser usado para a tabela colunas e resultados de expressão. Isto reforça a compatibilidade com outros sistemas de gestão de bases de dados relacionais
Noutras bases de dados, pode ser explícito:
select (case when u.isLocked = 0 then FALSE else TRUE end)
Mas o DB2 é explicitamente só suporta o código booleano na programação:
- o tipo de dados booleanos não pode ser devolvido num conjunto de resultados.