Poniżej prosty sposób na zapis wyniku zapytania do pliku. Kolejne wywołania będą dopisywały wynik na końcu pliku.
set echo off newpage 0 space 0 pagesize 0 feed off head off trimspool on
set colsep ,
spool C:\export_my_table.txt
select * from my_table;
spool off
środa, 25 września 2013
piątek, 6 września 2013
JAVA/SQL - Wywołanie procedury SQL z poziomu Java/hibernateTemplate
Kiedy niedawno potrzebowałem wywołać kilka procedur/funkcji z poziomu kodu JAVA z u życiem 'HibernateTemplate' napotkałem na problem kiedy funkcja miała zwracać jakąś wartość.
Poniżej kilka przykładów wywołań:
1) Wywołanie funkcji zwracającej liczbę osób o podanym imieniu i nazwisku:
create or replace PACKAGE EXAMPLE_PACKAGE AS
FUNCTION COUNT_USERS ( fname VARCHAR2, lname VARCHAR2 ) RETURN NUMBER;
END EXAMPLE_PACKAGE;
create or replace PACKAGE BODY EXAMPLE_PACKAGE AS
FUNCTION COUNT_USERS ( fname VARCHAR2, lname VARCHAR2 ) RETURN NUMBER AS
users_count NUMBER(12);
BEGIN
begin
select count(id) into users_count from USERS where f_name = fname and l_name = lname;
exception
when NO_DATA_FOUND then
users_count := 0;
end;
return users_count;
END EXAMPLE_PACKAGE;
public long countUsersByName(final String fname,
final String lname) {
Long result = (Long) hibernateTemplate.execute(new HibernateCallback() {
Long count= null;
public Object doInHibernate(final Session session)
throws HibernateException, SQLException {
session.doWork(new Work() {
public void execute(Connection conn) throws SQLException {
CallableStatement stmt = conn.prepareCall("CALL EXAMPLE_PACKAGE.COUNT_USERS (?,?) into ?");
stmt.setString(1, fname);
stmt.setString(2, lname);
stmt.registerOutParameter(3, OracleTypes.VARCHAR);
stmt.execute();
count= Long.valueOf(stmt.getString(3));
}
});
return count;
}
});
return result;
}
2) Wywołanie procedury niezwracającej wyniku:
public void updateUsers(final String oldUsername,final String newUsername) {
hibernateTemplate.execute(new HibernateCallback() {
public Object doInHibernate(Session session) throws HibernateException {
Query query = session.createSQLQuery("CALL pck_example.update_username(" +
":old_username, :new_username)");
query.setParameter("old_usernamename", oldUsername);
query.setParameter("new_username", newUsername);
return query.executeUpdate();
}
});
}
Subskrybuj:
Posty (Atom)