其他控制语句
 
                  更新时间 2025-02-14 10:25:05
                 
 
                    最近更新时间: 2025-02-14 10:25:05
                  
 本页介绍天翼云TeleDB数据库PL/pgsql控制结构中的其他控制语句。
 动态执行
teledb=# CREATE OR REPLACE FUNCTION f27(a_id INTEGER) RETURNS text AS
teledb-# $$    
teledb$# DECLARE
teledb$#     v_sql TEXT;
teledb$#     v_mc TEXT;
teledb$# BEGIN          
teledb$#     v_sql := 'SELECT mc FROM t WHERE id='||a_id::TEXT;
teledb$#     EXECUTE v_sql INTO v_mc;     
teledb$#     RETURN v_mc;
teledb$# END;
teledb$# $$
teledb-# LANGUAGE plpgsql;
CREATE FUNCTION
teledb=# SELECT f27(1);
  f27  
-------
 teledb_pg
(1 row)动态执行就是拼SQL语句,然后使用EXECUTE命令执行。
执行一个没有结果的命令
teledb=# CREATE OR REPLACE FUNCTION f27() RETURNS void AS
teledb-# $$   
teledb$# BEGIN          
teledb$#     perform f27(1);
teledb$# END;
teledb$# $$
teledb-# LANGUAGE plpgsql;
CREATE FUNCTION
teledb=# SELECT f27();
 f27 
-----
(1 row)
teledb=# 获取执行结果
teledb=# DROP FUNCTION f27(INTEGER);
DROP FUNCTION
teledb=# CREATE OR REPLACE FUNCTION f27(a_id INTEGER) RETURNS VOID AS
teledb-# $$  
teledb$# DECLARE
teledb$#     v_mc TEXT; 
teledb$# BEGIN          
teledb$#     SELECT mc INTO v_mc FROM t WHERE id=a_id;
teledb$#     IF FOUND THEN
teledb$#         RAISE NOTICE '查询到记录,值为%',v_mc;        
teledb$#     ELSE
teledb$#         RAISE NOTICE '查不到记录' ;
teledb$#     END IF;
teledb$# END;
teledb$# $$
teledb-# LANGUAGE plpgsql;
CREATE FUNCTION
teledb=# SELECT f27(1);  
NOTICE:  查询到记录,值为Teledb
 f27 
-----
(1 row)
teledb=# SELECT f27(3);   
NOTICE:  查不到记录
 f27 
-----
(1 row)获取影响行数
teledb=# CREATE OR REPLACE FUNCTION f27(a_id INTEGER) RETURNS VOID AS
teledb-# $$  
teledb$# DECLARE
teledb$#     v_mc TEXT; 
teledb$#     v_row_count BIGINT;
teledb$# BEGIN          
teledb$#     SELECT mc INTO v_mc FROM t WHERE id=a_id;
teledb$#     GET DIAGNOSTICS v_row_count = ROW_COUNT;
teledb$#     RAISE NOTICE '查询到的记录数为 % ',v_row_count;
teledb$# END;
teledb$# $$
teledb-# LANGUAGE plpgsql;
CREATE FUNCTION
teledb=# SELECT f27(1);
NOTICE:  查询到的记录数为 1 
 f27 
-----
(1 row)
teledb=# SELECT f27(3);
NOTICE:  查询到的记录数为 0 
 f27 
-----
(1 row)