KES数据库的SQL语法基础、数据类型与操作符介绍

关键字:
KingbaseES、PLSQL、基本对象

1.PLSQL基本对象

PLSQL基本对象包括匿名块、存储过程、函数、触发器和包。

2.匿名块

1.匿名块概念

●无程序块名声明。

●如果没有变量需定义,则DECLARE部分可省略。

●以BEGIN开始,以END结束,不可省略。

2.基本语法

```
[DECLARE]
        /* 声明部分—声明变量、常量等*/
BEGIN
         /*执行部分—PL/SQL语句和SQL语句*/
[EXCEPTION]
         /*异常处理部分—处理运行错误*/
END; --块结束标记

set serveroutput on;
\set SQLTERM /
DECLARE
   v1 int :=100;
   v2 varchar(50) :=‘kingbase’;
BEGIN
   DBMS_OUTPUT.PUT_LINE(v1);
   DBMS_OUTPUT.PUT_LINE(v2);
END;
/

```


3.存储过程

1.存储过程概念

   ●相当于客户端的一段 SQL 批处理程序。
         
   ●无返回值。
         
   ●可接受多个参数,参数模式包括IN、OUT、INOUT三种。
         
   ●被存储在数据库中,供用户随时调用(sys_proc)。

2.基本语法

```
CREATE [OR REPLACE] PROCEDURE PRO_NAME[(PARA1,PARA2…)]
AS
    VAR_NAME VAR_TYPE;
BEGIN
     --statements
[EXCEPTION]
END;

```


3.存储过程调用

    ●使用call调用:call procedure_name();
               
    ●匿名块中直接使用procedure_name()调用
               
```
BEGIN
     procedure_name()
END;
```

4.删除存储过程:DROP PROCEDURE procedure_name;

```
\set SQLTERM /
CREATE OR REPLACE PROCEDURE pr1(p1 int) AS
   v1 int :=100;
   v2 varchar(50) :=‘kingbase’;
BEGIN
   DBMS_OUTPUT.PUT_LINE(v1+p1);
   DBMS_OUTPUT.PUT_LINE(v2);
END;
/
CALL pr1(200);
/
DROP PROCEDURE pr1;
/
```

4.函数
1.函数概念

●这里所说的函数是指用户定义的函数。

●可有返回值。

●被存储在数据库中,供用户随时调用(sys_proc)。


2.基础语法

```
CREATE [OR REPLACE] FUNCTION <function name>[(param1,param2)]  return datatype IS
BEGIN
--statemements
return values;
[EXCEPTION]
END;

```

3.函数调用

●使用SELECT调用:SELECT function_name;    SELECT function_name FROM DUAL;

```
DECLARE
      v1 datatype;
BEGIN
      v1 := function_name();
END;
```

●匿名块内调用函数,定义一个变量接收函数返回值:

4.函数删除:DROP FUNCTION function_name;

```
\set SQLTERM /
CREATE OR REPLACE FUNCTION func1(p1 int) return int AS
   v1 int :=100;
   v2 varchar(50) :=‘kingbase’;
BEGIN
   DBMS_OUTPUT.PUT_LINE(v1+p1);
   DBMS_OUTPUT.PUT_LINE(v2);
   RETURN 1;
END;
/
SELECT func1(200);
/
DECLARE
   v1 int;
BEGIN
   v1 :=func1(200);
END;
/
```


5.触发器

1.触发器概念

一种特殊的存储过程,定义了一些在数据库相关事件(如:select、update、delete等事件)发生时应执行的功能代码。

2.触发器的使用场景

●启用/禁用对表和视图的修改

●强制数据一致性

●提供审计和日志记录

●防止无效的事务处理

●启用复杂的业务逻辑

3.触发器的组成

   ●触发事件:引发触发器被触发的事件DML语句(   INSERT、UPDATE、   DELETE语句对表和视图执行数据处理操作)
         
   ●触发时间:即该触发器是在触发事件发生前(BEFORE)还是之后(AFTER)触发
         
   ●触发操作:触发器触发后要完成的事情
         
   ●触发对象:包括表、视图
         
   ●触发条件:有WHEN子句指定一个逻辑表达式,只有当该表达式为TRUE时,遇到触发事件才会自动执行触发操作
         
   ●触发频率:说明触发器内定义的动作被执行的次数。即语句级触发器和行级触发器

```
创建一张表goods用于存储商品种类,表结构如下:
create table goods(id int primary key,good_name varchar(50));
●创建一个序列用于后续数据
create sequence seq_id;
●创建一个行级触发器,该触发器在表goods插入数据时被触发,并在该触发器的主体中实现goods表id列的值。
●创建一个行级触发器
CREATE OR REPLACE TRIGGER tri_insert_good BEFORE INSERT ON goods FOR EACH ROW
BEGIN
   SELECT seq_id.nextval INTO :new.id FROM DUAL;
END;
/
●触发触发器:向表goods中插入两条记录,其中一条不指定id值由序列seq_id产生,另一条指定id值。
INSERT INTO goods(good_name) VALUES(‘apple’);
INSERT INTO goods VALUES(9,‘banana’);
●验证触发器执行,id字段数据由seq_id产生
SELECT * FROM goods;
```

6.包

1.包的概念

  ●Oracle的兼容特性
       
   ●一种模式对象,是PL/SQL级别的代码封装手段
         
   ●由过程化语言书写,并经编译和优化后存储在数据库服务器
         
   ●变量、常量、游标、存储过程和函数的集合体

2.包的类型

●用户自定义包

●系统内置包

3.包的组成

(1)包规范

●声明了包中的公共对象,包括变量、常量、类型、游标、函数和存储过程。

●在包规范中声明的对象不仅可以在包的内部使用,也可以被应用程序调用。

●公共对象的作用域为包所在的模式。

(2)包体

●实现包规范中的函数和存储过程。

●包体中函数或存储过程的原型必须与包规范中声明的原型完全相同。

●可在程序包的主体中声明包规范中没有声明的变量、游标、类型、异常、函数和存储过程,称为   私有对象,只能由同一包中的函数或存储过程使用。

(3)包规范和包体关系

●包主体名称必须和包规范中的名称相同。

●没有存储过程和函数的包规范可没有包体。

4.基础语法

```
--包头
CREATE OR REPLACE PACKAGE package_name IS
   FUNCTION FUN1  ... RETURN ..
   REPOCEDURE PRO1 ...
   CURSOR ...
END 包名;
--包体
CREATE OR REPLACE PACKAGE BODY package_name IS
END package_name;

```

5.创建包规范

```
\set SQLTERM ;
CREATE TABLE t8(id int,name varchar(50));
INSERT INTO t8 VALUES(1,'kingbase');
INSERT INTO t8 VALUES(1,'beijing');
\set SQLTERM /
CREATE OR REPLACE PACKAGE pkg1 AS   
v1 INT;   
v2 VARCHAR(50);   
TYPE my_assoc_array_type1 IS TABLE OF VARCHAR(50) INDEX BY PLS_INTEGER;
CURSOR cs1 IS SELECT * FROM t1;   
PROCEDURE pr1;   
FUNCTION func1(p1 my_assoc_array_type1) RETURN INT;
END pkg1;
/
```


6.创建包体


```
CREATE OR REPLACE PACKAGE BODY pkg1 AS
   PROCEDURE pr1 AS
   BEGIN
      OPEN cs1;
      LOOP
         FETCH cs1 INTO v1,v2;
         EXIT WHEN cs1%notfound;
         DBMS_OUTPUT.PUT_LINE(v1);
         DBMS_OUTPUT.PUT_LINE(v2);
      END LOOP;
   END;
   FUNCTION func1(p1 my_assoc_array_type1) RETURN INT AS
   i INT;
   BEGIN
      i :=p1.first;
        WHILE i is not null LOOP
            DBMS_OUTPUT.PUT_LINE(p1(i));
            i :=p1.next(i);
        END LOOP;
      RETURN 1;
   END;
END pkg1;
```

7.使用包变量、调用函数、包存储过程:

调用包存储过程

CALL pkg1.pr1();

调用包函数

```
DECLARE
   a1 pkg1.my_assoc_array_type1;
   a2 int;
BEGIN
   a1(1) :='kingbase';
   a1(2) :='beijing';
   a1(3) :='tianjin';
   a2 :=pkg1.func1(a1);
END;
/
```


7.总结


1.PLSQL中的基本对象包括匿名块、存储过程、函数、触发器和包。


2.存储过程是存储在数据库中的子过程,无返回值。


3.函数是存储在数据库中的子过程,有返回值。


4.包可以容纳多个过程和函数的一个容器


5.触发器无需调用,满足条件情况下,自动执行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值