首页 > 数据库 > Oracle > Oracle学习笔记之二
20.在某个表(A)上所建立的触发器,如果这个触发器是在该表被修改时触发,那么这个触发器内不能包含对表A本身的查询。如果数据库的其它事务一样,正在对一个表进行修改的同时,不能再对这个表进行查询。
21.SQL*Plus中一些常用的命令及使用技巧
SQL> show user;显示当前用户(在SQL*Plus工具中专用的,更好的方式是使用SQL> select user from dual;语句进行查看当前用户,其中dual表是每个SQL*Plus用户都可以使用的Oracle表,这里真正重要的是要知道它只含有一行数据。);
SQL> set pagelize 20;设置每页显示行数为20;
SQL> set linesize 100;设置每行显示的字符数为100;(如果嫌每次设置麻烦,可以将这两条语句保存在C:oracleora92sqlplusadminglogin.sql中,每次启动是Oracle会自动运行glogin.sql文件,相当于初始化)
SQL> show all;查看当前的环境设置;
SQL> spool file_name;将显示的内容输出到指定文件,例如spool c:spool.txt;
SQL> spool off;关闭spool输出,只有关闭spool输出,才会在输出文件中看到输出的内容;
SQL> /;重新运行上一次命令;
SQL> set timing on/off;显示、关闭每个sql语句花费的执行时间;
SQL> select * from tab;查看当前用户下所有表;
SQL> start file_name;或SQL> @ file_name;执行一个SQL脚本文件,我们可以将多条sql语句保存在一个文本文件中,这样当要执行这个文件中的所有的sql语句时,用上面的任一命令即可,这类似于dos中的批处理;
SQL> desc table_name;显示表的结构;
22.超级用户密码忘记的处理方式
1)、在开始运行中输入sqlplusw /nolog登陆,即不启动服务登陆。
2)、利用$ net start OracleServiceCHSTONE和$ net start OracleOraHome92TNSListener启动两个服务。
3)、以超级用户身份连接数据库 SQL> connect / as sysdba;
4)、修改system的密码:SQL> alter user system identified by “password”。
23.nvl(expr1,expr2)函数:它的做作是当字段expr1的值为null时,可以转换成指定的返回值,如:select no,nvl(name,'No_Signed'),sex from UserInfo
24.nvl2(expr1,expr2,expr3):当expr1为null时,返回expr2,当expr1不为null时,返回expr3
25.以上SQL语句对表都加上了行级锁,
确认完成后, 必须加上事物处理结束的命令 COMMIT 才能正式生效,
否则改变不一定写入数据库里.
如果想撤回这些操作, 可以用命令 ROLLBACK 复原.
26.在Select中的(+)表示:有(+)号的字段位置自动补空值
27.每个表都有一个隐含的字段ROWID, 它标记着记录的唯一性
28.Oracle中的序列问题:Oracle导入导出数据时,如果是使用SQL脚本Insert进和记录,那么对应表的序列是不会自己增加的,解决办法:1.在Insert完记录后,重新创建序列并将它的初始值指向记录数的下一个值,如:序列对应的字段是ID,那么在insert完所有记录后,应将序列的初始值设置成ID值的最大值加1。2.如果不自己重建序列,那么就得在插入完记录后,将序列动态的设置成所需的值,可以这样实现:select 序列名.NextVal from dual;循环执行所需次数,每次序列的初始值加1。
29.trunc函数可以截取时期,如:Select trunc(sysdate) from dual 那么返回的只是‘年月日’格式的时间。
30.greatest(x,y,...)函数,返回参数列表中的最大值。least(x,y,......)函数,返回列表参数中的最小值。
31.NULLIF(a,b)如果A等于B返回NULL,如果不等于返回A。
32.外连接查询:SELECT T1.COL,T2.COL FROM WHERE T1.COL(+)=T2.COL;左外连接所有T2的T1信息。
SELECT T1.COL,T2.COL FROM WHERE T1.COL=T2.COL(+);右外连接所有T1的T2信息。
为了看到与连接条件不匹配的数据,就必须得用外连接。
33.自连接:通过表的别名来创建虚拟逻辑表,进行自连接查询。
select worker.last_name || 'work for' || manager.last_name
from employees worker,employees manager
where worker.manager_id=manager.employee_id;
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/7416120/viewspace-897176/ ,如需转载,请注明出处,否则将追究法律责任。