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

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
简介: 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

相关文章
|
缓存 Ubuntu 前端开发
Linux配置yum源以及基本yum指令
Linux配置yum源以及基本yum指令
|
Cloud Native NoSQL 关系型数据库
数据传输DTS校验问题之校验报错如何解决
数据传输服务(DTS)是一项专注于数据迁移和同步的云服务,在使用过程中可能遇到多种问题,本合集精选常见的DTS数据传输问题及其答疑解惑,以助用户顺利实现数据流转。
|
Java
Java实现图片转化为pdf
Java实现图片转化为pdf
674 0
|
1月前
|
编解码 应用服务中间件 Linux
centos配置nginx-rtmp实现ffmpeg转码rtsp为rtmp视频流
centos配置nginx-rtmp实现ffmpeg转码rtsp为rtmp视频流
113 1
|
11月前
|
Web App开发 存储 JavaScript
揭秘!Vue3.5响应式重构如何让内存占用减少56%
【11月更文挑战第9天】本文揭秘了 Vue3.5 响应式系统的优化,通过精细化的依赖收集、优化数据劫持方式和自动的观察者清理,使得内存占用减少了 56%。文章详细介绍了响应式系统的工作原理和传统内存占用因素,并通过性能测试和实际案例展示了优化效果。
306 3
|
11月前
|
SQL 监控 安全
浅析Waf优缺点:硬件Waf、软件Waf、云Waf之总结
WAF(Web应用防火墙)是专为Web应用设计的安全防护产品,主要形态有硬件WAF、软件WAF和云WAF。硬件WAF易于部署,可承受高吞吐量,但价格昂贵;软件WAF廉价易用,功能丰富,但可能误杀和占用内存;云WAF部署简单,维护成本低,但存在被绕过和数据泄露的风险。RASP(运行时应用自我保护)是一种新兴技术,通过注入应用程序提供实时保护,误报率低,维护成本低,但部署复杂且可能影响性能。未来,WAF防护技术将结合机器学习、词法分析、行为识别和大数据关联分析,实现更精准的攻击识别和防护。
1792 2
|
11月前
|
机器学习/深度学习 PyTorch TensorFlow
深度学习中的正则化技术
【10月更文挑战第43天】在深度学习的海洋中,正则化技术犹如指南针,引导我们避开过拟合的暗礁。本文将带你探索L1和L2正则化的秘密,揭示它们如何塑造模型的轮廓,防止数据的微小波动引发预测的风暴。通过实例,我们将一起见证正则化如何在损失景观中开辟一条通往泛化能力的道路。准备好了吗?让我们启航,向着更稳健的模型进发!
180 3
|
11月前
|
消息中间件 测试技术
通过轻量消息队列(原MNS)主题HTTP订阅+ARMS实现自定义数据多渠道告警
轻量消息队列(原MNS)以其简单队列模型、轻量化协议及按量后付费模式,成为阿里云产品间消息传输首选。本文通过创建主题、订阅、配置告警集成等步骤,展示了该产品在实际应用中的部分功能,确保消息的可靠传输。
221 2
|
Windows
windows系统 如何查看端口占用情况并关闭占用的进程?
windows系统 如何查看端口占用情况并关闭占用的进程?
1152 0
|
存储 Ubuntu 关系型数据库
PolarDB-X部署测评
7月更文挑战第1天