微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么此SQL存储过程需要创建一个临时表才能使其正常工作返回结果?

如何解决为什么此SQL存储过程需要创建一个临时表才能使其正常工作返回结果?

您想说的是:

CREATE PROCEDURE build_jics_user (pid INT)
    RETURNING CHAR(8);
    DEFINE username CHAR(8);
    SELECT LOWER((SUBSTR(firstname,0,1))||(SUBSTR(lastname,0,7))) INTO username
      FROM id_rec
      WHERE id = pid;
    RETURN username;
END PROCEDURE;

…并像这样执行它:

EXECUTE PROCEDURE build_jics_user(42);

如果此操作的目的是成为一个函数(在其他一些sql中需要此函数),则可以执行以下操作:

CREATE FUNCTION jics_user(fname VARCHAR(255), lname VARCHAR(255))
    RETURNING CHAR(8);
    RETURN LOWER(SUBSTR(fname,0,1) || SUBSTR(lname,0,7));
END FUNCTION;

…并像这样执行它:

SELECT id, firstname, lastname, jics_user(firstname, lastname) AS jics_user, ...
  FROM id_rec;

PROCEDURE和FUNCTION之间没有真正的技术区别,更多地是关于如何使用它的断言。

解决方法

IBM Informix Dynamic Server版本11.50.FC6

我正在研究一个小的存储过程,该过程将从表中获取名称字段,并将其解析为最多8个字符的“用户名”。

这是我尝试的代码:

CREATE PROCEDURE build_jics_user (pid INT)
    RETURNING CHAR(8) AS username;
    SELECT LOWER((SUBSTR(firstname,1))||(SUBSTR(lastname,7))) username
    FROM id_rec
    WHERE id = pid;
END PROCEDURE;

执行时返回的错误是:

  659: INTO TEMP table required for SELECT statement.
Error in line 5
Near character position 15

我不明白召唤临时表的意义是什么,而且我也找不到在线类似的简单示例,这些示例都可以正常工作。

有人知道我在想什么吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。