正常情况下:
enfwm   VARCHAR(200),  //(为该存储过程中要输入的参数)
DECLARE vfwm   VARCHAR(20);//(要得到的结果)
SET vfwm = code(enfwm);//执行这步的时候,通过调用,可以得到一个vfwm的结果值。后来,因为工程的需要,我做了一下修改
  IF (length(enfwm) = 16) THEN
  SET enfwm = substring(enfwm, 4);
  SET vfwm = code(enfwm);
就是在执行调用之前做一个判断,如果参数为16位就取这个参数的后面13之后,再进行调用。
但是问题就出在这个地方了,我在前面加了一个条件之后,SET vfwm = code(enfwm);得不到任何值,调试显示显示的是空的在正常情况下,要么显示NULL,要么显示一个正常的值。

解决方案 »

  1.   

    上图中,我设置参数 enfwm的值为 0001234567890123;substring截取之后得到1234567890123
      

  2.   

    mysql> select substring('0001234567890123',4); 
    +---------------------------------+
    | substring('0001234567890123',4) |
    +---------------------------------+
    | 1234567890123                   |
    +---------------------------------+
    1 row in set (0.00 sec)code是什么函数
      

  3.   

    IF (length(enfwm) = 16) THEN
       SET enfwm = substring(enfwm, 4);
       SET vfwm = code(enfwm);
    END IF;
      

  4.   

    应该IF (length(enfwm) = 16) THEN
       SET enfwm = substring(enfwm, 4);
    END IF;
    SET vfwm = code(enfwm);
      

  5.   


    把 SET vfwm = code(enfwm);写到里面测试过了不行。调用这个code()这个函数的时候得到的还是一个空的值
      

  6.   


    IF (length(enfwm) = 16) THEN
       SET enfwm = substring(enfwm, 4);
    END IF;
    SET vfwm = code(enfwm);这样写还是得不到结果
      

  7.   

    就是在执行调用之前做一个判断,如果参数为16位就取这个参数的后面13之后,再进行调用。IF (length(enfwm) = 16) THEN
        SET enfwm = substring(enfwm, 13,1000);
      

  8.   

    会不会是类型上面的问题呢? substring 这个函数能够取到值。 如果是16位,就截取第4位到16之间的内容,如果参数是0001234567890123就先substring得到1234567890123,再去调用code(enfwm)这个得到vfwm,现在的问题是,能够截取到,但是调用函数的时候得到的结果是空的,不能得到值。