我有一张表格,根据地点(P)和赛车手数量(R)查找得分点数
以及由points_id指示的评分格式。表中显示了两种情况。
有时候这些点直接由P和N的值确定,如points_id = 3
其他时候,他们最容易通过pts_calc列中显示的简单计算来确定。
|points_id| P | N |points|pts_calc|
| 1 | 0 | 0 | NULL | pin |
| 1 |DNS| 0 | NULL | nin+1 |
| 3 | 1 | 0 |102.00| NULL |
| 3 | 2 | 0 | 98.00| NULL |
| 3 | 3 | 0 | 96.00| NULL |
| 3 | 4 | 0 | 93.00| NULL |
| 3 | 5 | 0 | 91.00| NULL |
| 3 | 6 | 0 | 89.00| NULL |
| 3 |DNF| 0 | 85.00| NULL |我希望能够创建一个返回三个输入变量中的点的函数。
points_id,P,N
以下是我的尝试。
CREATE FUNCTION POINTS(pid INT,pin VARCHAR(3),nin INT)
RETURNS DEC(6,2)
DETERMINISTIC
BEGIN
DECLARE pts DECIMAL(6,2);
DECLARE pcalc VARCHAR(20);
SELECT points,pts_calc INTO pts,pcalc FROM scoring_points WHERE points_id=pid AND (P=pin OR P='0') AND (N=nin or N=0);
IF(pts IS NULL) THEN
SET @s= CONCAT('SET pts = ',pcalc);
PREPARE stmt FROM @s;
EXECUTE stmt;
END IF;
RETURN pts;
END但是我得到了这个错误。
1336 - 存储函数或触发器中不允许动态SQL h1>
进一步的研究表明Prepare语句不仅仅在函数中被允许,而是在程序中。
我希望能做一些事情;
SELECT SUM(Points(pid,place,numb)) FROM t1 GROUP BY racer.id但是在计划B(待定),除非有人有好主意。