CREATE FUNCTION get_ai_id_by_key(key_id_var INT, domain_id_var INT)
RETURNS CURSOR
BEGIN
    DECLARE curs CURSOR FOR SELECT key_id FROM prc_ai_define WHERE (to_number(substr(key_id, 1, 10)) = key_id_var) and (domain_id=domain_id_var);
    RETURN curs;
END;
上面这个编译不能通过

解决方案 »

  1.   

    不意思,一楼的贴发错了。请忽略。
    估计你的是没有设置 delimiter ,MySQL默认的是;,所以当你输入;时就提交了。mysql> CREATE FUNCTION hello (s CHAR(20)) RETURNS CHAR(50)
        -> RETURN CONCAT('Hello, ',s,'!');
    Query OK, 0 rows affected (0.00 sec)mysql> SELECT hello('world');
    +----------------+
    | hello('world') |
    +----------------+
    | Hello, world!  |
    +----------------+
    1 row in set (0.00 sec)你的估计改成下面的再试试mysql> delimiter //mysql> CREATE FUNCTION get_ai_id_by_key(key_id_var INT, domain_id_var INT)  
        -> RETURNS CURSOR 
        -> BEGIN
        ->   DECLARE curs CURSOR FOR SELECT key_id FROM prc_ai_define WHERE (to_number(substr(key_id, 1, 10)) = key_id_var) and (domain_id=domain_id_var); 
        ->   RETURN curs; 
        -> END;
        -> //
    Query OK, 0 rows affected (0.00 sec)mysql> delimiter ;
      

  2.   

    我试验过,mysql的function或者procedure都不可以直接用关键字OUT或者returns返回Cursor,编译都错。其实只需要在procedure中写正常的查询语句 select  from ,调用该procedure就可以返回结果集了。 :)  楼主可以在MySQL中试试。