[firebase-br] Como Retornar Coluna de tipos de dados diferente atravez de um Case ???

Luciano franca luapfirebird em yahoo.com.br
Dom Fev 19 15:37:52 -03 2017


Pessoal eu tenho duas tabelas e não estou conseguindo fazer um case pois retorna o seguinte Erro
"Datatypes are not comparable in expression CASE"O erro eu sei o motivo então gostaria de saber dos colega alguma solução para resolver esse problema.
 O que preciso é retornar o resultado de acordo com o Campo dessa forma se o Tipo_Campo for = 'Integer'preciso retornar um resultado do tipo Integer para para isso preciso efetuar comparações que ao tentaruma comparação com o Tipo_Campo = 'Date'  vai me dar o erro e não sei como efetuar isso.

SelectTC.campo,

 Case TC.Tipo_Campo   -- Essa coluna pode ter um tipo qualquer de dado como Integer, Date, Float Etc... When 'Integer' Then TD.Campo_Integer  -- Se o campo for do Tipo Integer então pego o Registro que está na Coluna "Campo_Integer" When 'Date' Then TD.Campo_Date -- Se o campo for do Tipo Date então pego o Registro que está na Coluna "Campo_Date" End As Resultado -- Se o registro que está armazenado na Coluna "TC.Tipo_Campo" for igual a "Date" eu preciso que o resultado seja do tipo Date ou seja não posso usar CAST para transformar tudo em VarChar.
>From TABELA_DINAMICA_REGISTROS TDInner Join TABELA_DINAMICA_CABECARIO TC On (TC.tabela = TD.tabela And TC.campo = TD.campo)




CREATE TABLE TABELA_DINAMICA_CABECARIO (    TABELA        "AlfaNumerico_70" NOT NULL,    CAMPO         "AlfaNumerico_70" NOT NULL,    PSEUDO_CAMPO  "AlfaNumerico_100",    TIPO_CAMPO    "AlfaNumerico_40",    TAMANHO       "Codigo",    OBRIGATORIO   "AlfaNumerico_1",    FILIAL        "Filial" NOT NULL);
INSERT INTO TABELA_DINAMICA_CABECARIO (TABELA, CAMPO, PSEUDO_CAMPO, TIPO_CAMPO, TAMANHO, OBRIGATORIO, FILIAL)                               VALUES ('CADASTRO_OPERAD_CARTAO', 'Tipo_Float', '', 'Float', NULL, NULL, 1);INSERT INTO TABELA_DINAMICA_CABECARIO (TABELA, CAMPO, PSEUDO_CAMPO, TIPO_CAMPO, TAMANHO, OBRIGATORIO, FILIAL)                               VALUES ('CADASTRO_OPERAD_CARTAO', 'Tipo_Integer', '', 'Integer', NULL, 'S', 1);INSERT INTO TABELA_DINAMICA_CABECARIO (TABELA, CAMPO, PSEUDO_CAMPO, TIPO_CAMPO, TAMANHO, OBRIGATORIO, FILIAL)                               VALUES ('CADASTRO_OPERAD_CARTAO', 'Tipo_String', 'Teste de Nome', 'String', 7, 'S', 1);INSERT INTO TABELA_DINAMICA_CABECARIO (TABELA, CAMPO, PSEUDO_CAMPO, TIPO_CAMPO, TAMANHO, OBRIGATORIO, FILIAL)                               VALUES ('CADASTRO_OPERAD_CARTAO', 'Tipo_Memo', '', 'Memo', 20, NULL, 1);



CREATE TABLE TABELA_DINAMICA_REGISTROS (    TABELA          "AlfaNumerico_70" NOT NULL,    CAMPO           "AlfaNumerico_70" NOT NULL,    REGISTRO        "AlfaNumerico_9999",    CAMPO_STRING    "AlfaNumerico_1500",    CAMPO_MEMO      "AlfaNumerico_9999",    CAMPO_INTEGER   "Codigo",    CAMPO_FLOAT     "Valores",    CAMPO_DATE      "Data",    CAMPO_TIME      TIME,    CAMPO_DATETIME  TIMESTAMP,    CODIGO          "Codigo_AlfaNum" NOT NULL,    FILIAL          "Filial" NOT NULL);

INSERT INTO TABELA_DINAMICA_REGISTROS (TABELA, CAMPO, REGISTRO, CAMPO_STRING, CAMPO_MEMO, CAMPO_INTEGER, CAMPO_FLOAT, CAMPO_DATE, CAMPO_TIME, CAMPO_DATETIME, CODIGO, FILIAL)                               VALUES ('CADASTRO_OPERAD_CARTAO', 'Tipo_Integer', NULL, NULL, NULL, 155, 0, NULL, NULL, NULL, '6', 0);INSERT INTO TABELA_DINAMICA_REGISTROS (TABELA, CAMPO, REGISTRO, CAMPO_STRING, CAMPO_MEMO, CAMPO_INTEGER, CAMPO_FLOAT, CAMPO_DATE, CAMPO_TIME, CAMPO_DATETIME, CODIGO, FILIAL)                               VALUES ('CADASTRO_OPERAD_CARTAO', 'Tipo_Float', NULL, NULL, NULL, NULL, 15.53, NULL, NULL, NULL, '7', 0);INSERT INTO TABELA_DINAMICA_REGISTROS (TABELA, CAMPO, REGISTRO, CAMPO_STRING, CAMPO_MEMO, CAMPO_INTEGER, CAMPO_FLOAT, CAMPO_DATE, CAMPO_TIME, CAMPO_DATETIME, CODIGO, FILIAL)                               VALUES ('CADASTRO_OPERAD_CARTAO', 'Tipo_String', NULL, 'Banana', NULL, NULL, NULL, NULL, NULL, NULL, '4', 0);INSERT INTO TABELA_DINAMICA_REGISTROS (TABELA, CAMPO, REGISTRO, CAMPO_STRING, CAMPO_MEMO, CAMPO_INTEGER, CAMPO_FLOAT, CAMPO_DATE, CAMPO_TIME, CAMPO_DATETIME, CODIGO, FILIAL)                               VALUES ('CADASTRO_OPERAD_CARTAO', 'Tipo_String', NULL, 'Maça', NULL, NULL, NULL, NULL, NULL, NULL, '3', 0);INSERT INTO TABELA_DINAMICA_REGISTROS (TABELA, CAMPO, REGISTRO, CAMPO_STRING, CAMPO_MEMO, CAMPO_INTEGER, CAMPO_FLOAT, CAMPO_DATE, CAMPO_TIME, CAMPO_DATETIME, CODIGO, FILIAL)                               VALUES ('CADASTRO_OPERAD_CARTAO', 'Tipo_Memo', NULL, NULL, 'Campo Memo com varias informações', NULL, NULL, NULL, NULL, NULL, '5', 0);



Mais detalhes sobre a lista de discussão lista