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

2024-04-16

IBM Informix 动态服务器版本 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);

UPDATE

如果它的目的是成为一个函数,并且在其他 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 之间没有真正的技术差异,更多的是关于如何使用它的断言。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么此 SQL 存储过程需要创建临时表才能工作(返回结果)? 的相关文章

  • 输出参数有什么问题?

    在 SQL 和 C 中 我从来都不太喜欢输出参数 我也从未在 VB6 中通过 ByRef 传递参数 依靠副作用来完成某件事只会让我烦恼 我知道它们是一种解决无法从函数返回多个结果的方法 但 SQL 中的行集或 C 和 VB 中的复杂数据类型
  • 适用于 Web 照片库的正确 NoSQL 数据架构

    我正在寻找为照片库的 NoSQL 存储构建合适的数据结构 在我的网络应用程序中 一张照片可以是一个或多个相册的一部分 我有使用 MySQL 的经验 但几乎没有使用键值存储的经验 使用 MySQL 我将设置 3 个表 如下所示 photos
  • mysql非空字段计数

    我想计算 mysql 中特定字段集有多少字段为空 我找到了一些示例 但它们都遍历整个表 基本上我有8个字段 listing photo 1 到listing photo 8 我想知道其中有多少个被填充 I tried result mysq
  • 基于 MySQL 中的另一列创建计算列

    我的表中有 2 列 varchar 8 and an int 我想要auto increment the int column当我这样做时 我想将值复制到varchar 8 column 但用 0 填充它直到它达到 8 个字符长 因此例如
  • Oracle:SQL查询查找属于表的所有触发器?

    我怎样才能找到属于一个表的所有触发器 以下内容将独立于您的数据库权限而工作 select from all triggers where table name YOUR TABLE 以下备用选项可能有效也可能无效 具体取决于您分配的数据库权
  • 如何在codeigniter中从数据库返回最后一条记录?

    我正在尝试获取我拥有数据的最后日期 所以我想打印 date data 列中的最后一个日期 在模型中 public function last record query this gt db gt select LAST date data
  • 使用动态 SQL 检索表结构

    我正在迁移数据库 并尝试将表结构信息检索到单个行项目中以进行机器处理 由于技术原因 现有的迁移工具无法使用 必须采用这种方式处理 我已在多个表上成功运行以下查询 SELECT LISTAGG column name data type da
  • struct{} 和 struct{}{} 在 Go 中如何工作?

    我想知道 Go 中的 struct 和 struct 是什么意思 示例如下 array index struct or make map type struct struct is a keyword https golang org re
  • 如何将 SELECT...INTO 与 JOIN 一起使用?

    我有以下示例代码 DECLARE myRow table rowtype myVar table2 column type BEGIN SELECT table col1 table col3 table col4 table2 colum
  • 通过选择插入时,如何在插入表之前检查重复项

    通过选择插入时 如何在插入表之前检查重复项 insert into table1 select col1 col2 from table2 我需要检查 table1 是否已经有 table1 col1 value table2 col1 v
  • 带有多表查询的 SQL Join 版本的 Djangoviews.py

    需要一些有关 Django 版本的 SQL 多表查询的帮助 该查询使用 3 个表来检索餐厅名称 地址Restaurants table和美食类型来自Cuisinetypes table 所有这些都基于通过 URL 传递的菜品名称 菜品 ID
  • PostgreSQL 中的字符串匹配

    我需要在 PostgreSQL 8 4 中实现正则表达式 据我理解 匹配 似乎正则表达式匹配仅在 9 0 中可用 我的需求是 当我给出输入时14 1我需要得到这些结果 14 1 1 14 1 2 14 1 Z 但排除 14 1 1 1 14
  • 如何编写看起来像方法的 lambda 表达式?

    我一直在疯狂地试图解决这个问题 考虑以下代码 我假设已定义前向引用 Signature representing a pointer to a method call typedef void MyClass MyMethod int cl
  • C# 和 SQL Server 中嵌套 using 的用法

    这个线程是一个延续是否有理由在 C 中使用子句检查多个内部的 null https stackoverflow com questions 2220422 is there a reason to check for null inside
  • 数据库索引:是好事、坏事还是浪费时间?

    这里通常建议添加索引作为性能问题的补救措施 我只讨论读取和查询 我们都知道索引会使写入速度变慢 多年来 我在 DB2 和 MSSQL 上多次尝试过这种补救措施 但结果总是令人失望 我的发现是 无论索引会让事情变得更好是多么 明显 事实证明查
  • SQL Server 2005:“保护”存储过程免受 MS Access 使用的 FMTONLY 模式影响

    我们拥有的一些存储过程包含条件逻辑 如下所示 Create Procedure dbo DoSomething Some Parameters As If Some Condition Begin Set SomeVariable Some
  • MySQL:如果该ip没有任何记录则插入

    I use INSERT INTO rating name user rating section ip VALUES name SESSION user rate section SERVER REMOTE ADDR 我想在 IF 语句中
  • 为每一表行创建一个 json

    我想从表中的数据创建 json 表格看起来像这样 code D5ABX0 MKT536 WAEX44 我正在使用 FOR JSON PATH 这很好 SELECT code FROM feature FOR JSON PATH 但是这个查询
  • 对所有列实施搜索过滤器

    我在 PostgreSQL 中找到了这个搜索示例http www postgresql org docs current interactive textsearch tables html TEXTSEARCH TABLES SEARCH
  • 为什么这个简单的 MySQL 查询不返回该行?

    我在表中有一行users与用户名test 但由于某种原因 此查询返回空结果集 SELECT id FROM users WHERE username test AND id null 但是 如果我删除 id null段 查询返回结果id 1

随机推荐