存储过程中临时表的行为

时间:2018-04-20 02:23:14

标签: mariadb

我一直在开发一个允许用户编写自己的查询的平台,我正在考虑使用存储过程进行行级访问。这是它的工作方式;用户使用存储过程调用查询,过程将检查它是否有权访问行,并在通过检查时返回结果。这是我遇到问题的部分的简化版本。

你们可以复制并粘贴这段代码,看看我的意思。

CREATE TABLE student_tests (
  name CHAR(10), test CHAR(10), 
  score TINYINT, test_date DATE
);

INSERT INTO student_tests 
(name, test, score, test_date) VALUES
('Chun', 'SQL', 75, '2012-11-05'), 
('Chun', 'Tuning', 73, '2013-06-14'),
('Esben', 'SQL', 43, '2014-02-11'), 
('Esben', 'Tuning', 31, '2014-02-09'), 
('Kaolin', 'SQL', 56, '2014-01-01'),
('Kaolin', 'Tuning', 88, '2013-12-29'), 
('Tatiana', 'SQL', 87, '2012-04-28'), 
('Tatiana', 'Tuning', 83, '2013-09-30');

DELIMITER //
CREATE or REPLACE PROCEDURE proc1 (IN qry LONGTEXT) 
NOT DETERMINISTIC
READS SQL DATA
SQL SECURITY DEFINER
BEGIN

EXECUTE IMMEDIATE CONCAT("create or replace temporary table tab1 as (",qry,");");

SELECT * from tab1;

END
//
DELIMITER ;

#this works perfectly
call proc1 ("select * from student_tests"); 

#it doesnt work when I try to select columns
## Unknown column 'db.tab1.score' in 'field list'
call proc1 ("select name,test from student_tests");

我认为这与存储过程中的行SELECT * from tab1;有关。有人可以告诉我发生了什么事吗?我认为我不能正确理解临时表/存储过程。

0 个答案:

没有答案