如何解决insert into 的时候报 FUNCTION does not exist

测试环境insert into sql插入的时候报org.jkiss.dbeaver.model.sql.DBSQLException: SQL 错误 [1305] [42000]: (conn=1638402) FUNCTION does not exist
at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCStatementImpl.executeStatement(JDBCStatementImpl.java:133) sql没有用任何函数,就是正常的insert into 插入语句 [@论坛小助手]

根因分析场景: SQL 执行出错
根因分析命令: obdiag rca run --scene=sql_execution_error --env “{db_connect=’-h127.0.0.1 -P2881 -utest@test -p****** -Dtest’, err_msg=‘FUNCTION does not exist’}”
日志采集场景: SQL执行出错
日志采集命令: obdiag gather scene run --scene=observer.sql_err --env “{db_connect=’-h127.0.0.1 -P2881 -utest@test -p****** -Dtest’, trace_id=‘Yxx’}”

为了更好地帮助您解决在测试环境中执行 INSERT INTO 语句时遇到的 ‘FUNCTION does not exist’ 错误(错误代码 1305),我们建议使用 obdiag 工具进行日志采集和根因分析。这将有助于我们了解问题的具体原因。

请您根据上述命令进行操作,并将采集到的日志提供给我们以便确认问题所在。同时,为了更准确地定位问题,请您提供以下信息:

  1. 具体是哪个函数不存在?请提供完整的错误信息。
  2. 您是否最近对数据库结构进行了更改或删除了某些函数?
  3. 在遇到此问题之前,是否成功执行过类似的 INSERT INTO 语句?
  4. 测试环境中的 OceanBase 数据库版本是多少?
  5. 能否提供发生错误时的完整 SQL 语句以及相关表和函数的定义?

通过这些信息,我们可以进一步分析并给出更具体的解决方案。

附上敏捷诊断工具 obdiag 使用帮助链接

ob的版本号 obclient黑屏操作dml报错么?

可以把报错的语句发出来看看,是不是里面有一些特殊符号

没有特殊字符

根据您提供的 SQL 语句和错误信息,FUNCTION does not exist 错误通常意味着在执行 SQL 语句时引用了不存在的函数。然而,从您给出的 INSERT INTO 语句来看,并没有显式调用任何自定义函数或存储过程。因此,这个问题可能由以下几个潜在原因引起:

  1. 隐式触发器或约束:检查目标表 nxyfi.gla_vchr 是否存在触发器或约束条件,在插入操作时会自动调用某些函数。
  2. 默认值设置:确认所有列的数据类型及其默认值设定,确保没有使用未定义的函数作为默认值。
  3. 数据库对象权限问题:确保当前用户拥有对所有相关数据库对象(包括但不限于表、视图、函数)的适当权限。
  4. 字符集和排序规则冲突:虽然不太常见,但有时字符集或排序规则不一致也会导致类似的问题。

为了帮助进一步排查问题,请尝试以下步骤:

步骤 1: 检查表结构

DESCRIBE nxyfi.gla_vchr;

这将显示表中每一列的信息,包括它们的数据类型、是否允许为空等属性。特别注意是否有任何字段指定了默认值为某个函数。

歪步 2: 查询触发器

SELECT * FROM information_schema.TRIGGERS WHERE TRIGGER_SCHEMA = 'nxyfi' AND EVENT_OBJECT_TABLE = 'gla_vchr';

此查询可以帮助我们了解是否存在与该表相关的触发器,以及这些触发器是否会调用某些函数。

步骤 3: 验证权限

确保用于执行插入操作的用户具有足够的权限来访问所有必要的数据库对象。可以通过以下命令查看用户的权限:

SHOW GRANTS FOR CURRENT_USER();

步骤 4: 简化测试

尝试简化您的插入语句,逐步增加数据量,直到找到引发错误的具体部分。例如,先只插入几列数据,然后逐渐添加更多列,直到重现错误为止。

如果以上方法仍无法解决问题,建议启用详细的日志记录功能以获取更多诊断信息。您可以参考 obdiag 使用帮助,使用 obdiag 工具收集相关日志并进行分析。

此外,考虑到您提到的是 OceanBase 社区版 3.2.4 版本,也请确保已经应用了最新的补丁更新,因为某些已知问题可能已经在后续版本中得到了修复。如果您继续遇到困难,可以考虑联系官方支持团队获取更专业的帮助。

具体信息可参考以下文档:

  1. UUID_TO_BIN
  2. 配置最佳实践
  3. 索引操作

(小助手的答复已结束,如未能解决您的问题,请继续提问并等待其他同学的回复,谢谢!)

不还意思 你这个是企业版 建议你联系企业版客户经理,你可通过OceanBase官网商务咨询页面留下你的联系方式,OceanBase企业版的业务顾问会在一个工作日内与你联系。另外,我们欢迎你使用社区版,并在论坛/社群中分享你对社区版本的想法、经验和问题,与其他社区成员共同交流。