zoukankan      html  css  js  c++  java
  • 我对 PostgreSQL tidscan的理解

    PostgreSQL中,有一种 tidscan。当我在使用cursor的时候,会用到此种scan:

    [postgres@lex pgsql]$ cat ./data/test.sqlCREATE OR REPLACE Function FindCourse
       ( name_in IN varchar )
       RETURNS integer LANGUAGE plpgsql AS $$
    DECLARE
        cnumber integer;
        c1 CURSOR
        FOR
           SELECT course_number, instructor
            from course_tbl
            where course_name = name_in
            FOR UPDATE;
    
    BEGIN
    
    BEGIN
    open c1;
    fetch c1 into cnumber;
    
    IF not found THEN
         cnumber := 9999;
    ELSE
         UPDATE course_tbl
            SET instructor = 'SMITH'
            WHERE CURRENT OF c1;
        COMMIT;
    END IF;
    
    close c1;
    
    EXCEPTION
    WHEN OTHERS THEN
    END;
    RETURN cnumber;
    END;$$;
    [postgres@lex pgsql]$ 

     下面再进行一下修正:

    在PostgreSQL的 function 里面,是不允许进行commit的。所以其实,上面的程序需要改成:

    [postgres@lex pgsql]$ cat ./data/test.sqlCREATE OR REPLACE Function FindCourse
       ( name_in IN varchar )
       RETURNS integer LANGUAGE plpgsql AS $$
    DECLARE
        cnumber integer;
        c1 CURSOR
        FOR
           SELECT course_number, instructor
            from course_tbl
            where course_name = name_in
            FOR UPDATE;
    
    BEGIN
    
    BEGIN
    open c1;
    fetch c1 into cnumber;
    
    IF not found THEN
         cnumber := 9999;
    ELSE
         UPDATE course_tbl
            SET instructor = 'SMITH'
            WHERE CURRENT OF c1;
    END IF;
    
    close c1;
    
    EXCEPTION
    WHEN OTHERS THEN
    END;
    RETURN cnumber;
    END;$$;
    [postgres@lex pgsql]$ 
  • 相关阅读:
    hadoop2.2.0+hive-0.10.0完全分布式安装方法
    linux之vim编辑器
    hive与hbase的区别与联系
    linux系统管理
    Hive 自定义函数(转)
    hive 存储格式
    ActiveMQ 使用spring模板 发布消息过程分析
    ActiveMQ spring (一)
    ActiveMQ 权限(二)
    ActiveMQ 权限(一)
  • 原文地址:https://www.cnblogs.com/gaojian/p/3130635.html
Copyright © 2011-2022 走看看