【问题标题】:Create a Trigger to genearate a random alphanumeric string in informix在informix中创建一个Trigger来生成一个随机的字母数字字符串
【发布时间】:2019-03-27 13:32:59
【问题描述】:

使用 Informix 数据库在插入之前创建触发器。 当我们尝试向表中插入一条记录时,它应该将随机字母数字字符串插入其中一个字段。有内置函数吗?

该表由以下字段组成:

  • empid serial NOT NULL
  • age int
  • empcode varchar(10)

我正在跑步

insert into employee(age) values(10);

预期的输出应该如下所示:

 id age empcode
 1, 10, asf123*

感谢任何帮助。

【问题讨论】:

  • 在 Informix 中没有生成随机字符串的内置函数。您必须创建自己的。

标签: informix


【解决方案1】:

正如已经评论过的,没有创建随机字符串的现有函数,但是可以生成随机数,然后将它们转换为字符。要创建随机数,您可以为 C 函数(例如 random())创建 UDR 包装器,或者注册 excompat 数据刀片并使用 dbms_random_random() 函数。 下面是一个用户定义函数的示例,该函数使用dbs_random_random() 函数生成一串 ASCII 字母数字字符:

create function random_string()
returning varchar(10)
define s varchar(10);
define i, n int;
let s = "";

for i = 1 to 10
  let n = mod(abs(dbms_random_random()), 62);
  if (n < 10)
  then
    let n = n + 48;
  elif (n < 36)
  then
    let n = n + 55;
  else
    let n = n + 61;
  end if
  let s = s || chr(n);
end for

return s;
end function;

然后可以从插入触发器调用此函数以填充表的 empcode 列。

【讨论】:

  • 嗨,感谢我创建触发器并调用上述函数如下创建触发器 rand_trigtest INSERT ON employeetest FOR EACH ROW(EXECUTE FUNCTION random_string() INTO empcode) 我得到 dbms_random_random 无法解决。我们将尝试安装以下包,你能告诉我们上面的功能是如何工作的吗
  • @P.S.Mahalakshmi — +48 将值 0..9 转换为数字 '0'..'9'(其代码点为 48..57 ASCII(和 Unicode,以及 ISO 8859 等) ). +55 可以视为- 10(允许10 位数字)和+ 65,其中65'A' 的ASCII 码;它将代码10..36 转换为字母A-Z)。而+61可以看作- 36(十位数字,二十个大写字母)和+ 97,其中97'a'的ASCII码;它将代码 37..63 转换为字母 a-z。
  • 嗨,我们已经在我们的一个环境中实现了上述触发器并面临以下问题。请在应用程序尝试调用 post api 时发现错误,如下所示:
  • 2019-05-06 10:39:02 错误 [Informix_Conn.py : 37] 查询中的 QRY001 错误:INSERT INTO dots.project_organization_map(project_guid、org_guid、project_manager_uid、project_start_date、project_end_date、cretaedby_empid、createdby_timestamp , last_updatedby_empid, last_updated_timestamp,project_name)
  • 值('a234e3b4-1319-11e9-87d3-6a0ba69fbc52','pGkFc4niJ6','0469B4744','2018-11-08','2019-10-31','AVL2UA744',当前,“AVL2UA744”,当前,“calimtest0001”); 2019-05-06 10:39:02 错误 [Informix_Conn.py:43] DB001:语句执行失败:[IBM][CLI 驱动程序][IDS/UNIX64] 违反了唯一约束 (informix.project_organization_map_pk)。 SQLCODE=-268
猜你喜欢
  • 2013-11-07
  • 2017-04-05
  • 2011-08-18
  • 1970-01-01
  • 1970-01-01
  • 2011-02-17
  • 2022-09-27
  • 2011-02-18
相关资源
最近更新 更多