• LightDB中的存储过程(三)


    LightDB支持存储过程,除了支持Postgres的plpgsql存储过程,还兼容Oracle的存储过程,新增了plorasql过程语言。上一篇中我们介绍了存储过程中的控制语句,这一篇主要讲述存储过程中的静态SQL语句。

    什么是静态SQL语句呢?

    PL/SQL中的静态SQL语句是指可以直接在PL/SQL中使用的SQL语句,其语法与标准的SQL语义完全一致。

    由于PL/SQL程序执行时采用早期绑定,即在编译阶段对变量进行绑定,识别程序中标识符的位置,检查用户权限、数据库对象等信息,因此在PL/SQL中并不是所有语句就可以出现的,下列类型的SQL语句是可以出现的,因为它们不会修改数据库模式对象及其权限。

    • 查询语句: SELECT
    • DML语句: INSERT、UPATE、DELETE、MERGE (其中MERGE为lightdb22.1版本新增特性)
    • 事务控制语句: COMMIT、ROLLBACK、BEGIN、SAVEPOINT
    declare
    	vv mystudent%ROWTYPE;
    begin
    	begin;
    	update mystudent set teachername = 'changan';
    	select * into vv from mystudent where rownum < 2;
    	commit;
    end;
    /
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    PL/SQL中的SELECT语句

    为什么在这里单独把SELECT语句列出来了呢?因为与标准SELECT语句不同,在PL/SQL程序中,SELECT语句需要与INTO或BULK COLLECT INTO短语结合使用,将查询的结果保存到变量中。

    • SELECT … INTO :单条记录查询
    • SELECT … BULK COLLECT INTO : 多条记录查询

    示例如下:

    -- 示例1
    create procedure shenlan
    as
    declare
    	vid mystudent.id%TYPE;
    	v mystudent%ROWTYPE;
    begin
    	select id into vid from mystudent where rownum < 2; -- 需要注意:SELECT ... INTO 语句只能查询一条记录的信息 
    	raise notice 'vid is %', vid;
    	select * into v from mystudent where rownum < 2;
    	raise notice '(%,%,%)', v.id,v.name,v.teachername;
    end;
    /
    -- 示例2
    declare
      type c_cursor is ref cursor;
      type type_a is table of char(1) index by binary_integer;
      c_test c_cursor;
      v_a type_a;
    begin
      open c_test for select * from dual where false;
      loop
        fetch c_test bulk collect into v_a;
          raise info 'v_a(1)=%',v_a(1);
        exit when c_test%notfound;
      end loop;
      raise info 'v_a=%',v_a;
      v_a.DELETE; -- delete Associative array
    end;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    PL/SQL中的DML语句

    PL/SQL中的DML语句对标准SQL语句中的DML语句进行扩展,允许使用变量,语法与标准SQL完全相同。

    -- 示例程序
    declare  -- 声明部分
    	v constant int default 100;
    begin		-- 执行部分
    	update myteacher set id = v where rownum < 2;
    end;
    /
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    更多请参考LightDB官网

  • 相关阅读:
    【数据结构初阶】第十话 —— 链式二叉树的基本操作
    Linux——Linux指令2|more指令|less指令|head和tail指令|管道|时间相关的指令|date显示|Cal指令|find指令
    Redis -- 基本知识说明
    PHP基础笔记-NO.1
    mysql8.x 解压版安装过程中出现计算机中丢失vcruntime140_1.dll
    SpringBoot进阶教程(七十三)整合elasticsearch
    微信小程序开发15 项目实战 基于云开发开发一个在线商城小程序
    html css面试题
    深瑞IEC103协议
    小代码 - Python 读取iOS导出照片,修改名称为照片拍摄时间
  • 原文地址:https://blog.csdn.net/s_lisheng/article/details/126108562