Ir para conteúdo
Fórum Script Brasil

Kakao

Membros
  • Total de itens

    463
  • Registro em

  • Última visita

Posts postados por Kakao

  1. Se o código for apenas esse então é erro de sintaxe porque o return só pode ser usado para retornar de uma função. Eu testei assim:

    year = 1990
    month = 0
    day = 1
    hour = 23
    minute = 0
    second = 50
    if 1900 < year < 2100 and 1 <= month <= 12 \
       and 1 <= day <= 31 and 0 <= hour < 24 \
       and 0 <= minute < 60 and 0 <= second < 60:   # Looks like a valid date
            return 1
    
      File "<stdin>", line 4
    SyntaxError: 'return' outside function
    Mas se o código for parte de uma função então retorna nulo (None em Python). Testei assim:
    def f():
        year = 1990
        month = 0
        day = 1
        hour = 23
        minute = 0
        second = 50
        if 1900 < year < 2100 and 1 <= month <= 12 \
           and 1 <= day <= 31 and 0 <= hour < 24 \
           and 0 <= minute < 60 and 0 <= second < 60:   # Looks like a valid date
                return 1
    
    f() is None
    True

  2. SELECT 
        ItemID, ItemName, ItemDescription,
        (ItemName LIKE '%CAMA%') +
        (ItemName LIKE '%COORALOO%') +
        (ItemDescription LIKE '%CAMA%') +
        (ItemDescription LIKE '%COORALOO%') +
        (LongDescription LIKE '%CAMA%') +
        (LongDescription LIKE '%COORALOO%')
        as total    
    FROM Items 
    WHERE 
        (
        ItemName LIKE '%CAMA%' 
        OR ItemName LIKE '%COORALOO%' 
        OR ItemDescription LIKE '%CAMA%' 
        OR ItemDescription LIKE '%COORALOO%' 
        OR LongDescription LIKE '%CAMA%' 
        OR LongDescription LIKE '%COORALOO%'
        ) 
        AND Estoque = 'S'
    order by total desc

    No mysql o resultado de uma expressão lógica é 1 se verdadeira ou zero se falsa. Então basta somar os resultados.

  3. Coloca uma virgula depois de obj_nome:

    cursor.execute("INSERT INTO tabela_objetos VALUES ('%s');",
    (obj_nome,))
    Não estou acostumado com o driver do mysql mas acho que tem que ser sem aspas no %s:
    cursor.execute("INSERT INTO tabela_objetos VALUES (%s);",
    (obj_nome,))

    O desenho da base está errado mas pergunte isso no fórum de mysql.

  4. Eu estou entendendo que quantidade de livros é o mesmo que quantidade de títulos. É isso?

    Eu acho melhor calcular na consulta do que criar trigger. Ficaria assim:

    select e.razaosocial, e.codeditora, count(*) as total
    from 
        livros l
        inner join
        editoras e on e.codeditora = l.codeditora
    group by e.razaosocial, e.codeditora
    order by e.razaosocial

  5. array_to_string(array(
        SELECT PCFNRER0.NRONFF || '-' || PCFNRER0.SERIE 
        FROM PCFNRER0
        WHERE  PCFNREC0.EMPFIL = PCFNRER0.EMPFIL AND
                PCFNREC0.CLIFOR = PCFNRER0.CLIFOR AND
                PCFNREC0.DUPMOV = 'D'             AND
                PCFNREC0.NRODPL = PCFNRER0.NROAGR
        ), ',') AS NumeroNotaFiscal

  6. Para corrigir esse erro eu adicionei o limit 1 na subconsulta. Mas não entendi porque não dava esse erro com você. Você incluiu novos registros na tabela antigeno?

    SELECT 
        doacao.codigo as doacao, 
        doador.codigo as doador, 
        doador.nome, 
        doador.sexo, 
        doador.tipo_sanguineo as ABO, 
        doador.rh, 
        doacao.data,
        array_agg(
            (select descricao from antigeno where codigo=doacaofenotipo.antigeno limit 1)
            || ' ' ||
            doacaofenotipo.resultado
            ) as antigeno_resultado
    FROM doacao, doacaofenotipo, doador
    WHERE 
        doacaofenotipo.doacao = doacao.codigo 
        and doador = doador.codigo
        and doacao.data >= '2012-05-01' 
        and doacao.data <= '2012-05-10'
    group by
        doacao.codigo, 
        doador.codigo, 
        doador.nome, 
        doador.sexo, 
        doador.tipo_sanguineo, 
        doador.rh, 
        doacao.data

  7. No 8.3 você tem que criar a função de agregação:

    create aggregate array_agg (anyelement)
    (
        sfunc = array_append,
        stype = anyarray,
        initcond = '{}'
    )
    Depois só muda o nome e os parametros da função chamada:
    SELECT 
        doacao.codigo as doacao, 
        doador.codigo as doador, 
        doador.nome, 
        doador.sexo, 
        doador.tipo_sanguineo as ABO, 
        doador.rh, 
        doacao.data,
        array_agg(
            (select descricao from antigeno where codigo=doacaofenotipo.antigeno)
            || ' ' ||
            doacaofenotipo.resultado
            ) as antigeno_resultado
    FROM doacao, doacaofenotipo, doador
    WHERE 
        doacaofenotipo.doacao = doacao.codigo 
        and doador = doador.codigo
        and doacao.data >= '2012-05-01' 
        and doacao.data <= '2012-05-10'
    group by
        doacao.codigo, 
        doador.codigo, 
        doador.nome, 
        doador.sexo, 
        doador.tipo_sanguineo, 
        doador.rh, 
        doacao.data

  8. Se for postgresql 9.0+ você pode usar a função string_agg.

    SELECT 
        doacao.codigo as doacao, 
        doador.codigo as doador, 
        doador.nome, 
        doador.sexo, 
        doador.tipo_sanguineo as ABO, 
        doador.rh, 
        doacao.data,
        string_agg(
            (select descricao from antigeno where codigo=doacaofenotipo.antigeno)
            || ' ' ||
            doacaofenotipo.resultado
            , ';') as antigeno_resultado
    FROM doacao, doacaofenotipo, doador
    WHERE 
        doacaofenotipo.doacao = doacao.codigo 
        and doador = doador.codigo
        and doacao.data >= '2012-05-01' 
        and doacao.data <= '2012-05-10'
    group by
        doacao.codigo, 
        doador.codigo, 
        doador.nome, 
        doador.sexo, 
        doador.tipo_sanguineo, 
        doador.rh, 
        doacao.data

  9. Select 
        B.BAIRRO,
        B1.TOTAL_MES01,
        B2.TOTAL_MES02,
        coalesce(B1.TOTAL_MES01, 0) - coalesce(B2.TOTAL_MES02, 0) AS DIFERENCA
    FROM 
        TB_BAIRRO B
        LEFT JOIN (
            SELECT BAIRRO, sum(QUANT) AS TOTAL_MES01
            FROM BAIRRO_ENTREGA
            WHERE Data between '$data1' and '$data2'
            GROUP BY 1
            ) B1 ON (B1.BAIRRO = B.BAIRRO)
        LEFT JOIN (
            SELECT BAIRRO, sum(QUANT) AS TOTAL_MES02
            FROM BAIRRO_ENTREGA
            WHERE Data between '$data3' and '$data4'
            GROUP BY 1
            ) B2 ON (B2.BAIRRO = B.BAIRRO)
    ORDER BY B.BAIRRO

  10. Primeiro retire os privilégios de todos os usuários. Depois crie uma role para cada departamento e concede os privilégios necessários. Depois adicione os usuários às respectivas roles:

    revoke select on all tables in schema public from public;
    revoke all priviles on all tables in schema public from fulano, sicrano, beltrano;
    create role leitor_rh;
    grant select on tabela_rh to leitor_rh;
    grant fulano, sicrano, beltrano to leitor_rh;

×
×
  • Criar Novo...