如何在Informix中正确输入存储过程参数?

时间:2015-06-01 17:00:14

标签: sql stored-procedures informix

我使用dbaccess下面有一个存储过程:

CREATE PROCEDURE proc_1 (p_name VARCHAR(20), 
p_usernum INTEGER)
RETURNING CHAR(7);
DEFINE err INTEGER;

ON EXCEPTION SET err
RETURN 'ERROR';
END EXCEPTION

ON EXCEPTION IN (150) SET err
RETURN 'NOTHING';
END EXCEPTION

INSERT INTO database1 (name, usernum,)
VALUES (p_name, p_usernum,);

IF DBINFO('sqlca.sqlerrd2') = 0
      THEN RAISE EXCEPTION 150;
   END IF;

RETURN 'YES';
END PROCEDURE;

.... 运行存储过程时出现错误-201。 第一个参数后面的下一行是否导致错误? 是否有正确的方法允许参数移动到存储过程中的下一行? 我想要做的是使用INSERT运行存储过程,如果INSERT也不成功则返回错误信息。

1 个答案:

答案 0 :(得分:2)

我不知道它是否是错误的copy+paste,但是在定义err时你错过了类型,你在insert子句上有一些额外的逗号,而你&#39 ;重新返回截断值CHAR(5)的{​​{1}}。试试这个:

NOTHING

不要使用例外150,你有一个自定义用于此(746):

CREATE PROCEDURE proc_1 (p_name VARCHAR(20), p_usernum INTEGER) RETURNING CHAR(7);

DEFINE err INTEGER;

ON EXCEPTION SET  err
    RETURN 'ERROR';
END EXCEPTION

ON EXCEPTION IN (746) SET err
RETURN 'NOTHING';
END EXCEPTION

INSERT INTO database1 (name, usernum)
VALUES (p_name, p_usernum);

IF DBINFO('sqlca.sqlerrd2') = 0
      THEN RAISE EXCEPTION 746;
   END IF;

RETURN 'YES';
END PROCEDURE;