当前位置: 首页 > 面试题库 >

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

翁建弼
2023-03-14
问题内容

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之间没有真正的技术区别,更多地是关于如何使用它的断言。



 类似资料:
  • 我有一个包含两个参数的存储过程。我可以在服务器管理工作室成功执行它。它向我显示了我所期望的结果。然而,它也返回一个返回值。 它增加了这一行, 我希望存储过程返回它在结果中显示给我的表,而不是返回值,因为我从MATLAB调用这个存储过程,它返回的都是true或false。 我需要在存储过程中指定它应该返回什么吗?如果是这样,我如何指定一个包含4列的表(varchar(10)、float、float、

  • 问题内容: 我有这个查询: 我只想将其存储在临时表中,以便可以对其进行处理。如果任何人都可以仅包括在SQL Server中创建临时表的语法,那将是很好的。 我尝试了不同的方法,但是迷路了,没有得到想要的结果。 问题答案: 如果您只想在查询中创建一个临时表,以使您可以对存储到其中的结果进行某些操作,则可以执行以下操作: 在查询顶部,然后执行

  • 问题内容: 如果包含变音符号(ä,ö,ü)在我的Windows操作系统上不起作用。通过反复试验,我发现需要做一些工作。 但是,当我将其实时推送到服务器上(猜测它是某种Linux)时,它又返回了一个错误,因此我删除了,然后突然工作正常。 作为一种解决方法(因此,我不需要在每次更改代码时都手动更改此代码),我已经尝试过 因为这已经反过来解决了相同的问题()也有同样的问题,但是事实证明它在每个(服务器)

  • 问题内容: 我有一个存储过程,它检查用户是否已经存在,无论用于电子邮件的输入是什么,它随数据库的第一行一起返回。如果我手动运行select语句,我将得到正确的结果。有什么建议吗? 问题答案: 您的问题无疑在这里: 白衣 您的参数名称与列名称相同。这 可 实际工作,但规则使它这样做可能是怪异。(我认为,如果您更改引号,它可能会起作用)。 但是实际上,您应该做的是将参数重命名为其他名称:

  • 问题内容: 我需要一个SP来返回多组结果。第二组结果将基于第一组结果的一列。 所以: 如何用我的SP返回@ myTable1和@ myTable2?这种语法完全正确吗? 抱歉,我仍然是SQL的新手… 编辑: 因此,我在下面的代码的最后一行看到错误:“必须声明标量变量“ @ myTable1”” 如果我突出显示并运行代码直到第二个代码,它就可以正常工作。 EDIT2: 解决了该问题。谢谢你们。 问题

  • 本文向大家介绍SQL 创建临时表或内存表,包括了SQL 创建临时表或内存表的使用技巧和注意事项,需要的朋友参考一下 示例 PostgreSQL和SQLite 要创建会话本地的临时表: SQL服务器 要创建会话本地的临时表: 创建对所有人可见的临时表: 要创建一个内存表: