⚡ 编程实验室🏗️ HTML🎨 CSS⚡ JavaScript🐍 Python🗄️ SQL☕ Java⚛️ React💚 Vue🟢 Node.js⚙️ C语言🐘 PHP🐹 Go🔷 TypeScript🐬 MySQL🔧 C++🎯 C#🦀 Rust🅱️ Bootstrap💡 jQuery🎸 Django🍃 MongoDB👗 Sass🎪 Kotlin📊 R语言📋 XML📊 Excel🐘 PostgreSQL🐳 Docker🅰️ Angular🎮 游戏🏠 网站首页

PostgreSQL 函数与存储过程

全面学习PostgreSQL函数:内置函数、自定义PL/pgSQL函数、存储过程、触发器函数 · 难度:高级 · +20XP

PostgreSQL 函数概述

PostgreSQL拥有强大的函数系统,支持多种语言编写(SQL、PL/pgSQL、Python、JavaScript等)。函数可以封装业务逻辑,在数据库层面执行。

内置函数

-- 字符串函数
SELECT upper('hello'), lower('WORLD');       -- HELLO, world
SELECT length('数据库');                       -- 3(字符数)
SELECT regexp_replace('abc123', '\d+', 'X'); -- abcX

-- 时间函数
SELECT now(), current_date, current_time;
SELECT age('2024-03-01', '2020-01-01');       -- 4 years 2 mons
SELECT date_trunc('month', now());            -- 月初

-- 类型转换
SELECT 123::text;                              -- 转字符串
SELECT '2024-01-15'::date;                    -- 转日期
SELECT row_to_json(row) FROM table;

自定义函数(PL/pgSQL)

-- 基础函数:返回单个值
CREATE OR REPLACE FUNCTION full_name(first TEXT, last TEXT)
RETURNS TEXT AS $$
BEGIN
    RETURN first || ' ' || last;
END;
$$ LANGUAGE plpgsql;

-- 使用
SELECT full_name('张', '三');  -- 张 三
-- 带条件判断的函数
CREATE OR REPLACE FUNCTION get_grade(score NUMERIC)
RETURNS TEXT AS $$
BEGIN
    IF score >= 90 THEN RETURN 'A';
    ELSIF score >= 80 THEN RETURN 'B';
    ELSIF score >= 60 THEN RETURN 'C';
    ELSE RETURN 'D';
    END IF;
END;
$$ LANGUAGE plpgsql;

表函数(返回多行)

CREATE OR REPLACE FUNCTION top_products(limit_n INT)
RETURNS TABLE(name TEXT, sales INT) AS $$
BEGIN
    RETURN QUERY
    SELECT p.name, p.sales
    FROM products p
    ORDER BY p.sales DESC
    LIMIT limit_n;
END;
$$ LANGUAGE plpgsql;

-- 像查询表一样使用
SELECT * FROM top_products(5);

触发器函数

CREATE OR REPLACE FUNCTION update_modified_at()
RETURNS TRIGGER AS $$
BEGIN
    NEW.modified_at = now();
    RETURN NEW;
END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER auto_update_timestamp
    BEFORE UPDATE ON products
    FOR EACH ROW EXECUTE FUNCTION update_modified_at();

💡 练习任务

创建一个函数:根据购买金额和会员等级计算折扣价,VIP会员9折、普通会员95折、非会员原价。

Ctrl+Enter
🚀 升级VIP
解锁全部课程+AI助手

🏆 学习排行

加载中...

📊 统计

📖 131 篇
0 完成
🔥 0