एक ट्रिगर में मैं देखना चाहता हूं कि एसक्यूएल क्वेरी ने इस ट्रिगर को ट्रिगर किया था। मैंने current_query() पोस्टग्रेस्क्ल (8.4) का कार्य किया।
सब ठीक है, लेकिन अगर ट्रिगर तैयार कथन द्वारा निष्पादित किया जाता है तो मुझे सही मूल्यों के बजाय प्लेसहोल्डर्स ($ 1) मिलते हैं। उदाहरण के लिए (लॉग क्वेरी):
delete from some_table where id=$1
क्या यह मान/पैरामीटर प्राप्त करने/प्राप्त करने का कोई तरीका है?
संपादित (उदाहरण के लिए जोड़ा):
--table for saving query
create table log_table (
query text
)
--table for trigger
create table some_table (
id text
)
--function itself
CREATE FUNCTION save_query() RETURNS trigger AS $$
switch $TG_op {
DELETE {
spi_exec "INSERT INTO log_table (query) VALUES (current_query())"
}
default {
return OK
}
}
return OK
$$ LANGUAGE pltcl;
एक ट्रिगर बनाने:
create trigger test_trigger before delete on some_table for each row execute procedure save_query();
तैयार बयान हाइबरनेट से क्रियान्वित किया जाता है।
संपादित फिर से (जावा हिस्सा जोड़ा)
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
public class DeleteUsingPreparedStmt {
public static void main(String[] args) {
try {
String deleteString = "delete from floors where id = ? ";
final int idToDelte = 1;
Class.forName("org.postgresql.Driver");
String url = "jdbc:postgresql://127.0.0.1:5432/YOUR_DATABASE";
Connection conn = DriverManager.getConnection(url, "user", "password");
PreparedStatement deleteStmt = conn.prepareStatement(deleteString);
deleteStmt.setInt(1, idToDelte);
deleteStmt.executeUpdate();
} catch (Exception e) {
//hide me :)
}
}
}
आप एक JDBC ड्राइवर की जरूरत है - click।
आप अपने प्रश्न में इस के लिए उदाहरण कोड लिख सकते हैं? –
संपादित प्रश्न। मैंने थोड़ा सा कोड सरल किया, लेकिन यह उसी तरह काम करता है। –