触发器
先建立一个表: create table emp2_log values(uname varchar2(20),action varchar2(10),atime date); 如果往这个表中插入,删除,更改就会触发 create or replace trigger tri after insert or delete or update on emp2 for each row begin if inserting then insert into emp2_log values(user,'insert',sysdate); elsif updating then insert into emp2_log values(user,'update',sysdate); elsif deleting then insert int
游标的部分说明
使用游标将emp表中的ename全取出来: declare cursor c is select * from emp; v_emp c%rowtype; begin open c; loop --由于是一条一条fetch,所以使用do-while循环 fetch c into v_emp; exit when(c%notfound);--这里是结束循环的条件 dbms_output.put_line(v_emp.ename); end loop; close c; end; / declare cursor c is select * from emp; v_emp c%rowtype; begin open
PL/SQL中的几点注意
PL/SQL中的几点注意: 如果在PL/SQL中有select语句必须返回一条且仅有一条记录。 Select 语句里必须有一个Into: declare v_ename emp.ename%type; v_sal emp.sal%type; begin select ename,sal into v_ename,v_sal from emp where empno = 7369; … … declare v_emp emp%rowtype; begin select * into v_emp from emp where empno = 7369; dbms_output.put_line(v_emp.ename); end; 显示sql语句影响多少行记录
PL/SQL中的复合变量
PL/SQL中的数组就是TABLE变量类型: 声明方法: declare type type_table_emp_empno is table of emp.empno%type index by binary_integer; v_empnos type_table_emp_empno; begin v_empnos(0) := 1234; v_empnos(1) := 2345; v_empnos(-1) := 4321; dbms_output.pub_line(v_empnos(-1)); end ; PL/SQL中的Record变量相当于JAVA中的类 declare type type_record_dept is record ( Deptno
truncate,delete,drop的异同点(转)
注意:这里说的delete是指不带where子句的delete语句 相同点 truncate和不带where子句的delete, 以及drop都会删除表内的数据 不同点: 1. truncate和 delete只删除数据不删除表的结构(定义) drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger),索引(index); 依赖于该表的存储过程/函数将保留,但是变为invalid状态. 2.delete语句是dml,这个操作会放到rollback segement中,事务提交之后才生效;如果有相应的trigger,执行的时候将被触发. truncate,drop是ddl, 操作立即生效,原数据不放到rollback segment中
表级约束
表级约束两个字段组合必须唯一 Create table test (name varchar2(10),age number(2),constraint abc_name_age_un1 unique(name,age)); 建好后连续插入两次: Insert into test values(‘a’,1); 就会出现ORA-00001: unique constraint (XLQ.ABC_NAME_AGE_UN1) violated这样的警告。 如果再这样插入: Insert into test values(‘a’,2); 就是可以的,因为只有插入时两个字段组合相同的时候才会报错。[@more@]
求薪水最高的第6到第10个人
求薪水最高的第6到第10个人 Select ename,sal,r from (select ename,sal,rownum r from (select ename,sal from emp order by sal desc)) where r >= 6 and r <= 10;(或者 between and)[@more@]
rownum的一些说明
rownum是结果出来再添加上去的。只能使用 < 号或 <= 号,不能用别的不等符号,都会返回 no rows selected[@more@]
using子句用法
join .... using...代替了 join ... on....例子:select ename,dname from emp join dept on (emp.deptno = dept.deptno);就相当于:select ename,dname from emp join dept using (deptno);
关于group by 的一些说明
select ename,max(sal) from emp group by deptno;会报ORA-00979: not a GROUP BY expression 错误原因在于没有遵守group by 的规则:如果在select 当中没有包含在组函数里的字段必须在group by中包含...
新建一个用户后表空间无法使用ORA-01950: no privileges on tablespace 'TEST_TAB1'
创建用户myuserSQL>create user myuser identitied by password;SQL>grant create session,resource,connect to myuser;SQL>conn myuser/password;SQL>create table TT(id number,name nvarchar2(20));出错:ORA-0195...
oracle grant connect,resource to user包括的权限
CONNECT角色: --是授予最终用户的典型权利,最基本的 ALTER SESSION --修改会话 CREATE CLUSTER --建立聚簇 CREATE DATABASE LINK --建立数据库链接 CREATE SEQUENCE --建立序列 CRE...
oracle中查看用户权限
1.查看所有用户:select * from dba_users;select * from all_users;select * from user_users;2.查看用户或角色系统权限(直接赋值给用户或角色的系统权限):select * from dba_sys_privs;select * from user_sys_pr...
关于oracle10g回收站
显示回收站内容:1. show recyclebin;2. select user_recyclebin里的东西想要清空回收站:purge table “BIN$.....”清除回收站所有东西:Purge recyclebin恢复表:Flashback table xxx to before drop;(x...
两个有关ASCII码的函数:
两个有关ASCII码的函数:1. selec ascii(‘a’) from dual;(显示出小写a对应的ASCII码)2. select chr(‘97’) from dual; (显示出ASCII码为97对应的字母)...
关于ORA-00937: not a single-group group function:
一个简单的SQL语句Select ename,max(sal) from emp;会出现上面的ORA-00937问题分析后得出结论:由于max是组函数,就是有多个输入一个输出,但上面这条SQL语句中,如果有多个人的工资都是5000(最大),那么就会有多...
关于ORA-00937: not a single-group group function
关于ORA-00937: not a single-group group function: 一个简单的SQL语句 Select ename,max(sal) from emp;会出现上面的ORA-00937问题 分析后得出结论: 由于max是组函数,就是有多个输入一个输出,但上面这条SQL语句中,如果有多个人的工资都是5000(最大),那么就会有多个输出就会产生错误。 解决办法:使用子查询: Select ename,sal from emp where sal = (select max(sal) from emp); [@more@]
两个有关ASCII码的函数
两个有关ASCII码的函数: 1. selec ascii(‘a’) from dual;(显示出小写a对应的ASCII码) 2. select chr(‘97’) from dual; (显示出ASCII码为97对应的字母)[@more@]
新建一个用户后表空间无法使用ORA-01950: no privileges on tablespace 'TEST_TAB1'
创建用户myuser SQL>create user myuser identitied by password; SQL>grant create session,resource,connect to myuser; SQL>conn myuser/password; SQL>create table TT(id number,name nvarchar2(20)); 出错:ORA-01950:no privileges on tablespace 'USERS' 问题:没有分配表空间配额:配额(quota):允许被使用的空间。用户可以在表空间上可以使用的空间。 SQL>conn sys/password as sysdba; SQL>alter user myuser quota 10M[unlimited] on users;这个问题如果在授予权限时授予reource角色就不会出现。[@m
13 个致命的 Linux 命令( 在网上找的和大家共享)
本文收集所有你不能在 Linux 下执行的命令,执行任何下列命令(之一)会让你丢失数据或造成数据损坏,冻结或挂起你运行中的 Linux 系统。千万不要在 Linux 文本界面运行下列命令! NEVER RUN THE FOLLOWING COMMANDS...