mysql 中plsql运行时出错 说null是保留字段,但是sql语句中无null 只有过程中条件判断时出现过null

vitou 发布于 2012/02/14 16:44
阅读 1K+
收藏 0

我用navicat for mysql 写了一个过程 名字为sp_faq_count,ddl如下:

CREATE DEFINER=`helpcenter`@`%` PROCEDURE `sp_faq_count`(IN `faq_number` varchar(255),IN `faq_name` varchar(255),IN `faq_type` varchar(50),IN `faq_topic` varchar(50),IN `faq_answer` varchar(255),IN `first_result` int,IN `page_size` int)
BEGIN
SET @select ='select count(*) as total from faq f inner join faq_node fn,faq_node fn1 where f.faq_node_id =fn.id and fn.parent_id =fn1.id';
SET @condition =' where 1=1 ';

IF faq_number IS NOT NULL THEN
 SET @conditions =CONCAT(@conditions,' and f.faq_number = ''',faq_number,'''');
END IF;

IF faq_topic IS NOT NULL THEN
    SET @conditions = concat(@conditions, ' and f.faq_node_id in (', faq_topic, ')');
END IF;

IF faq_type IS NOT NULL THEN
 SET @conditions =CONCAT(@conditons,' and fn1.id in (',faq_type,')');
END IF;

IF faq_name IS NOT NULL THEN
    SET @v_faq_name = concat('''%', faq_name, '%''');
    SET @conditions = concat(@conditions, ' AND f.question like ', @v_faq_name);
END IF;

IF faq_answer IS NOT NULL THEN
    SET @v_faq_answer = concat('''%', faq_answer, '%''');
    SET @conditions = concat(@conditions, ' AND f.answer like ', @v_faq_answer);
END IF;

SET @s = CONCAT(@select,@conditions);
PREPARE stmt FROM @s;
EXECUTE stmt;
END
可以保存,后我点击运行按钮后 在出现的框中输入 null,null,null,null,null,1,10 后出现 SQL Error: 1064, SQLState: 42000

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'NULL' at line 1

提示说我的语句中有字段为null 是mysql的保留字 固出现错误,

但是观看整个过程中 没有字段是NULL的 只是在过程判断中有null出现。 

这个 求解,谢谢,比较急的。

 

以下是问题补充:

@vitou:虽然where 改了,只要所有的条件为空可以运行,但是我尝试着给faq_type赋值时,出错了 ,还是前面的错误 null 保留字字段的使用 (2012/02/15 09:26)
加载中
0
vitou
vitou

最后 还是发现了

SET @select ='select count(*) as total from faq f inner join faq_node fn,faq_node fn1 where f.faq_node_id =fn.id and fn.parent_id =fn1.id';

04 SET @condition =' where 1=1 ';
05   

中 有2个 where 了 所以 这是一处错误。

其他的还是没有发现 不错 改了这个错误后 我发现程序可以运行

只是什么条件都不输入的话 可以实现, 但是在测试的时候 输入 一个条件的话 还是会报上面的错误。。。。

0
vitou
vitou

估计是在 语句sql中的字符串用‘’来表示的时候,少了或是没有空格!

0
vitou
vitou

引用来自“vitou”的答案

估计是在 语句sql中的字符串用‘’来表示的时候,少了或是没有空格!

sql 语句规范问题
返回顶部
顶部