05 Advanced SQL
Accessing SQL from a Programming Lang.#
- 不是所有 query 都能表达为 SQL 语句
- 非声明式操作,例如交互,不能用 SQL 完成
- 2 approaches
- dynamic SQL: 使用一些函数与 db 进行交流,运行时
- JDBC, Python Database API, ODBC
- embedded SQL: 将源码中的 SQL 语句在编译时特殊处理,转换为函数调用
- dynamic SQL: 使用一些函数与 db 进行交流,运行时
JDBC#
- app makes calls to
- 与数据库服务器建立连接
- 发送 SQL 命令
- fetch tuples of result one-by-one into program variables
- JDBC
- 支持 metadata 查询,例如查询有什么 relation,有什么 attr,attr 的类型
Prepared Statement#
- query 能够一次编译,多次使用不同的参数运行
- 如果需要用户输入,也很方便
- 能够避免 SQL 注入风险
Metadata Features#
Transaction Control#
SQLJ#
embedded SQL in Java
- host language 宿主语言
EXEC SQL
语句来标记嵌入 SQLEXEC SQL <embedded SQL statement>
Embedded SQL#
omitted
Functions and Procedures#
Functions#
function | |
---|---|
- db 支持表函数,返回的是 relation
Procedures#
procedure | |
---|---|