Dispara Trigger no acesso JDBC/ODBC

Discussão em 'Banco de Dados / Database' iniciado por gbouvie, Fevereiro 23, 2010.

  1. gbouvie

    gbouvie Membro Participativo

    Marcos!

    Novamente posto a trigger, porém agora com as atribuições corretas.

    Código:
    CREATE TRIGGER PUB.testatrigger
    AFTER INSERT ON PUB."c-tit-associado"
    REFERENCING NEWROW FOR EACH ROW
    IMPORT
    import java.sql.*;
    import java.math.*;
    BEGIN
    Integer v1;
    BigDecimal v2;
    String v3;
    v1 = (Integer)NEWROW.getValue(1, INTEGER);
    v2 = (BigDecimal)NEWROW.getValue(2, DECIMAL);
    v3 = (String)NEWROW.getValue(4, VARCHAR);
    SQLIStatement stmt = new SQLIStatement("UPDATE PUB.\"c-tit-associado\" SET atualizado = 1 WHERE \"cod-emitente\" = ? and valor = ? and \"nr-ticket\" = ? and atualizado = 0");
    stmt.setParam(1, v1);
    stmt.setParam(2, v2);
    stmt.setParam(3, v3);
    stmt.execute();
    END;
    Notei que quando tiro os ";" do programa para de dar o erro de SQL e começa a dar erro de compilação do Java. Seguem os erros:

    Erro SQL:
    Error: [DataDirect][OpenEdge JDBC Driver][OpenEdge] Syntax error in SQL statement at or about " import java.sql.*" (10713)
    SQLState: HY000
    ErrorCode: -210056
    Error occured in:
    CREATE TRIGGER PUB.testatrigger
    AFTER INSERT ON PUB."c-tit-associado"
    REFERENCING NEWROW FOR EACH ROW
    IMPORT
    import java.sql.*

    Erro Java:
    Error: [DataDirect][OpenEdge JDBC Driver][OpenEdge] Error from Java compiler. Compiler messages follow.(10727)

    SQLState: HY000
    ErrorCode: -210058

    Obrigado,

    Giovani Bouvié
  2. gbouvie

    gbouvie Membro Participativo

    Marcos!

    Se eu rodar a mesam trigger no sqlexp da o seguinte erro:

    SQLExplorer>@Run c:\temp\trigger.sql
    === SQL Exception 1 ===
    SQLState=HY000
    ErrorCode=-210058
    [DataDirect][OpenEdge JDBC Driver][OpenEdge] Error from Java compiler. Compiler
    messages follow.(10727)

    Ok: Run c:\temp\trigger.sql. (8932)

    Obrigado!

    Giovani bouvié
  3. kirchner

    kirchner Membro Participativo Moderador

    Giovani,

    Você está carregando o banco com proserve? Eu lembro que tive alguns problemas quando tentei usar isso, porque precisa de variáveis de ambiente e etc.
    Agora eu tenho um script PowerShell que já faz isso tudo, ele faz mais ou menos isso:

    $env:DLC = "C:\dlc101c";
    New-Variable -Name DLC -Value $env:DLC -Description "Progress DLC variable" -Scope Global;
    $env:pATH = "$env:pATH;$env:DLC\bin;$env:DLC\jre\bin\client";
    $env:CLASSPATH = "$env:DLC\java\base.jar;$env:DLC\java\openedge.jar;$env:DLC\java\util.jar;$env:DLC\java\prosp.jar;.";

    Tenta ajustar as variáveis PATH e CLASSPATH antes de carregar o banco. Se o diretório do JRE não estiver no PATH não funciona. Se o CLASSPATH não estiver OK, também não.

    Quando o servidor SQL carrega, ele lista no log do banco as variáveis que ele está usando:
    [2010/03/03@10:01:26.524-0300] P-4584 T-4528 I SQLSRV2 1: (-----) DLC from ENVIRONMENT VARIABLE is: C:\dlc101c
    [2010/03/03@10:01:26.524-0300] P-4584 T-4528 I SQLSRV2 1: (-----) WRKDIR from REGISTRY is: c:\temp\progress\
    [2010/03/03@10:01:26.524-0300] P-4584 T-4528 I SQLSRV2 1: (-----) JDKHOME from REGISTRY is: c:\dlc101c\jdk
    [2010/03/03@10:01:26.524-0300] P-4584 T-4528 I SQLSRV2 1: (-----) JREHOME from REGISTRY is: c:\dlc101c\jre
    [2010/03/03@10:01:26.524-0300] P-4584 T-4528 I SQLSRV2 1: (-----) CLASSPATH from ENVIRONMENT VARIABLE is: C:\dlc101c\java\base.jar;C:\dlc101c\java\openedge.jar;C:\dlc101c\java\util.jar;C:\dlc101c\java\prosp.jar;.
    [2010/03/03@10:01:26.524-0300] P-4584 T-4528 I SQLSRV2 1: (-----) PROSQL_LOCKWAIT_TIMEOUT value is: 5 seconds
  4. gbouvie

    gbouvie Membro Participativo

    Marcos!

    Usamos proserve para carregar o banco de dados mesmo. E consultei as variáveis de ambiente no servidor onde os BDs estão e o PATH e o CLASSPATH realmente não estão setados conforme deve ser. Vou setar manualmente o PATH e o CLASPATH no servidor para fazer um teste.

    Obrigado!

    Giovani Bouivé
  5. gbouvie

    gbouvie Membro Participativo

    Marcos!

    Criamos as variáveis de ambiente conforme você comentou e ao carregar o BD apareceram aqueles logs. Porém continua ocorrendo o erro. A seguir o comando executado e o erro:

    SQLExplorer>@run c:\temp\trigger.sql
    === SQL Exception 1 ===
    SQLState=HY000
    ErrorCode=-210058
    [DataDirect][OpenEdge JDBC Driver][OpenEdge] Error from Java compiler. Compiler
    messages follow.(10727)

    Ok: Run c:\temp\trigger.sql. (8932)

    Tem alguma idéia nova?

    Desculpe o aluguel e obrigado pela atenção.

    Giovani Bouvié
  6. kirchner

    kirchner Membro Participativo Moderador

    Giovani, agora estou sem ideias.

    Pior que ele diz que dá erro, mas não mostra o erro.
    Aquele arquivo c:\temp\trigger.sql existe?

    Aproveita e verifica se existe algum arquivo .lst no diretório do banco, dos scripts, temporário ou de trabalho.
    Ele deve ter o nome OWNER.NOME_TRIGGER.LST.

Compartilhe esta Página