51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 1918|回复: 1
打印 上一主题 下一主题

[原创] oracle 常用操作

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2013-1-21 14:17:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
oracle 常用操作
1.恢复 sys system等内置帐户的密码
开始->运行->sqlplus "/as sysdba"
alter user sys identified by new_password;

2. drop table if exists xxxx
oracle 没有像 if exists 这样的支持,internet给的解决办法如下:
2.1 方法一 捕获异常
BEGIN
   EXECUTE IMMEDIATE 'DROP TABLE mytable';
EXCEPTION
   WHEN OTHERS THEN
      IF SQLCODE != -942 THEN
         RAISE;
      END IF;
END;
2.2 方法二  使用 select 进行提前判断
declare
   c int;
begin
   select count(*) into c from user_tables where table_name = upper('table_name');
   if c = 1 then
      execute immediate 'drop table table_name';
   end if;
end;

3.转义字符
以下的文章主要介绍的是Oracle insert插入转义字符 ,单引号'与&符的相关问题,如果你觉得它们的名字很怪异,而且在实际的应用中也很少的涉及到它们的具体应用的话,以下的文章就是相关问题的解答。
今天在导入一批数据到Oracle时,碰到了一个问题:Toad提示要给一个自定义变量AMP赋值,一开始我很纳闷,数据是一系列的Insert语句,怎么会有自定义变量呢?后来搜索了一下关键字AMP发现,
Oracle把这里的URL的参数连接符&当成是一个自定义变量了,所以要求我给变量AMP赋值。怎么办呢?方法有三:
方法一:在要插入的SQL语句前加上Set define off;与原SQL语句一起批量执行
我们在SQL*PLUS下执行 SQL> show all命令时,可以发现一个参数:define "&" (hex 26),如下图所示
......  
concat "." (hex 2e)  
copycommit 0  
copytypecheck ON  
define "&" (hex 26)  
describe DEPTH 1 LINENUM OFF INDENT OFF  
echo OFF  
......


这个是Oracle insert插入转义字符里面用来识别自定义变量的设置,现在我们在SQL*PLUS下将其关闭:
SQL> Set define OFF;


然后再次执行导入脚本,OK!问题搞定。
注意:如果是在TOAD中执行,建议在每一个要导入的脚本第一行加上前面那句关闭define的话,否则当你导入第二个含有特殊字符的脚本的时候,又会出错。
如果是在SQL*PLUS中执行,则只需要设置一次define OFF,后面就可以连续导入了。直到你重新设置define ON为止。
方法二:在SQL语句中将'&'替换成chr(38),因为chr(38)是‘&’的ASCII码
SQL> Select 'Tom' || chr(38) || 'Jerry' from dual;


方法三:分拆原来的字符串
SQL> Select 'Tom' || '&' || 'Jerry' from dual;


我们可以看到,方法一最为简便,而且效率也最高。方法二因为有一个调用函数的过程,所以性能稍差。方法三需要两次连接字符串,效率最差!
那么如果字段的内容中包含了单引号要怎么插入呢?例如:It's fine。方法同样有三
方法一:使用转义字符
SQL > Select 'test' || '''' from dual;


注意:这里的''''四个单引号是什么意思呢?首先第一个和最后一个都是Oracle insert插入转义字符中的字符串连接符,这个没有异议。那么第二个'和第三'又表示什么意思呢?第二个'是一个转义字符
第三个'才是我们真正的内容
方法二:同样是使用转义字符,只不过方式不同而已
SQL > Select 'test ''' from dual;


注意:这里的第二个,第三个'就是我们上面方法一中提到的转义符和真正的内容
方法三:在SQL中将'替换成chr(39),因为chr(39)是'的ASCII码
SQL > Select 'It' || chr(39) || 'fine' from dual;


以上的相关内容就是对Oracle insert插入转义字符的介绍,望你能有所收获。

1.查看所有用户:
  select * from dba_users;
  select * from all_users;
  select * from user_users;

2.查看用户或角色系统权限(直接赋值给用户或角色的系统权限):
  select * from dba_sys_privs;
  select * from user_sys_privs;

3.查看角色(只能查看登陆用户拥有的角色)所包含的权限
sql>select * from role_sys_privs;

4.查看用户对象权限:
  select * from dba_tab_privs;
  select * from all_tab_privs;
  select * from user_tab_privs;

5.查看所有角色:
  select * from dba_roles;

6.查看用户或角色所拥有的角色:
  select * from dba_role_privs;
  select * from user_role_privs;

7.查看哪些用户有sysdba或sysoper系统权限(查询时需要相应权限)
select * from V$PWFILE_USERS

================================================
ORA-01219 错误的解决办法
错误信息:
ORA-01219:database not open:queries allowed on fixed tables/views only “ORA-01219:数据库未打开:仅允许在固定表/视图中查询”的警告窗口!  
解决办法如下:  
1. 运行输入:sqlplus /nolog  
2. 以sysdba的角色登录:connect sys/口令 as sysdba  
3. 先执行”alter database open”,会出现如下的错误   第 1 行出现错误: ORA-01157: 无法标识/锁定数据文件 6 - 请参阅 DBWR 跟踪文件 ORA-01110: 数据文件 6: D:\DATA\PROD\PRODDATA\CUX_INDEX_X_1.DBF  
4. 执行“alter database create datafile 6;”     根据具体的数据文件号进行对应修改
5. 执行“alter database datafile 6 offline drop  
6. 执行“alter database open”  
================================================
ORA-01940: 无法删除当前已连接的用户的错误
select username,sid,serial# from v$session;
alter system kill session'9,4';
drop user a cascade;//删除用户以及用户表空间下所有对象
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2013-1-25 17:23:01 | 只看该作者
Thank you very much for sharing!The good man!The good life of peace!
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-27 08:46 , Processed in 0.073121 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表