Kingbase简单存储过程

1.存储过程查询

SELECT *
FROM pg_proc
JOIN pg_namespace ON (pg_proc.pronamespace = pg_namespace.oid)
WHERE prokind = 'p' AND nspname NOT LIKE 'pg_%' AND nspname NOT LIKE 'information_schema%' AND nspname NOT LIKE 'sys%' AND proname LIKE 'getDivisionSys%';

2.存储过程创建

-- 根据参数查询并返回一行一列
CREATE OR REPLACE PROCEDURE getDivisionSysName(p_division_code varchar(100)) AS
DECLARE p_name varchar(100);
BEGIN 
	SELECT 
		tb2.SYS_NAME INTO p_name
	FROM
		base_division_sys_view tb1
		LEFT JOIN base_sys tb2 ON tb1.SYS_CODE = tb2.SYS_CODE
	WHERE tb1.DIVISION_CODE = p_division_code LIMIT 1;
	SELECT p_name;
END;

CALL getDivisionSysName('530000000000');

-- 根据参数查询并返回一行多列
CREATE OR REPLACE PROCEDURE getDivisionSysNameAndCode(p_division_code varchar(100)) AS
DECLARE 
	p_name varchar(100);
	p_code varchar(100);
BEGIN 
	SELECT 
		tb2.SYS_CODE,tb2.SYS_NAME INTO p_code,p_name
	FROM
		base_division_sys_view tb1
		LEFT JOIN base_sys tb2 ON tb1.SYS_CODE = tb2.SYS_CODE
	WHERE tb1.DIVISION_CODE = p_division_code LIMIT 1;
	SELECT p_code,p_name;
END;

CALL getDivisionSysNameAndCode('530000000000');

-- 根据参数查询并返回多行一列
CREATE OR REPLACE PROCEDURE getDivisionSysNameList(p_division_code varchar(100)) AS
BEGIN 
	SELECT DISTINCT 
		tb2.SYS_NAME AS p_name
	FROM
		base_division_sys_view tb1
		LEFT JOIN base_sys tb2 ON tb1.SYS_CODE = tb2.SYS_CODE
	WHERE tb1.DIVISION_CODE = p_division_code AND tb2.SYS_NAME IS NOT NULL;
END;

CALL getDivisionSysNameList('530000000000');

-- 将多条结果遍历单个输出
CREATE OR REPLACE PROCEDURE getDivisionSysNameListConcat(p_division_code varchar(100)) AS
DECLARE 
	-- 游标
  	cursor c_result is 
  	SELECT DISTINCT 
		tb2.SYS_NAME AS sys_name
	FROM
		base_division_sys_view tb1
		LEFT JOIN base_sys tb2 ON tb1.SYS_CODE = tb2.SYS_CODE
	WHERE tb2.SYS_NAME IS NOT NULL AND tb1.DIVISION_CODE = p_division_code;
 
  	-- 定义一个与游标一样的变更
  	v_result c_result%rowtype;
BEGIN 
	-- 打开游标
	OPEN c_result;
		-- 开始循环
		LOOP 
			-- 获取游标记录
			FETCH c_result INTO v_result;  
		    EXIT WHEN c_result%notfound;
		    	SELECT v_result.sys_name;
		-- 结束循环
		END LOOP;
	-- 关闭游标
	CLOSE c_result;
	
	-- 异常处理
	EXCEPTION
	WHEN OTHERS THEN 
    BEGIN 
      dbms_output.put_line('报异常啦~~');
    END; 
END;

CALL getDivisionSysNameListConcat('530000000000');

3.存储过程删除

DROP PROCEDURE getDivisionSysName;
DROP PROCEDURE getDivisionSysName(p_division_code varchar(100));

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

这个名字还中

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值