高级SQL
标签(空格分隔): 数据库
JDBC
示例(来自课后习题)
public class ResultSetTable {
private ResultSet resultSet;
private ResultSetMetaData reslutSetMetaDate;
private int cols_num;
public void resultSetTable (ResultSet resultSet) throws SQLException {
this.resultSet = resultSet;
reslutSetMetaDate = resultSet.getMetaData();
cols_num = reslutSetMetaDate.getColumnCount();
for (int i = 1; i <= cols_num; i++) {
System.out.println(reslutSetMetaDate.getColumnName(i) + ' ');
}
while ( resultSet.next()) {
for (int i = 1; i <= cols_num; i++) {
system.out.println(reslutSet.getString(reslutSetMetaDate.getColumnName(i)) + ' ');}
}
}
}
示例二
函数和过程
1. SQL和Java/C++/C都可以编写函数和过程,有什么不同?
SQL
函数和过程允许“业务逻辑”作为存储过程记录在数据库中,并在数据库内执行。尽管这样的“业务逻辑”能被写成程序设计语言过程并完全存储在数据库之外,但把它们定义成数据库的存储过程有以下的优点
- 允许多个应用访问
- 当业务规则发生变化时,进行单个节点的改变,而不必更改应用程序的其他部分
- 应用代码可以调用存储过程,而不是直接更新数据库关系
程序设计语言
SQL标准不被很多数据库所支持,由此,即便是最基本的特性在不同的数据库产品中,都会有不同的语法与语义。在这种情况下,使用一种命令式程序设计语言,从SQL查询和触发器的定义中调用,可以免去程序员学习多种非标准数据库语言的烦恼。
2. 声明和调用SQL函数和过程
示例一:普通函数
--声明函数
--给定系名,返回该系的教师数木
create function dept_count (dept_name varchar(20))
returns integer
beign
declare d_count integer
select d_count integer
from instructor
where instructor.dept_name = dept_name;
return d_count;
end
--调用函数
--返回教师数大于12的所有系的名称和预算
select dept_name, budget
from department
where dept_count(dept_name) > 12;
示例二:表函数——返回表作为结果
--声明函数
--返回包含某特定系的所有教师的表
create function instructor_of(dept_name varchar(20))
returns table(
ID varchar(5),
name varchar(20),
dept_name varchar(20),
salary numeric(