1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Executar função PL/SQL no java através de um select

Olá amigos,

Estou com um problema relacionado ao retorno de uma função PL/SQL.

Basicamente, tenho uma função que executa um select e retorna um cursor.

create or replace FUNCTION CONSULTA_CARGOS (
 F_CARCODIGO IN CARGOS.CARCODIGO%TYPE)

 RETURN SYS_REFCURSOR IS

 V_CURSCAR SYS_REFCURSOR;

BEGIN

  OPEN V_CURSCAR FOR SELECT *
  FROM CARGOS
  WHERE CARCODIGO = F_CARCODIGO;

  RETURN V_CURSCAR;
END;

Até ai tudo bacana, eu consigo executá-la no programa em java com o seguinte código

public ResultSet executaProcedureSelect (String query){
        try {
            conectar();
            CallableStatement cs = c.prepareCall("{? = call CONSULTA_CARGOS(1)}");

            //Registra o parâmetro para retorna da função
            cs.registerOutParameter(1, OracleTypes.CURSOR);

            cs.execute();

            //Converte o resultado em um resultset
            ResultSet rs = (ResultSet)cs.getObject(1);

            return rs;
        } catch (SQLException e) {
            e.printStackTrace();
        }finally{
            desconectar();
        }       
        return null;
    }

Porém, descobri que é possível executar essa função com select e se eu passar o nome da coluna do banco de dados, ele "ignora" a clausula where no select da função e retorna todas as linhas no cursor.

SELECT consulta_cargos(carCodigo) FROM cargos;

Isso abre muitas possibilidades, pois, eu poderia fazer filtro combinado com pouco código escolhendo os parâmetros que desejo passar. O problema é que não tenho ideia de como executar a função desta forma no java. Sempre que eu tento passar o nome da coluna como parâmetro, ele me retorna um erro.

java.sql.SQLException: ORA-06550: linha 1, coluna 29:
PLS-00201: o identificador 'CARCODIGO' deve ser declarado

Alguém tem ideia de como posso fazer isso?

Desde já agradeço.

  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

1 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags java banco-de-dados sql ou faça a sua própria pergunta.