include-oracle-sql is an extension of include-sql for using Oracle SQL in Rust. It completes include-sql by providing impl_sql
macro to generate database access methods from the included SQL. include-oracle-sql uses Sibyl for database access.
Write your SQL and save it in a file. For example, let's say the following is saved as library.sql
in the project's src
folder:
```sql -- name: getloanedbooks? -- Returns the list of books loaned to a patron -- # Parameters -- param: userid: &str - user ID SELECT booktitle FROM library WHERE loanedto = :userid ORDER BY 1;
-- name: loanbooks -- Updates book records to reflect loan to a patron -- # Parameters -- param: userid: &str - user ID -- param: bookids: usize - book IDs UPDATE library SET loanedto = :userid , loanedon = currenttimestamp WHERE bookid IN (:book_ids); ```
And then use it in Rust as:
```rust , ignore use includeoraclesql::{includesql, implsql}; use sibyl as oracle;
include_sql!("src/library.sql");
fn main() -> oracle::Result<()> { 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 userid = std::env::var("USERID").expect("library user ID");
let oracle = oracle::env()?;
let session = oracle.connect(&db_name, &db_user, &db_pass)?;
session.get_loaned_books(user_id, |row| {
let book_title : &str = row.get("BOOK_TITLE")?;
println!("{}", book_title);
Ok(())
})?;
Ok(())
} ```
The included documentation describes the supported SQL file format and provides additional details on the generated code.