extern crate oracle;
use oracle::sql_type::{OracleType, Timestamp};
use oracle::Connection;
fn main() {
let conn = Connection::connect("scott", "tiger", "").unwrap();
let mut stmt = conn
.prepare(
"select empno, ename, job, mgr, hiredate, sal, comm, deptno from emp",
&[],
)
.unwrap();
let rows = stmt.query(&[]).unwrap();
println!(" {:-30} {:-8} {}", "Name", "Null?", "Type");
println!(
" {:-30} {:-8} {}",
"------------------------------", "--------", "----------------------------"
);
for info in rows.column_info() {
println!(
" {:-30} {:-8} {}",
info.name(),
if info.nullable() { "" } else { "NOT NULL" },
info.oracle_type()
);
}
println!("");
for row_result in rows {
let row = row_result.unwrap();
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: 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, &OracleType::Varchar2(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 _val = conn
.query_row_as::<i8>("select 100000 from dual", &[])
.unwrap();
println!("never reach here!");
}
}