Caros amigos,
Preciso de saber quala sintaxe para criar um resultset especificamente para oracle.
sem mais um abraço
Caros amigos,
Preciso de saber quala sintaxe para criar um resultset especificamente para oracle.
sem mais um abraço
Acho que é isso que vc está procurando
[code]
import java.net.URL;
import java.sql.;
import oracle.jdbc.driver.;
/**
Classe de teste de acesso a Banco de Dados atraves de JDBC utilizando
um drive nativo.
*/
class ConectaNAT {
/**
* Método de teste.
*/
public static void main (String args[]) {
String url = "jdbc:oracle:thin:@<host name>:<porta>:<sid>";
//Protocolo:Drive:LocalizacaoDoBD
/* Na linha de comando acima, deve ser substituído as variaveis <host name>, <porta> e <sid> pelas configurações de seu servidor oracle */
String query = "SELECT sysdate FROM dual"; // Query SQL
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
//Carrega o drive Nativo
Connection con = DriverManager.getConnection(url, "teste", "teste1");
/* Sintaxe :DriverManager.getConnection(<caminho do host>, <usuario>, <password>*/
DatabaseMetaData dma = con.getMetaData ();
System.out.println("\nConnected to " + dma.getURL());
System.out.println("Driver " + dma.getDriverName());
System.out.println("Version " + dma.getDriverVersion());
System.out.println("");
Statement stmt = con.createStatement ();
// Abre a coneccao com o BD
ResultSet rs = stmt.executeQuery (query); // Executa a query SQL
//Imprime o resultado da query SQL
while(rs.next()) {
System.out.println(rs.getString(1));
}
rs.close();
stmt.close();
con.close();
} catch (SQLException ex) {
System.out.println ("\n*** SQLException caught ***\n");
while (ex != null) {
System.out.println ("SQLState: " + ex.getSQLState ());
System.out.println ("Message: " + ex.getMessage ());
System.out.println ("Vendor: " + ex.getErrorCode ());
ex = ex.getNextException ();
System.out.println ("");
}
} catch (java.lang.Exception ex) {
ex.printStackTrace ();
}
}
}[/code]
olá obrigado pela dica, mas não dá para chamar um stored procedure?
abraço
Claro utilize o CallableStatement
CallableStatement st = null;
st = cn.prepareCall("{ call lsgdb003.lsgprc.s_lsg032_extrato (?)}");
// Define parâmetros de entrada
st.setString(1, cpf);
rs = st.executeQuery();
while (rs.next()) {
}
Ao que me parece, a resposta acima não funciona no Oracle (se estiver errado me desculpe, mas nunca usei dessa forma). Suponho que vc vai obter mais de uma coluna em seu select no Oracle, logo deve estar utilizando cursor. Se for o caso, vc vai ter de fazer algo assim:
[code]CallableStatement cst = connection.prepareCall("{ CALL SUA_PROCEDURE (?, ?)}");
cst.setString(1, cpf);
cst.registerOutParameter(2, OracleTypes.CURSOR); // 2.º parametro na procedure
cst.execute()
ResultSet rs = (ResultSet) cst.getObject(2);
[/code]
Vê se funciona, qq duvida posta novamente. Flw! :mrgreen:
Ja agora como defino a saida do cursor no Stored Procedure do Oracle?
abraço
Olá
Veja se esse exemplo ajuda.
[code]public class OracleFunction {
public static void main(String s[]) {
try {
//Makes a connection to database
Connection con = null;
Class.forName("oracle.jdbc.driver.OracleDriver");
con = (Connection)DriverManager.getConnection("jdbc:oracle:thin:@IP:PORT:SID","USER","PASSWORD");
//CallableStatement has to used to get back results from Oracle function
CallableStatement cstmt = con.prepareCall("{? = call PACKAGE_NAME.FUNCTION_NAME }");
//Set the Out Parameter type to be of type CURSOR
cstmt.registerOutParameter(1, oracle.jdbc.driver.OracleTypes.CURSOR );
cstmt.execute();
//Cast the returned parameter, OracleTypes.CURSOR to a JDBC ResultSet
ResultSet rs = (ResultSet)cstmt.getObject(1);
while(rs.next()) {
System.out.println(rs.getString(1));
}
rs.close();
if(cstmt != null)cstmt.close();
if(con != null) con.close();
} catch (Exception e) {
System.out.println(e.toString());
}
}
}[/code]
Seguindo o que coloquei no último post, a procedure seria:
PROCEDURE SUA_PROCEDURE (
CPF IN VARCHAR2,
CURSOR_RETORNO OUT SYS_REFCURSOR
) AS
BEGIN
OPEN CURSOR_RETORNO FOR SELECT * FROM TABELA
WHERE ...
END
É isso que vc quer saber? Se não for, posta aew de novo! Flw! :mrgreen: