人大金仓 金仓数据库KingbaseES PLSQL语法基础

33 阅读3分钟

关键字:

KingbaseES、PLSQL

1.什么是PL/SQL?

PL/SQL是一种程序语言,全称为过程化SQL语言(Procedural Language/SQL)。PL/SQL是数据库对SQL语句的扩展,在普通SQL语句的使用上增加了编程语言的特点,所以可以用来实现比较复杂的业务逻辑。它允许SQL的数据操纵语言和查询语句包含在块结构(block_structured)和代码过程语言中,使PL/SQL成为一个功能强大的事物处理语言。PL/SQL的目的是联合数据库语言和过程语言。

2.PL/SQL语法基础

标识符

用于定义PL/SQL单元和程序项的名称。可定义常量、变量、异常、显示游标、游标变量、参数、子程序及包的名称。

1.标识符规则:

(1)标识符由字母、数字和下划线组成;

(2)标识符必须以大小写字母或下划线开始;

(3)不能使用保留字。

2.示例:

(1)符合规则的标识符:

Test_var1、_var2、v#error

(2)不符合规则的标识符:

1mysal$ary(不合法,以数字1开头)、End int(不合法,使用了保留字)

块结束符

1.ksql中快结束符可通过\set SQLTERM命令设置,

语法:

\set SQLTERM sqltermchar (其中,sqltermchar:任意一个符号,符号不符合规定时报错)。

2.示例:

示例1:                                示例2:
\set SQLTERM /                         \set SQLTERM @
BEGIN                                  BEGIN
NULL;                                  NULL;
        END;                                   END;
        /                                       @

注释符

1.单行注释:由两个连接字符‘-’开始,后面紧跟注释内容

示例:--This is a standard SQL comment

2.多行注释:由/开头,以/结尾 示例:

\set SQLTERM /
BEGIN
/*
Test the variable name
1.legal name
2.illegal name
*/
Statement;
END;
/ 

常量值

即实际的文本文字,常量值包括:整数、浮点数、字符串、位串等类型

示例:

整型常量值:20,8,-9

浮点型常量值:6.5,.32,3.14159,5E3,6E-3

字符串:‘hello’,‘world’

表达式

  1. 表达式由运算符和操作数组成,操作数可以是变量或常数,运算符包括:一元运算符,如负号(-),二元运算符,如除号(/),无三元运算符。

  2. 常见运算符有:

数值运算符:+、-、*、/、%

字符运算符:||

日期运算符:+、-、*、/

布尔运算符:AND、OR、NOT

  1. 示例:
DECLATE
     a1 int :=10;
BEGIN
     a1 :=-a1;
     a1 :=a1/5;
END;
/

变量声明

  1. 变量声明的语法:
name[CONSTANT] datatype[NOT NULL] [:=|DEFAULT default assignment];

name:要声明的变量或常量的名字

CONSTANT:声明的是一个常量,不加关键字则声明一个变量

datatype:变量的数据类型

NOT NULL:变量赋值非空约束

default assignment:变量初始化,可以是表达式

  1. 示例:
\set SQLTERM /
DECLARE
    a1 varchar(50);
    a2 constant int :=10;
    a3 char(20) not null default ‘king’;
BEGIN
    a1 :=’database’;
    RAISE NOTICE ‘%’,a3;
END;
/

参数

  1. 参数定义:参数是一种向程序单元输入和输出数据的机制,存储过程可以接收多个参数

  2. 参数模式分类:

    IN参数:输入参数,只能接收参数,不能修改;

    OUT参数:输出参数,用于输出值,会忽略传入的值,可修改并将参数值传递到当前存储过程以外的环境中;

    INOUT参数:兼容以上两种特性,能接收传入的实参值,在子程序内可修改,也可传输。

  3. 示例:

CTEATE OR REPLACE PROCEDURE pr1(p1 int, p2 out int)AS
a1 int :=10;
BEGIN
    a1 :=a1+p1;
    p2 :=a1;
END;
/
DECLARE
v1 int;
BEGIN
    pr1(10,v1);
    RAISE NOTICE ‘%’,v1;
END;
/

更多信息,参见help.kingbase.com.cn/v8/index.ht…