使用sqlplus导入sql脚本报错问题汇总

1.操作步骤

cmd
sqlplus输入用户名、密码
@D:\sql\aaa.sql

2.解决中文乱码

中文乱码,导致报错:ORA-01756: 引号内的字符串没有正确结束
如:
UTF-8格式下的内容:COMMENT ON TABLE “TABLE” IS ‘测试表’;
改为ANSI格式后,字符乱码,且没单引号结束符:COMMENT ON TABLE “TABLE” IS '���̱�;
解决:把文件的编码格式转换成ANSI
1、打开sql文件,单击[文件]–> [另存为]选项,将文件的编码格式选择“ANSI”格式,见下图,保存以生成ANSI编码格式文件,ok了。
在这里插入图片描述

其实ANSI并不是某一种特定的字符编码,而是在不同的系统中,ANSI表示不同的编码。windows美国系统中ANSI编码其实是ASCII编码(ASCII编码不能表示汉字,所以汉字为乱码),而中文系统(“汉字”正常显示)ANSI编码其实是GBK编码,而韩文系统中(“한국어”正常显示)ANSI编码其实是EUC-KR编码。
那么Windows系统是如何区分ANSI背后的真实编码的呢?
微软用一个叫“Windows code pages”(在命令行下执行chcp命令可以查看当前code page的值)的值来判断系统默认编码,比如:简体中文的code page值为936(它表示GBK编码,win95之前表示GB2312,详见:Microsoft Windows’ Code Page 936),繁体中文的code page值为950(表示Big-5编码)。

3.遇到的其他报错

1.报错:ORA-00955: 名称已由现有对象使用

create sequence S_UM_USER_TOKEN
  minvalue 1
  maxvalue 9999999999999999999999999999
  start with 1
  increment by 1
  cache 20;
  //

解决:去掉/,/导致上一条语句重复执行
原因:
(1)在sqlplus下执行的sql语句中带C风格的注释(//和/**/)都是不安全的,特别是在执行一些删除和插入操作的时候,并且由此引起的问题往往比较隐蔽,很难考虑到居然会是注释引起的问题。所以,建议对单条语句的注释使用两个英文减号–进行注释,针对整段的注释建议使用多个英文减号进行注释。
(2)sql文件中编写的TRIGGER、PROCEDURE,需要在最后一行加上反斜杠【/】,使存储过程自动编译。
TABLE、SEQUENCE不能加【/】,否则会导致语句重复执行。

2.报错:ORA-02270: 此列列表的唯一关键字或主键不匹配

ALTER TABLE "TB_POLICY" ADD FOREIGN KEY ("CREATE_PID") REFERENCES "TB_BRANCH" ("PID")

原因有两种:
(1)TB_BRANCH里的PID不是主键。先执行的上边的添加外键的脚本,后执行的TB_BRANCH加PID主键,导致的报错。
(2)TB_BRANCH里的PID不是唯一主键,如果是联合主键,则需要设为联合外键。

3.报错:ORA-04089: 无法对 SYS 拥有的对象创建触发器

创建触发器时报错
原因是所有的以sysdba登录的账户都不能创建触发器。

解决方法,以normal方式登录建立表、自增长、触发器等,如果之前已经建立了,就删除了重新以Normal登录建立吧。

sqlplus username/password@orcl as sysdba @”文件”;
去掉as sysdba

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值