我正在尝试使用phpMyAdmin创建一个存储过程,它有2列作为参数。下面是我必须转换为带参数的存储过程的SQL代码:
SELECT c1.tara, c2.tara
FROM clase c1 JOIN clase c2 ON (c1.clasa > c2.clasa)
WHERE c1.deplasament = c2.deplasament AND c1.tip = c2.tip;
以下是表格的定义:
CREATE TABLE Clase (
clasa VARCHAR2(30),
tip VARCHAR2(12),
tara VARCHAR2(30),
nr_arme NUMBER(4,0),
diametru_tun VARCHAR2(20),
deplasament VARCHAR2(20));
查询显示了具有相同去血浆和头端的国家对。
为了创建存储过程,我使用phpMyAdmin中的“create new routine”选项。我知道对于这类问题,我必须使用预准备语句。我做了以下操作:
SET @s=CONCAT('SELECT c1.tara, c2.tara FROM clase c1 JOIN clase c2 ON (c1.clasa > c2.clasa) WHERE c1.',p_col1,'=c2.',p_col1,' AND c1.',p_col2,'=c2.',p_col2);
PREPARE stmt FROM @s;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
p_col1和p_col2是IN VARCHAR参数。当我单击“执行”时,我得到以下错误代码:#1064,这是一个语法错误,在第二行。我不知道语法哪里出了问题。其他的预准备语句的例子使用相同的语法。
2条答案
按热度按时间nx7onnlm1#
你能在这里试试吗:https://dbfiddle.uk/drIJr39p
工作正常:
b0zn9rqh2#
这里的问题似乎是phpMyAdmin对您的期望。
即使看起来你只需要在定义域中输入代码块,phpMyAdmin会处理剩下的事情(例如,如果需要的话,添加一个
begin
和end
),phpMyAdmin也会要求你在代码中包含BEGIN
和END
,如果它有多个语句的话。因此,在“定义”输入区,只需输入
其他的都很好。