#[cfg(feature="blocking")]
fn main() -> sibyl::Result<()> {
use sibyl::*;
let dbname = std::env::var("DBNAME").expect("database name");
let dbuser = std::env::var("DBUSER").expect("user name");
let dbpass = std::env::var("DBPASS").expect("password");
let oracle = Environment::new()?;
let session = oracle.connect(&dbname, &dbuser, &dbpass)?;
let stmt = session.prepare("
BEGIN
IF :VAL IS NULL THEN
:VAL := Utl_Raw.Cast_To_Raw('Hello, World!');
END IF;
END;
")?;
let mut buf = [0; 16];
let mut val = Nvl::new(buf.as_mut_slice());
stmt.execute(&mut val)?;
assert!(!stmt.is_null("VAL")?);
assert!(val.as_ref().is_some());
assert_eq!(
val.as_ref().unwrap(),
&[0x48u8, 0x65, 0x6C, 0x6C, 0x6F, 0x2C, 0x20, 0x57, 0x6F, 0x72, 0x6C, 0x64, 0x21, 0x00, 0x00, 0x00]
);
let output_len = stmt.len_of("VAL")?;
let output = &val.as_ref().unwrap()[0..output_len];
assert_eq!(output, &[0x48u8, 0x65, 0x6C, 0x6C, 0x6F, 0x2C, 0x20, 0x57, 0x6F, 0x72, 0x6C, 0x64, 0x21]);
Ok(())
}
#[cfg(feature="nonblocking")]
fn main() {}