添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

最近因工作需要,需要将一些数据同步到oracle数据库,我以为语法应该差不多,没想到真的踩了几个坑,今天分享出来,供大家借鉴。

准备一张测试表test,字段有id、name和创建时间。

INSERT INTO "ROOT"."test"("id", "name", "create_time") VALUES (1, '添加1', '2020-11-26 20:00:00');

反手就是添加一条语句,你以为没问题?结果:

报错:日期格式不能转换为字符串

重点1:添加日期数据需要使用TO_DATE

INSERT INTO "ROOT"."test"("id", "name", "create_time") VALUES (1, '添加1', TO_DATE('2020-11-26 20:00:00','yyyy-mm-dd hh24:mi:ss'));

可以看到已经添加成功,我们查询一下。

批量添加数据
@Insert(        "    )

直接运行,wow竟然又出问题。

报错:bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: ORA-00933: SQL 命令未正确结束

不明所以,直接把sql放在工具里执行。

insert into "ROOT"."test"("id","name","create_time")values(  2,'添加2',TO_DATE('2020-11-26 20:10:00', 'yyyy-mm-dd hh24:mi:ss')),(  3,'添加3',TO_DATE('2020-11-26 20:20:00', 'yyyy-mm-dd hh24:mi:ss')),(  4,'添加4',TO_DATE('2020-11-26 20:30:00', 'yyyy-mm-dd hh24:mi:ss'))

百度搜索:

提示我的语句未正常结束,不可能啊,检查了几遍也完整了啊。

开始怀疑:难道不支持这个语句?先执行一条:

冷笑,一条竟然可以成功,那就是oracle批量添加的语法有问题了。

批量添加数据正确语法
insert allinto "ROOT"."test"("id","name","create_time") values (3,'添加3',TO_DATE('2020-11-26 20:20:00', 'yyyy-mm-dd hh24:mi:ss'))into "ROOT"."test"("id","name","create_time") values (4,'添加4',TO_DATE('2020-11-26 20:30:00', 'yyyy-mm-dd hh24:mi:ss'))select 1 from dual;

注意:最后的select是固定语法。

上面,讲了Oracle的添加和批量添加的语法。后面会继续讲博主遇到的其他问题哦!

TNS-12541: TNS: 无监听程序 TNS-12560: TNS: 协议适配器错误 TNS-00511: 无监听程序 文章转自:http://www.luocs.com/archives/464.html 此文版权归作者 – yaogang所有,转载请注明yaogang©www.luocs.com。 Luocs说:这是我一个朋友的一个监听器问题解决案例,这是昨天发生的事情,我一直跟朋友一起Troubleshooting,折腾了半天最后是BUG所致。再次汗颜,Windows平台惹不起啊!好,那么下面开始分享我朋友的案例! 环境描述: OS : Windows Server 2008 64Bit (做了HA) DB : 11.1.0.7.0 排错过程: 前天应用不能访问 数据库 了 (后台应用能访问 数据库 ),故障发生。 马上登录到服务器里查看监听状态,发现有TNS-12541 ,TNS-12560等错误 Luocs补充:我跟朋友要了错误代码,但他没有保存,就直接贴图。 从计算器的管理 –> 服务选项 –> 检查 oracle 监听服务程序,发现该服务已经停止。 手动把监听服务启动,这时候服务状态上显示为已启动,但在CMD窗口执行lsnrctl status的时候依然返回错误信息: C:\>lsnrctl status LSNRCTL for 64-bit Windows: Version 11.1.0.7.0 - Production on 12-11月-2012 18:1 正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.10.203.218)(PORT=1521))) TNS-12541: TNS: 无监听程序 TNS-12560: TNS: 协议适配器错误 TNS-00511: 无监听程序 64-bit Windows Err or: 61: Unknown err or 正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521))) 过段时间回显非常慢。 然后我检查了下告警日志,大量的 ora 错误 Fatal NI connect err or 12170. VERSION INFORMATION: TNS for 64-bit Windows: Version 11.1.0.7.0 - Production Oracle Bequeath NT Protocol Adapter for 64-bit Windows: Version 11.1.0.7.0 - Production Windows NT TCP/IP NT Protocol Adapter for 64-bit Windows: Version 11.1.0.7.0 - Production Time: 12-11月-2012 15:23:33 Tracing not turned on. Tns err or struct: ns main err code: 12535 TNS-12535: TNS: 操作 超时 ns secondary err code: 12560 nt main err code: 0 nt secondary err code: 0 nt OS err code: 0 Client address: ORA -609 : opiodr aborting process unknown ospid (4116_6104) 这时候朋友怀疑是不是监听器配置问题,就把原先的监听器删除重建了下,问题依然。 网上有个解决TNS-12535错误的案例,平台和版本都很类似,如下: 1、在 sql net. ora 文件中 增加如下行: DIAG_ADR_ENABLED = OFF 2、在listener. ora 文件中增加如下行: DIAG_ADR_ENABLED_ = OFF 如何监听是listener时,则前面的名称为:DIAG_ADR_ENABLED_LISTENER = OFF 3、重新启动windows服务管理中的监听程序.先停止,然后再重新启动. 4、检查结果.发现可以了,返回的值在10毫秒.有时为0毫秒.成功!! 但这并不是问题发生原因,在继续排查过程中偶然发现监听日志大小居然为4G。然后把这现象告诉了Luocs。 过了一会儿,Luocs回应是 ora -导入“ gopkg.in/rana/ ora .v4”包 ora 实现了 Oracle 数据库 驱动程序。 Golang Oracle 数据库 驱动程序TL; DR; 只需使用它import(“ database / sql ” _“ gopkg.in/rana/ ora .v4”)func main(){ ora -import“ gopkg.in/rana/ ora .v4”包 ora 实现了 Oracle 数据库 驱动程序。 Golang Oracle 数据库 驱动程序TL; DR; 只需使用它import(“ database / sql ” _“ gopkg.in/rana/ ora .v4”)func main(){db, err := sql .Open(“ ora ”,“用户/ [受电子邮件保护]:port / sid“)defer db.Close()//设置超时(Go 1.8)ctx,取消:= context.WithTimeout(context.Background(),5 * time.Second)//设置预取计数(Go 1.8)ctx = ora .WithStmtCfg(ctx, ora .Cfg()。Stmt oracle 11g 基本 客户端,主要是 sql plus, sql ldr,exp,imp这几个 命令 。最最主要的还是 sql ldr,想找个单独可用的 sql ldr,在 Oracle 10g Client 精简优化安装包不到12M http://download.csdn.net/download/mysky2008/4382509 下载了10g的,但本地测试出现 sql *loader 704错误,不知道怎么解决,也找不到其他资源,最后去找安装了完整版的同事,借鉴这个下载链接里面的文件,删除了其他没用到的东西(经历了好几个小时,一个一个dll测试过去),最后 sql plus, sql ldr可用。 如果是遇到 sql *loader 284错误的,是因为缺少nls语言支持,可以到这里https://pan.baidu.com/s/1 eRR 0N0u 下载完整版的语言支持,之后覆盖nls这个目录就好。 解压后设置环境变量 ORACLE _HOME 到client_1目录,TNS_ADMIN还是指向原来tnsnames. ora 所在的目录,在Path加上BIN目录就可以了 如果使用 sql ldr 报以下错误 可能环境变量少配置 Message 2100 not found; No message file for product=RDBMS, facility=UL 自己写的 数据库 装载工具,平时工作中用于装载大文本文件到 数据库 表,也能直接装载excel,不过excel只能使用第一个sheet,且不支持合并的单元格。 jdk要求版本1.6及以上。 使用方法: java -jar lynload.jar,即可看到中文 命令 行参数(unix下需设置gbk字符集环境才能看中文,没gbk环境不能看中文,但不影响导入数据)。 1.同时支持多个 数据库 . 2.支持任意字符串作为列分隔符,什么竖线逗号或者十六进制字符及任意组合字符串都行 3.支持任意字符串作为每行分隔符,例如\r,\r\n,或者十六进制字符或任意指定的字符串(例如可实现把整个日志文件装入 数据库 的单个clob字段). 4.支持任意大小的文本,装入几十GB都试过没问题。 5.明确到每一行的错误信息.(装载时会生成一个. err 文件,里面有装载出错的每一行错误原因(少字段还是格式不符合要求等等)。 6.可以作为库使用在jsp等后台直接调用,将整个jar作为库,使用 Ora Load类的int ProcLoad(Connection in_conn, String args[])函数就可以实现类似功能了。例如 new Ora Load.ProcLoad( null, "-u test -p testpwd -i 127.0.0.1 -s ora 10 -f test.txt -t tmp_test -c , -e gbk"); 具体参数如下: Usage: -db database type 1或者 oracle , oracle 数据库 ,不区分大小写,默认1,需java1.5及以上版本 2或者 sql server, ms sql server 数据库 ,不区分大小写,需java1.6及以上版本 3或者my sql , my sql 数据库 ,不区分大小写,需java1.5及以上版本 4或者sybase, sybase 数据库 ,不区分大小写(暂 测试) 数据库 连接的url.默认空字符串 如果有url参数,则-i-p-s-dn参数全无效。 如果没有url参数,则必须提供-i-p-s参数,程序里面好拼凑url 例如: jdbc: sql server://localhost:1433; DatabaseName=sample -i ip address:port ip地址和端口,中间用冒号隔开 url不为空则此参数无效 如果不带端口,系统根据 数据库 类型采用默认端口 oracle 数据库 : 默认为1521端口 sql server 数据库 : 默认为1433端口 my sql 数据库 : 默认为3306端口 sybase 数据库 : 默认为5000端口 例如: 127.0.0.1:1521 例如: 192.168.0.1 -s serviceid or database name oracle 服务名或者其他 数据库 数据库 名 url不为空则此参数无效 -u username 用户名,必输 -p Password 登录密码,必输 -t TableName 要插入的表名,可以带用户,必输 例如: scott.emp 或者 emp都行 -f FileName 来源的文件名,必输 -ff FileName format 来源的文件名类型:txt,文本文件;xls:Excel2003或2007文件),默认是txt 对于Excel文件的导入,仅导入第一个sheet的内容,其他sheet的内容忽略 -e Encoding 文件的编码,默认gbk -c Cut split string 分隔字符串,可以是多个字符组合,默认竖线 -r commit rows 每插入多少行提交一次,-1表示不提交,默认-1,如果设置了ac参数为1,则此参数无效。 注意:如果设置了此参数,每到此行数会执行一次commit,如果是外部调用此过程要注意所有数据会被提交 -ac all commit 0.插入成功的都提交,失败的登记文本,默认0; 1.全部插入成功后才提交(有失败则回滚并 结束 ) -a column flag 第一行的类型 0.没有列名行,默认0。此值为0则it参数不生效。 1.第一行是逗号分隔的包括列类型的列信息,例如NAME VARCHAR2(30),注意,区分大小写 2.第一行是列分隔符分隔的列名(不包括列字段信息),注意,列名区分大小写 -it insert type 1.导入的列需要跟 数据库 列名个数及名称完全相同,顺序无所谓,默认1 2.仅导入文件字段名与 数据库 字段名完全相同的数据,顺序无所谓 3.第一行是列信息,按此列信息创建新表导入数据(暂不用) 4.忽略第一行,无论第一行是什么数据全部忽略,从第二行按列字段顺序匹配装载 必须在-a 参数 > 0时才生效,否则无意义 -d date formate 日期格式,参考java的SimpleDateFormate类参数,默认自动识别 可识别格式:yyyyMMdd, yyyy-MM-dd, yyyy/MM/dd, yyyyMMdd:HHmmss(等于 oracle 的yyyymmdd:hh24miss) yyyy年,MM月,dd日,HH 24小时制时,hh 12小时制时,mm 分, ss秒 -l line end string 每条记录结尾的分隔符,默认是 \r\n回车换行符,支持前面-c参数说的转义符 oracle 例子: 登陆scott用户,裝载a.txt的逗号分隔的gbk编码文本内容到scott.emp java -jar xxx.jar -i 127.0.0.1 -p 1521 -s ora 10 -u system -p manager -t scott.emp -f a.txt -c , sql server例子: 登陆11.8.126.181 数据库 的test用户,裝载f: est.xlsx的excel数据到tmp_i表 java -jar -db sql server -i 11.8.126.181 -s abcd -u test -w test -f f: est.xlsx -t tmp_i -ff xls my sql 例子: 登陆本机 数据库 的root用户,裝载a.txt的文本数据到tmp_i表,不提交 java -jar xxx.jar -db my sql -i 127.0.0.1 -s gjjgj -u root -w root -f a.txt -t tmp_i 最近因工作需要,需要将一些数据同步到 oracle 数据库 ,我以为语法应该差不多,没想到真的踩了几个坑,今天分享出来,供大家借鉴。 准备一张测试表test,字段有id、name和创建时间。添加数据INSERT INTO "ROOT"."test"("id", "name", "create_time") VALUES (1, '添加1', '2020-11-26... 先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。出现这个错误的情况还是挺多的,当抛出此错误提示信息,代表着 SQL 语句本身就是有问题的!5 数据库 不同的版本或不同的 数据库 支持的 SQL 的语法规则是不一样的,一句 SQL 语句在一个数据中是 正确 的在另一个 数据库 必也 正确 。我的语句中正好存在表别名,且加了。... 在 Oracle 数据库 中,如果将一张表里面的数据复制到另外一个对象中。通常会有这两种方法:insert into select 和 select into from    insert into select:是PL/ SQL language 的赋值语句,可以将select 出来的N行(0到任意数)结果集复制一个新表中   select into from:是标准的 SQL 语句,可以... 如果你在使用 Oracle .EntityFrameworkCore 在执行一些分页查询或者其他数据 操作 时,遇到“ ORA - 00933 : SQL 命令 正确 结束 ”, 请先检查你的DbContext中Use Oracle (...)的写法: services.AddDbContextPool<PartnerDbContext>(options => op... INSERT INTO Student(name,sex,age,address,birthday) VALUES('Nike','男','18','北京','2000-01-01') ,('Nike','男','18','北京','2000-01-01') ,('Nike','女','18','北京','2000-01-01') ,('Nike','女','18','北京','2000-01-01') ,('Nike','男', Oracle 查询提示 ORA - 00933 : SQL command not properly ended 原因排查问题描述问题排查与解决 一段 sql 语句,在postgre 数据库 中运行 出现问题,切换到 oracle 数据库 后报错。 SQL 语句如下 select T.code as CODE from info_table as T 在 ora lcle执行后报如下错误 > ORA - 00933 : SQL command not properly ended 问题排查与解决 在网上查询了该报错之后看到