IBM Informix Dynamic Server版本11.50.FC6
我正在研究一个小的存储过程,该过程将从表中获取名称字段,并将其解析为最多8个字符的“用户名”。
这是我尝试的代码:
CREATE PROCEDURE build_jics_user (pid INT) RETURNING CHAR(8) AS username; SELECT LOWER((SUBSTR(firstname,0,1))||(SUBSTR(lastname,0,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
我不明白召唤临时表的意义是什么,而且我也找不到在线类似的简单示例,这些示例都可以正常工作。
有人知道我在想什么吗?
您想说的是:
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之间没有真正的技术区别,更多地是关于如何使用它的断言。