[关闭]
@3013216027 2016-01-28T13:18:42.000000Z 字数 4001 阅读 967

第9章 服务器环境下的SQL

数据库原理复习专栏



三层体系结构


环境

宿主语言接口

  1. String sql = "INSERT INTO departments_copy VALUES (?, ?)";
  2. PreparedStatement stat = DBConnection.getConnection().prepareStatement(sql);
  3. /* complete stat here ... */
  4. /* then execute the statement here ... */

就使用了函数库中的如类。

  1. EXEC SQL BEGIN DECLARE SECTION;
  2. EXEC SQL END DECLARE SECTION;
  1. void getStudio() {
  2. EXEC SQL BEGIN DECLARE SECTION;
  3. char studioName[50];
  4. char studioAddr[256];
  5. char SQLSTATE[6]; /* SQL状态结果 */
  6. EXEC SQL END DECLARE SECTION;
  7. EXEC SQL INSERT INTO Studio(name, address) VALUES (:studioName, :studioAddr);

上述一堆大写在预处理时会被替换成真正有效的语句。

习题9.4.1

  1. create procedure solveA
  2. (in name varchar(64))
  3. begin
  4. select netWorth from MovieExec
  5. where cert in (select pres from Studio);
  6. end
  1. create function solveB
  2. (name varchar(64), address varchar(255)) returns int
  3. declare isStar boolean;
  4. declare isProducer boolean;
  5. begin
  6. if ((name, address) in (select name, address from MovieStar)) then
  7. isStar = true;
  8. else
  9. isStar = false;
  10. end if
  11. if ((name, address) in (select name, address from MovieExec)) then
  12. isProducer = true;
  13. else
  14. isProducer = false;
  15. end if
  16. if (isStar and not isProducer) then
  17. return 1;
  18. elseif (not isStar and isProducer) then
  19. return 2;
  20. elseif (isStar and isProducer) then
  21. return 3;
  22. else
  23. return 4;
  24. end if
  25. end
  1. create procedure solveC
  2. (in sName varchar(64), out longest varchar(64), out second_longest varchar(64))
  3. declare notFound condition for sqlstate '02000';
  4. declare c cursor for select name from Movies where studioName = sName order by length desc;
  5. begin
  6. fetch c into longest;
  7. if notFound then
  8. set longest = NULL;
  9. set second_longest = NULL;
  10. else
  11. fetch c into second_longest;
  12. if notFound then
  13. set second_longest = NULL;
  14. end if
  15. end if
  16. end
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注