一言
不要随便找个参照物就坠落得理所应当。——原创
数据库系统概论笔记:第八章:数据库编程
本文最后更新于 379 天前,其中的信息可能已经有所发展或是发生改变。

解决实际业务问题只用SQL语言或只用高级语言是远远不够的,必须SQL语言与高级语言一
起使用才能够高效地解决之。

1)高级语言负责提供程序控制流程,即:
顺序、分支和循环,以及对变量的处理
2)SQL语言负责提供从数据库中存取信息功能
select、update、delete、grant,

8.1嵌入式SQL(ESQL)

8.1.1处理过程

定义:就是将SQL嵌入高级语言中,比如C、C++、JAVA、Python等

嵌入式SQL前缀:为了区分SQL语句和主语言语句,必须加前缀

例如:

C语言:EXEC SQL <SQL语句>

例:

include〈stdio.h>
#include〈string.h〉
EXEC SOL BEGIN DECLARE SECTION;
int newage=30;
EXEC sql END DECLARE SECTION;
EXEC SQL INCLUDE sqlca;
int main()
{
EXEC SOL CONNECT:"scott"identified by:"welcome"using:"orcl";
EXEC SQL update Student set age=:newage where sno='1234';
EXEC SQL COMMIT RELEASE;
}

8.1.2SQL与主语言的通信

SQL通信区

  • SQLCA是一个数据结构

  • 它会被传递到需要与数据库服务器进行通信的所有
    数据库库函数中。

  • 它会在所有嵌入式SQL语句上被隐式传递

用途

  • SQL语句执行后,RDBMS反馈给应用程序信息

  • 这些信息将送到SQL通信区SQLCA中

  • 应用程序从SQLCA中取出这些状态信息,据此决定
    接下来执行的语句

struct sqlca{
char sqlcaid[8];
long sqlcabc;
long sqlcode;
struct
unsigned short sqlerrml;
char sqlerrmc[70];
sqlerrm;
char sqlerrp[8];
long sqlerrd[6];
char sqlwarn[8];
char sqlext[8];
};
struct sqlca sqlca;

主变量:

  • 主变量(Host variable)SQL语句中使用的主语言程序变量。

  • 主变量必须在begin declare section与 end declare section之间进行说明。

  • 在SQL语句中使用主变量,须在变量前
    加冒号(:)。

例:

begin declare section
char v sn[10];
int v age;
char givensno[6];
end declare section
EXEC SQL select sname,age
into :v sn,:v_age
from student
where sno=:givensno

注:主变量只需要在SQL语句中加冒号,在主程序中不用加

建立和关闭数据库

(1)建立与数据库的连接

其中system是要连接的数据库

exec sql connect to "system"
identified by:"1234"using "mydb";

(2)关闭与数据库连接

exec sql disconnect "mydb";

游标

  • 游标是系统为用户开设的一个数据缓冲区,存放SQL语句的执行结果。

  • 每个游标区都有一个名字。

  • 游标的作用:可以通过游标逐一获取记录
    并赋给主变量,交给主语言进一步处理。

因为每次查询可能查询出很多数据,放到一个变量里不合理,所以会开放一个存这些查询数据的区域,游标也就是指针。

使用游标的步骤:

1.说明游标(declare)

  • 语句格式
    EXEC SQL DECLARE<游标名>
    CURSOR
    FOR<SELECT语句>;

  • 功能
    是一条说明性语句,这时DBMS并不执行
    SELECT指定的查询操作。

2.打开游标(open)

  • 语句格式
    EXEC SQL OPEN<游标名>;

  • 功能
    执行相应的SELECT语句,把所有满足
    查询条件的记录从指定表取到缓冲区中。
    这时游标处于活动状态,指针指向查询结
    果集中第一条记录。

3.推进游标指针并提取当前记录(fetch)

  • 语句格式

    EXEC SQL FETCH FROM<游标名>
    INTO<主变量表>:
  • 功能
    1.指针下移一行。
    2.将当前行的记录数据取出,依次给主变
    量赋值。

4.关闭游标(close)

  • 语句格式
    EXEC SQL CLOSE<游标名>:

  • 功能
    1.关闭游标

    2.释放结果集占用的缓冲区及其他资源。

推进游标指针并取当前记录
使用FETCH语句
语句格式

EXEC SQL FETCH [[NEXTPRIOR
FIRSTLAST]FROM]<游标名>
INTO<主变量>[<指示变量>][,<主变量>
[<指示变量>]…;

功能

  • 指定方向推动游标指针,然后将缓冲区中的当前记
    录取出来送至主变量供主语言进一步处理

  • NEXTPRIORFIRST LAST:指定推动游标指
    针的方式

    • NEXT:向前推进一条记录

    • PRIOR:向回退一条记录

    • FIRST:推向第一条记录

    • LAST:推向最后一条记录\

    • 缺省值为NEXT

8.2过程化SQL

8.2.1PL/SQL的块结构

  • 基本的SQL是高度非过程化的语言。

  • 嵌入式SQL将SQL语句嵌入到程序设计语言,借助
    高级语言的控制功能实现过程化。

  • 过程化SQL是对SQL的扩展,使其增加了过程化语
    句功能。

过程化SQL是由块组成的,块与块之间可以嵌套,每个块完成一个逻辑操作

存储过程(Stored Procedure)一组完成特定功能的SQL语句集。

  • 匿名块:每次执行时都要进行编译,它不能被存诸
    到数据库中,也不能在其他的PL/SQL块中调用。

    declare
    V number(4);
    begin
    select count(*)into V from SC:
    dbms_output.put line('元组数为:'‖V);
    end;
  • 命名块:编译后保存在数据库服务器中,可以被反
    复调用,运行速度较快

    ```SQL
    create procedure myPro as
    V number(4);
    begin
    select count(*)into V from SC;
    dbms_output.put_Iine('元组数为:'‖V);
    end;

PL/SQL块组成:定义十执行+异常处理。

8.2.2变量和常量的定义

  1. 变量定义:变量名 数据类型[[NOT NULL] 初值表达式]

  2. 常量定义:常量名 :=表达式

  3. 赋值语句:变量名:=表达式

变量类型

  • 普通

  • 属性

  • 元组

8.2.3流程控制

  1. if: if 条件语句 then,记着要加then

  2. if else

  3. loop 、while-loop、 for-loop

    //普通loop
    loop
    ...
    end loop
    //while-loop:
    while condition loop
    ....
    END loop
    for-loop:
    for i in 1..5 loop
    ...
    end loop
  4. exception:意外处理

8.3存储过程

存储过程的用户接口

  • 创建存储过程

    ```SQL
    create procedure myPro as
    begin
    ...
    end;

  • 执行存储过程

    call myPro();
    exec myPro;x
  • 删除存储过程

    ```SQL
    drop procedure myPro;

暂无评论

发送评论 编辑评论

|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇