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