mysql存储过程中的 sql语句符号问题
发布网友
发布时间:2022-04-13 06:03
我来回答
共1个回答
热心网友
时间:2022-04-13 07:33
不要用斜杠
我看看我这个。没问题
PROCEDURE Pro_SelectBidUnit_NOWTIME_ALL(IN P_ID VARCHAR(64),
IN P_IFID VARCHAR(64),
IN P_USERID VARCHAR(64),
IN BEGINTIME DATETIME,
IN ENDTIME DATETIME
)
BEGIN
DECLARE v_sql VARCHAR(4000);
DECLARE lev INT;
SET lev = 1;
IF P_USERID != ''
THEN
DROP TABLE IF EXISTS tmp3;
CREATE TABLE tmp3(
IFID VARCHAR(40),
IFNAME VARCHAR(50),
INS_IFID VARCHAR(40),
levv INT
);
INSERT tmp3
SELECT IFID
, IFNAME
, INS_IFID
, 1
FROM
institutionalframework
WHERE
INS_IFID = P_IFID;
WHILE ROW_COUNT() > 0
DO
SET lev = lev + 1;
INSERT tmp3
SELECT t.IFID
, t.IFName
, t.INS_IFID
, lev
FROM
institutionalframework t
INNER JOIN tmp3 a
ON t.INS_IFID = a.IFID AND levv = lev - 1;
END WHILE;
INSERT tmp3
SELECT IFID
, IFNAME
, INS_IFID
, 0
FROM
institutionalframework
WHERE
IFID = P_IFID;
END IF;
SET @v_sql = concat('
SELECT a.ID
, a.BIDTOTALPRICES
, a.BOOLTENDER
, BIDINVITINGUNIT
, ITEMNAME
, BIDINVITINGNUMBER
, ITEMRATIFYUNIT
, RATIFYNUMBER
, BIDINVITINGUSER
, BIDINVITINGPHONE
, STARTTIME
, ITEMSTYPE
, ENTRUSTAMOUNT
, ENTRUSTDATE
, NOTICETIMEONE
, NOTICETIMETWO
, NOTICETIMETHREE
, SELLBIDFILETIME
, ITEMPART
, RECORDUSER
, RECORDTIME
, BIDSTART
, a.MEMO
, FLOWSTART
, b.IFID
, b.IFNAME
, c.ID AS DICID
, c.ITEMTEXT
, PRINCIPALUSER
, PRINCIPALPHONE
, PRINCIPALEMAIL
,SYNCHRONFLAG
FROM
tenders_bidinvitinguni a
INNER JOIN INSTITUTIONALFRAMEWORK b
ON a.ITEMPART = b.IFID
INNER JOIN TENDERS_DICTIONARYITEM c
ON c.ID = a.ITEMSTYPE
WHERE a.BIDSTART = 1 ');
IF BEGINTIME != ''
THEN
SET @v_sql = concat(@v_sql, ' and a.STARTTIME BETWEEN ');
SET @v_sql = concat(@v_sql, ' date(''');
SET @v_sql = concat(@v_sql, BEGINTIME);
SET @v_sql = concat(@v_sql, ''')');
SET @v_sql = concat(@v_sql, ' AND date(''');
SET @v_sql = concat(@v_sql, ENDTIME);
SET @v_sql = concat(@v_sql, ''')');
ELSE
SET @v_sql = concat(@v_sql, ' a.STARTTIME BETWEEN curdate() AND date_add(curdate(), INTERVAL 0 DAY) ');
END IF;
IF P_ID != ''
THEN
SET @v_sql = concat(@v_sql, ' and a.ID = ');
SET @v_sql = concat(@v_sql, P_ID);
SET @v_sql = concat(@v_sql, '');
END IF;
IF P_USERID != ''
THEN
SET @v_sql = concat(@v_sql, ' AND EXISTS (SELECT 1
FROM
tmp3 f
WHERE
f.IFID = b.IFID)');
END IF;
SET @v_sql = concat(@v_sql, ' order by a.RECORDTIME asc');
PREPARE s1 FROM @v_sql;
EXECUTE s1;
DEALLOCATE PREPARE s1;
END
MySQL分隔符的使用方法MySQL不使用逗号
在MySQL中,分号(;)是SQL语句的默认分隔符,但当在SQL语句中使用了其他语句块(如存储过程、函数等)时,分号就不能成为分隔符了。这是因为分号既是SQL语句的分隔符,又是存储过程的语句结束标志,导致执行存储过程时会因为分号而出现错误。因此,MySQL提供了自定义分隔符的功能,使得用户可以在SQL语句...
设置存储过程中语句结束符的命令是
设置存储过程中语句结束符的命令是DELIMITER。在MySQL等数据库管理系统中,DELIMITER是一个命令提示符,用于指定命令的结束。在创建存储过程或函数时,由于这些对象内部可能包含多条语句,每条语句通常以分号(;)结束,这就需要一种方法来区分存储过程或函数内部的分号与整个命令序列的结束。这时,就可以使用DE...
pandas写mysql报语法错误
一、问题原因 mysql数据库的存储过程创建语句之中需要使用begin表示存储过程要执行的语句从这里开始,在结尾使用end表示存储过程的语句要结束了。而在mysql数据库之中无论是查询还是添加语句都要使用分号去分隔,但是在存储过程之中创建sql语句的时候却被mysql数据库的编译器把分号当做了结束语句,没有end就...
mysql存储过程,触发器end后要跟分号吗?
mysql存储过程,触发器end后需要加分号,否则会提示错误。因为这些也是sql语句,mysql规定sql语句必须以分号结尾。
mysql存储过程参数带有逗号问题
这个应该可以使用字符串拼接,你是不是这样写存储过程:create procedure p_proc(var_in int)begin delete from [tableName] where [colName] in (var_in);end 然后又这样调用:call p_proc(1, 2, 3);这样肯定不行,那么你可以这样:create procedure p_proc(var_in varchar(5000))begin set ...
存储过程变量中存储SQL语句被截断的问题
楼主用的 什么数据库?mysql一般先拼接好SQL,再执行,如下:set conditions = "select * from table where 1 ";set conditions = concat(conditions," and id=",1);set @sql = conditions;sqlserver一般做拼接的话,如下:set @sql = 'select * FROM tab where name = @name'...
mysql之存储过程和存储函数
首先,使用`delimiter $$`来修改默认的SQL分号为其他符号,便于定义存储过程。然后,通过`create procedure`声明过程,注意MySQL不支持替换,只能重新创建。参数类型有`IN`(输入参数)、`OUT`(输出参数)和`INOUT`(双向参数),局部变量通过`declare`声明。调用存储过程使用`call`命令,例如:创建并调用...
mysql单个sql能跑出来,但是在存储过程中却卡住了
可能是存储过程中的语句有问题,可以尝试检查一下存储过程中的语句,看看是否有语法错误或者逻辑错误。另外,也可以尝试把存储过程中的语句一条一条地执行,看看哪一条语句出现了问题。
mysql存储过程一个参数有多个逗号分割
这个应该可以使用字符串拼接,你是不是这样写存储过程:create procedure p_proc(var_in int)begin delete from [tableName] where [colName] in (var_in);end 然后又这样调用:call p_proc(1, 2, 3);这样肯定不行,那么你可以这样:create procedure p_proc(var_in varchar(5000))begin set ...
MySql建立存储过程中遇到如下错误:ERROR 1064 (42000):
是你sql语句写错了,见到1064错误就是你的sql语句有语法错误