[目录]
参考
故事起源
我本地是使用 PLSQL Developer 进行数据库操作,包括表创建/修改,视图创建/修改,存储过程修改,序列创建等。
但是发布的时候,DBA 是使用命令行发布的。
这导致我本地创建的有些脚本在本地使用 PLSQL Developer 执行没有问题,发布的时候使用命令行执行,就会出很多问题
比如说下面的 sql
--创建表
create table ITEMVALUE_CONFIG
(
ID number, --ID
KEY varchar2(255),--配置项
VALUE varchar2(255) --配置值
);
--表注释
comment on table ITEMVALUE_CONFIG is '调整类型配置表';
--字段注释
comment on column ITEMVALUE_CONFIG.ID is '自增列';
comment on column ITEMVALUE_CONFIG.KEY is '配置项';
comment on column ITEMVALUE_CONFIG.VALUE is '配置值';
在本地执行没有任何问题,可以使用命令行一执行,报下面的错误
于是我想在我本地使用 sqlplus 来执行我的 sql,没问题之后再发给 DBA,这样我的脚本就不会老报错了。
但是在我本地使用 sqlplus 的过程中,遇到很多问题,至今都没有解决,这里做个记录。
使用 sqlplus 输入密码问题
使用管理员权限打开命令提示符,输入 sqlplus
注意的是输入口令的时候,界面是没有反应的,你输入之后按回车就可以了
Microsoft Windows [版本 10.0.17134.885]
(c) 2018 Microsoft Corporation。保留所有权利。
C:\WINDOWS\system32>sqlplus
SQL*Plus: Release 11.2.0.1.0 Production on 星期二 7月 23 09:33:40 2019
Copyright (c) 1982, 2010, Oracle. All rights reserved.
请输入用户名: sys
输入口令:
ERROR:
ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist
进程 ID: 0
会话 ID: 0 序列号: 0
sqlplus 用户名问题
从上面的问题中我们看到,输入 sys
这个用户不行!我又尝试了 sysdba
这个用户,还是不行
请输入用户名: sys
输入口令:
ERROR:
ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist
进程 ID: 0
会话 ID: 0 序列号: 0
请输入用户名: sysdba
输入口令:
ERROR:
ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist
进程 ID: 0
会话 ID: 0 序列号: 0
于是我看到了一篇文章 ORA-01034: ORACLE not available如何解决,里面使用了 sys as sysdba
这个用户,我尝试了下,竟然可以
请输入用户名: sys as sysdba
输入口令:
已连接到空闲例程。
连接到指定数据库
参考了这篇文章 sqlplus连接的三种方式
一开始我是这样连接的,注意下面的语句中 luoma
是用户名,testdb
是数据库名称(在 tnsnames.ora 中配置的数据库名称)
SQL> connect luoma@testdb as sysdba
输入口令:
ERROR:
ORA-01017: invalid username/password; logon denied
SQL> connect luoma@testdb normal
SP2-0306: 选项无效。
用法: CONN[ECT] [{logon|/|proxy} [AS {SYSDBA|SYSOPER|SYSASM}] [edition=value]]
其中 <logon> ::= <username>[/<password>][@<connect_identifier>]
<proxy> ::= <proxyuser>[<username>][/<password>][@<connect_identifier>]
接着我根据提示修改
SQL> connect luoma@testdb
输入口令:
已连接。
SQL>
在 sqlplus 中执行脚本文件
@
命令说明
@
等于 start
命令,用来运行一个 sql 脚本文件@
命令调用当前目录下的,或指定全路径,或可以通过 SQLPATH
环境变量搜寻到的脚本文件。该命令使用是一般要指定要执行的文件的全路径,否则从缺省路径(可用 SQLPATH
变量指定)下读取指定的文件。
在 D:\Temp\DBScript
目录下创建 sql 文件 01_crt_table_item_config.sql
,内容如下
--创建表
create table ITEMVALUE_CONFIG
(
ID number, --ID
KEY varchar2(255),--配置项
VALUE varchar2(255) --配置值
);
--表注释
comment on table ITEMVALUE_CONFIG is '调整类型配置表';
--字段注释
comment on column ITEMVALUE_CONFIG.ID is '自增列';
comment on column ITEMVALUE_CONFIG.KEY is '配置项';
comment on column ITEMVALUE_CONFIG.VALUE is '配置值';
连接到指定数据库
SQL> connect luoma@testdb
输入口令:
已连接。
SQL>
接着执行这个 sql 脚本
SQL> connect luoma@testdb
输入口令:
已连接。
SQL> @D:\Temp\DBScript\01_crt_table_item_config.sql
表已创建。
注释已创建。
注释已创建。
注释已创建。
一开始提出的那个问题,可以通过这种方式来验证了。
在 sqlplus 中执行 sql
SQL> select sysdate from dual;
SYSDATE
--------------
23-7月 -19
SQL> select * from itemvalue_config;
未选定行
SQL> drop table itemvalue_config;
表已删除。
sqlplus 执行创建视图出现奇怪提示
我创建了一个视图,名称为 06_tpsdata_crt_view_tax_bureau_corporate_tax.sql
在 sqlplus 中执行,也没有报错,但是输出了一堆东西,貌似是执行的结果,也执行成功了。
原因:视图中 union all 前后出现了空行
去掉空行之后,执行成功。
sqlplus 执行创建视图出现异常提示-ORA-00900: 无效 SQL 语句
我创建了一个视图,名称为 06_tpsdata_crt_view_tax_bureau_corporate_tax.sql
这个问题更奇怪,在 PLSQL 里面用 command window 执行 sql 语句正常,但是用 sqlplus 执行,报错
ORA-00900: 无效 SQL 语句
原因:视图中 where 条件中出现了空行
去掉这个空行之后,执行成功