plpgsql

plpgsql使用

资源

  • 深入浅出PostgreSQL
  • PostgreSQL官方手册

函数

create or replace function sales_tax(total real) returns real as $$
BEGIN
      RETURN total * 0.03;
END;
$$ language plpgsql;

文本

create or replace function myhello() returns text as $$
BEGIN
      RETURN 'hello world';
END;
$$ language plpgsql;

大写格式

CREATE OR REPLACE FUNCTION myhello () RETURNS TEXT AS $$
BEGIN
	RETURN 'hello world' ;
END; 
$$ LANGUAGE plpgsql;

删除

备注,必须要带参数的形式。

drop FUNCTION myhello();

-- 有参数的格式
drop FUNCTION strip_text(text);

数组使用

注意,语句块末尾要加分号。每行的语句也要加分号。

CREATE OR REPLACE FUNCTION  strip_text(str text) RETURNS TEXT[] AS $$
DECLARE
rest text[];
n  INTEGER;
i INTEGER;
BEGIN
  n = char_length(str);
	for i in 1..n LOOP
		rest[i] = 'hello world';
	end LOOP;
	RETURN rest ;
END; 
$$ LANGUAGE plpgsql;
-- 数组的时候  需要加括号
-- SELECT (strip_text('good'))[2];
SELECT strip_text('gooda');
-- {"hello world","hello world","hello world","hello world","hello world"}

文字拆分

CREATE OR REPLACE FUNCTION  strip_text(str text) RETURNS TEXT[] AS $$
DECLARE
rest text[];
n  INTEGER;
i INTEGER;
BEGIN
  n = char_length(str);
  if n <=2 THEN
    rest[1] = str;
	  return rest;
  END IF;
  n = n - 1;
	for i in 1..n LOOP
		rest[i] = substring(str from i for 2);
	end LOOP;
	RETURN rest ;
END; 
$$ LANGUAGE plpgsql;
-- 返回数组
SELECT strip_text('1234567');
-- 返回多列
SELECT unnest(strip_text('1234567'));