KDTS迁移视图报错ERROR: syntax error at or near "IF"

本文涉及的产品
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS AI 助手,专业版
简介: KDTS迁移视图报错ERROR: syntax error at or near "IF"

ERROR: syntax error at or near "IF"

问题描述

错误报告中显示如下报错:

PORTAL.V_DATAQUALITY_ORGAN fail:
com.kingbase.kdts.h.b: sql=IF EXISTS(select * from sys.views v left join sys_namespace n on n.oid = v.schema_id and nspname = 'public' where NAME='V_DATAQUALITY_ORGAN') DROP VIEW  "public"."V_DATAQUALITY_ORGAN" 
  at com.kingbase.kdts.dboperator.a.aQ(AbstractDbOperator.java:327)
  at com.kingbase.kdts.dboperator.a.execute(AbstractDbOperator.java:293)
  at com.kingbase.kdts.job.migration.at.bf(ViewWriteJob.java:57)
  at com.kingbase.kdts.job.migration.at.call(ViewWriteJob.java:25)
  at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
  at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
  at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
  at java.base/java.lang.Thread.run(Thread.java:842)
Caused by: com.kingbase8.util.KSQLException: ERROR: syntax error at or near "IF"
  Position: 1 At Line: 1, Line Position: 1
  at com.kingbase8.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:3675)
  at com.kingbase8.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:3101)
  at com.kingbase8.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:407)
  at com.kingbase8.jdbc.KbStatement.executeInternal_(KbStatement.java:806)
  at com.kingbase8.jdbc.KbStatement.execute(KbStatement.java:698)
  at com.kingbase8.jdbc.KbStatement.executeWithFlags(KbStatement.java:601)
  at com.kingbase8.jdbc.KbStatement.executeCachedSql(KbStatement.java:575)
  at com.kingbase8.jdbc.KbStatement.executeWithFlags(KbStatement.java:536)
  at com.kingbase8.jdbc.KbStatement.executeUpdate(KbStatement.java:478)
  at com.zaxxer.hikari.pool.ProxyStatement.executeUpdate(ProxyStatement.java:119)
  at com.zaxxer.hikari.pool.HikariProxyStatement.executeUpdate(HikariProxyStatement.java)
  at com.kingbase.kdts.dboperator.a.aQ(AbstractDbOperator.java:317)
  ... 7 common frames omitted
PORTAL.VIEW_SYS_MENU_ORGAN fail:
com.kingbase.kdts.h.b: sql=IF EXISTS(select * from sys.views v left join sys_namespace n on n.oid = v.schema_id and nspname = 'public' where NAME='VIEW_SYS_MENU_ORGAN') DROP VIEW  "public"."VIEW_SYS_MENU_ORGAN" 
  at com.kingbase.kdts.dboperator.a.aQ(AbstractDbOperator.java:327)
  at com.kingbase.kdts.dboperator.a.execute(AbstractDbOperator.java:293)
  at com.kingbase.kdts.job.migration.at.bf(ViewWriteJob.java:57)
  at com.kingbase.kdts.job.migration.at.call(ViewWriteJob.java:25)
  at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
  at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
  at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
  at java.base/java.lang.Thread.run(Thread.java:842)
Caused by: com.kingbase8.util.KSQLException: ERROR: syntax error at or near "IF"
  Position: 1 At Line: 1, Line Position: 1
  at com.kingbase8.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:3675)
  at com.kingbase8.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:3101)
  at com.kingbase8.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:407)
  at com.kingbase8.jdbc.KbStatement.executeInternal_(KbStatement.java:806)
  at com.kingbase8.jdbc.KbStatement.execute(KbStatement.java:698)
  at com.kingbase8.jdbc.KbStatement.executeWithFlags(KbStatement.java:601)
  at com.kingbase8.jdbc.KbStatement.executeCachedSql(KbStatement.java:575)
  at com.kingbase8.jdbc.KbStatement.executeWithFlags(KbStatement.java:536)
  at com.kingbase8.jdbc.KbStatement.executeUpdate(KbStatement.java:478)
  at com.zaxxer.hikari.pool.ProxyStatement.executeUpdate(ProxyStatement.java:119)
  at com.zaxxer.hikari.pool.HikariProxyStatement.executeUpdate(HikariProxyStatement.java)
  at com.kingbase.kdts.dboperator.a.aQ(AbstractDbOperator.java:317)
  ... 7 common frames omitted
PORTAL.V_SZ_DM_JG fail:
com.kingbase.kdts.h.b: sql=IF EXISTS(select * from sys.views v left join sys_namespace n on n.oid = v.schema_id and nspname = 'public' where NAME='V_SZ_DM_JG') DROP VIEW  "public"."V_SZ_DM_JG" 
  at com.kingbase.kdts.dboperator.a.aQ(AbstractDbOperator.java:327)
  at com.kingbase.kdts.dboperator.a.execute(AbstractDbOperator.java:293)
  at com.kingbase.kdts.job.migration.at.bf(ViewWriteJob.java:57)
  at com.kingbase.kdts.job.migration.at.call(ViewWriteJob.java:25)
  at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
  at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
  at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
  at java.base/java.lang.Thread.run(Thread.java:842)
Caused by: com.kingbase8.util.KSQLException: ERROR: syntax error at or near "IF"
  Position: 1 At Line: 1, Line Position: 1
  at com.kingbase8.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:3675)
  at com.kingbase8.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:3101)
  at com.kingbase8.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:407)
  at com.kingbase8.jdbc.KbStatement.executeInternal_(KbStatement.java:806)
  at com.kingbase8.jdbc.KbStatement.execute(KbStatement.java:698)
  at com.kingbase8.jdbc.KbStatement.executeWithFlags(KbStatement.java:601)
  at com.kingbase8.jdbc.KbStatement.executeCachedSql(KbStatement.java:575)
  at com.kingbase8.jdbc.KbStatement.executeWithFlags(KbStatement.java:536)
  at com.kingbase8.jdbc.KbStatement.executeUpdate(KbStatement.java:478)
  at com.zaxxer.hikari.pool.ProxyStatement.executeUpdate(ProxyStatement.java:119)
  at com.zaxxer.hikari.pool.HikariProxyStatement.executeUpdate(HikariProxyStatement.java)
  at com.kingbase.kdts.dboperator.a.aQ(AbstractDbOperator.java:317)
  ... 7 common frames omitted
PORTAL.V_DATAQUALITY_USER fail:
com.kingbase.kdts.h.b: sql=IF EXISTS(select * from sys.views v left join sys_namespace n on n.oid = v.schema_id and nspname = 'public' where NAME='V_DATAQUALITY_USER') DROP VIEW  "public"."V_DATAQUALITY_USER" 
  at com.kingbase.kdts.dboperator.a.aQ(AbstractDbOperator.java:327)
  at com.kingbase.kdts.dboperator.a.execute(AbstractDbOperator.java:293)
  at com.kingbase.kdts.job.migration.at.bf(ViewWriteJob.java:57)
  at com.kingbase.kdts.job.migration.at.call(ViewWriteJob.java:25)
  at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
  at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
  at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
  at java.base/java.lang.Thread.run(Thread.java:842)
Caused by: com.kingbase8.util.KSQLException: ERROR: syntax error at or near "IF"
  Position: 1 At Line: 1, Line Position: 1
  at com.kingbase8.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:3675)
  at com.kingbase8.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:3101)
  at com.kingbase8.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:407)
  at com.kingbase8.jdbc.KbStatement.executeInternal_(KbStatement.java:806)
  at com.kingbase8.jdbc.KbStatement.execute(KbStatement.java:698)
  at com.kingbase8.jdbc.KbStatement.executeWithFlags(KbStatement.java:601)
  at com.kingbase8.jdbc.KbStatement.executeCachedSql(KbStatement.java:575)
  at com.kingbase8.jdbc.KbStatement.executeWithFlags(KbStatement.java:536)
  at com.kingbase8.jdbc.KbStatement.executeUpdate(KbStatement.java:478)
  at com.zaxxer.hikari.pool.ProxyStatement.executeUpdate(ProxyStatement.java:119)
  at com.zaxxer.hikari.pool.HikariProxyStatement.executeUpdate(HikariProxyStatement.java)
  at com.kingbase.kdts.dboperator.a.aQ(AbstractDbOperator.java:317)
  ... 7 common frames omitted

选中某个视图提示如下报错

-- ERROR: syntax error at or near "IF"
  Position: 1 At Line: 1, Line Position: 1
而KDTS详情中源库Oracle中视图sql显示为空

解决办法

Oracle源库中生成视图sql,如下:

CREATE VIEW PORTAL.V_DATAQUALITY_ORGAN ( ID, VALID, NAME, CODE, GRADE, PARENT, SHORTNAME, ORGANTYPECODE, PRINTTEXT )
AS
SELECT ID --主键ID
, TO_NUMBER(STATE,'999') AS VALID --状态:01:正常;02:注销 ; 03: 删除; 04 不可用
, NAME --名称
, CODE --代码
, GRADE --级次
, PARENT_ID AS PARENT --父机构ID
, NULLIF(SHORT_NAME, CODE) AS SHORTNAME --简称
, ORGAN_TYPE_CODE AS ORGANTYPECODE --机构类型 
, PRINT_TEXT AS PRINTTEXT --局轨
FROM AAF_ORGAN 
GO

将PORTAL.去掉,直接在目标库KES中创建


作者:董小姐yyds

Oracle 11g OCM,KCP,PGCE,墨天轮技术专家,青学会成员

擅长主流Oracle、MySQL、PG安装部署、故障定位处理、性能优化,

金仓、达梦、openGauss系等各种商用和开源国产数据库

微信:margaretdy

公众号:董小姐yyds

视频号:DongxiaojieYYDS

墨天轮:https://www.modb.pro/u/3121

CSDN:https://blog.csdn.net/qq961573863?type=blog

知乎:https://www.zhihu.com/people/fuwaxiaohuan

相关文章
|
Java 数据库连接 数据库
springboot 集成kingbase的步骤
要在Spring Boot中集成Kingbase数据库,你可以按照以下步骤进行操作: 步骤1:添加Kingbase JDBC驱动 首先,将Kingbase JDBC驱动程序添加到Spring Boot项目的依赖项中。你可以在Maven或Gradle构建文件中添加以下依赖项(根据你使用的构建管理工具进行选择): 对于Maven: ```xml <dependency> <groupId>com.kingbase</groupId> <artifactId>kingbase-driver</artifactId> <version>{驱动版本}</version> </
2292 0
|
缓存 Ubuntu 前端开发
Linux配置yum源以及基本yum指令
Linux配置yum源以及基本yum指令
|
Cloud Native NoSQL 关系型数据库
数据传输DTS校验问题之校验报错如何解决
数据传输服务(DTS)是一项专注于数据迁移和同步的云服务,在使用过程中可能遇到多种问题,本合集精选常见的DTS数据传输问题及其答疑解惑,以助用户顺利实现数据流转。
|
存储 关系型数据库 MySQL
【分布式和微服务1】一篇文章详细了解分布式和微服务的基本概念
【分布式和微服务1】一篇文章详细了解分布式和微服务的基本概念
1957 0
|
3月前
|
人工智能 缓存 语音技术
基于Rokid CXR-M SDK实现AR智能助手应用:让AI大模型走进AR眼镜
本文记录使用Rokid CXR-M SDK开发AR AI助手的全过程,涵盖SDK集成、语音识别、AI对接、结果推送等核心功能,分享实际开发中的技术选型、架构设计与踩坑经验,实现解放双手的实时语音问答体验。
422 6
基于Rokid CXR-M SDK实现AR智能助手应用:让AI大模型走进AR眼镜
|
6月前
|
SQL XML Java
MyBatis框架如何处理字符串相等的判断条件。
总的来说,MyBatis框架提供了灵活而强大的机制来处理SQL语句中的字符串相等判断条件。无论是简单的等值判断,还是复杂的条件逻辑,MyBatis都能通过其标签和属性来实现,使得动态SQL的编写既安全又高效。
525 0
|
Ubuntu 关系型数据库 MySQL
libmysqlclient.so.18(libmysqlclient.so.20 libmysqlclien.so) => not found
libmysqlclient.so.18(libmysqlclient.so.20 libmysqlclien.so) => not found
1580 0
libmysqlclient.so.18(libmysqlclient.so.20 libmysqlclien.so) => not found
|
SQL Java 数据库
dts在数据迁移过程中,出现“无效的表或视图名”错误
dts在数据迁移过程中,如果出现“无效的表或视图名”错误
1671 6
|
Windows
windows系统 如何查看端口占用情况并关闭占用的进程?
windows系统 如何查看端口占用情况并关闭占用的进程?
1413 0
|
运维 Kubernetes 数据可视化
【Docker管理工具】使用Docker部署portainer-ce管理工具
【7月更文挑战第22天】使用Docker部署portainer-ce管理工具
1904 3
【Docker管理工具】使用Docker部署portainer-ce管理工具