如何编写PL/SQL存储过程展示表数据?含student表调用示例需求
当然可以实现这个需求!其实很多主流数据库(比如MySQL、SQL Server、PostgreSQL)都支持存储过程直接返回查询结果集,你之前碰到的“SELECT必须带INTO”只是存储过程的一种使用场景——那是把查询结果存到变量里做内部处理的情况,直接返回结果给调用者是完全可行的。
下面给你几个主流数据库的实现示例:
MySQL 版本实现
首先先创建测试用的student表并插入数据:
CREATE TABLE student ( 学号 INT PRIMARY KEY, 姓名 VARCHAR(50), 最喜欢的颜色 VARCHAR(20) ); INSERT INTO student VALUES (1, 'MARY', 'RED'), (2, 'JANE', 'RED'), (3, 'PETER', 'RED'), (4, 'JOHN', 'RED'), (5, 'LUCY', 'BLUE');
然后创建存储过程favColor:
DELIMITER // CREATE PROCEDURE favColor(IN target_color VARCHAR(20)) BEGIN -- 直接编写SELECT语句返回结果集,不需要INTO子句 SELECT 姓名 AS NAME, 最喜欢的颜色 AS FAV_COLOR FROM student WHERE 最喜欢的颜色 = target_color; END // DELIMITER ;
执行存储过程:
CALL favColor('RED');
执行后就会输出你想要的格式:
NAME FAV_COLOR -------- ----------- MARY RED JANE RED PETER RED JOHN RED
SQL Server 版本实现
如果用的是SQL Server,存储过程的写法略有不同:
CREATE PROCEDURE favColor @target_color VARCHAR(20) AS BEGIN SET NOCOUNT ON; -- 关闭影响行数的提示,让输出更整洁 SELECT 姓名 AS NAME, 最喜欢的颜色 AS FAV_COLOR FROM student WHERE 最喜欢的颜色 = @target_color; END;
执行存储过程:
EXEC favColor 'RED';
关于你提到的INTO子句误解
你之前觉得“存储过程中的SELECT必须带INTO”,其实这是个误区哦:
- 当你需要在存储过程内部处理查询结果(比如把值存到变量里做后续逻辑判断)时,才需要用INTO子句把结果赋值给变量;
- 当你需要直接向调用者返回查询结果集时,直接写SELECT语句就可以了,不需要额外的INTO。
内容的提问来源于stack exchange,提问作者Astoach167




