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'));