云数据库 GAUSSDB-隐式游标:示例

时间:2024-11-02 18:45:47

示例

 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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
--删除员工表hr.staffs中某部门的所有员工,如果该部门中已没有员工,则在部门表hr.department中删除该部门。
gaussdb=# CREATE OR REPLACE PROCEDURE proc_cursor3() 
AS 
    DECLARE
    V_DEPTNO NUMBER(4) := 100;
    BEGIN
        DELETE FROM hr.staffs WHERE section_id = V_DEPTNO;
        --根据游标状态做进一步处理
        IF SQL%NOTFOUND THEN
        DELETE FROM hr.department WHERE section_id = V_DEPTNO;
        END IF;
    END;
/
CREATE PROCEDURE
gaussdb=# CALL proc_cursor3();
 proc_cursor3 
--------------

(1 row)

--删除存储过程和临时表
gaussdb=# DROP PROCEDURE proc_cursor3;
DROP PROCEDURE
-- 如果需要SELECT隐式游标并发执行,需要打开以下GUC参数
gaussdb=# SET query_dop=4;
SET
gaussdb=# SET sql_beta_feature= 'enable_plsql_smp';

-- 选择员工表hr.staffs中工号为1的员工姓名
gaussdb=# CREATE OR REPLACE PROCEDURE prc_cursor_smp()
AS
    name varchar(20);
BEGIN
   SELECT first_name FROM hr.staffs WHERE staff_id = 1 INTO name;
   dbe_output.print_line('result is: '|| name);
END;
/
CREATE PROCEDURE
-- 执行存储过程
gaussdb=# CALL prc_cursor_smp();
result is: Tom
 prc_cursor_smp 
----------------

(1 row)
support.huaweicloud.com/centralized-devg-v8-gaussdb/gaussdb-42-0823.html