extern crate oracle;
fn main() {
let conn = oracle::Connection::new("scott", "tiger", "").unwrap();
let mut stmt = conn.prepare("select empno, ename, job, mgr, hiredate, sal, comm, deptno from emp").unwrap();
stmt.execute(&()).unwrap();
println!(" {:-30} {:-8} {}", "Name", "Null?", "Type");
println!(" {:-30} {:-8} {}", "------------------------------", "--------", "----------------------------");
for info in stmt.column_info() {
println!(" {:-30} {:-8} {}",
info.name(),
if info.nullable() {""} else {"NOT NULL"},
info.oracle_type());
}
println!("");
while let Ok(row) = stmt.fetch() {
let empno: i32 = row.get(0).unwrap(); let ename: String = row.get("ENAME").unwrap(); let job: String = row.get(2).unwrap();
let mgr: Option<i32> = row.get(3).unwrap(); let hiredate: oracle::Timestamp = row.get(4).unwrap();
let sal: f64 = row.get(5).unwrap();
let comm: Option<f64> = row.get(6).unwrap();
let deptno: Option<i32> = row.get(7).unwrap();
println!("{}\t{}\t{}\t{}\t{}\t{}\t{}\t{}",
empno,
ename,
job,
mgr.map_or("".to_string(), |v| v.to_string()), hiredate,
sal,
comm.map_or("".to_string(), |v| v.to_string()),
deptno.map_or("".to_string(), |v| v.to_string()));
}
let mut stmt = conn.prepare("begin :1 := :2; end;").unwrap();
stmt.bind(1, oracle::bind_value(&None::<&str>, 5)).unwrap();
stmt.bind(2, 123).unwrap();
stmt.execute(&()).unwrap();
let retval: String = stmt.bind_value(1).unwrap();
println!(":1 (as String) => {}", retval);
let retval: i32 = stmt.bind_value(1).unwrap();
println!(":1 (as i32) => {}", retval);
stmt.bind(2, &None::<i32>).unwrap();
stmt.execute(&()).unwrap();
let retval: Option<i32> = stmt.bind_value(1).unwrap();
println!(":1 is null? => {}", retval.is_none());
if false {
let mut stmt = conn.prepare("select 100000 from dual").unwrap();
stmt.execute(&()).unwrap();
let row = stmt.fetch().unwrap();
let _val: i8 = row.get(0).unwrap();
println!("never reach here!");
}
}