好文档 - 专业文书写作范文服务资料分享网站

(O管理)O自学自学笔记

天下 分享 时间: 加入收藏 我要投稿 点赞

黄刚创意工作室·IT技术部

return 0.2; end if; end;

调用方法如:select lower(ename), sal_tax(sal) from emp; 触发器是一个比较重要的概念,具体的写法忘记了回头要写的时候很简单,回来查就可以了。比如谁对银行账户进行了转账等操作,一定得记录下来。先创建一张表: create table emp2_log (uname varchar2(20), action varchar2(10), udate date );

然后创建触发器:

create or replace trigger trig

after/before 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 into emp2_log values(USER,’delete’,sysdate); end if; end;

加了for each row表示每更新一行都触发一次。如果直接执行update dept set deptno=99 where deptno=10;这是会产生错误的,违反了完整性约束,因为有的记录参考了deptno=10字段。但可以编写一个触发器,将参考了的其他字段也进行同步更新: create or replace trigger trig after update on dept for each row begin

update emp set deptno=:NEW.deptno where deptno=:OLD.deptno; end;

:NEW表示记录新状态,:OLD表示记录的旧状态。这是个副作用,一般我们很少用。 树状结构的存储与展示,主要用在记录BBS帖子。方式如下: create table article (

id number primary key, cont varchar2(4000),

pid number, --父节点的id

isleaf number(1),--0代表非叶子节点,1代表叶子节点 alevel number(2) );

然后编写递归调用过程:

16

黄刚创意工作室·IT技术部

create or replace procedure p (v_pid article.pid%type, v_level binary_integer) is cursor c is select * from article where pid=v_pid; v_preStr varchar2(1024) :=''; begin

for i in 1..v_level loop

v_preStr := v_preStr||'****'; end loop;

for v_article in c loop

dbms_output.put_line(v_article.cont); if (v_article.isleaf=0) then p(v_article.id,); end if; end loop; end;

17

黄刚创意工作室·IT技术部

Sql常见面试题(总结)

1.用一条SQL语句 查询出每门课都大于80分的学生姓名

name kecheng fenshu 张三 语文 81 张三 数学 75 李四 语文 76 李四 数学 90 王五 语文 81 王五 数学 100 王五 英语 90

A: select distinct name from table where name not in (select distinct name from table where fenshu<=80)

2.学生表 如下:

自动编号 学号 姓名 课程编号 课程名称 分数

1 2005001 张三 0001 数学 69 2 2005002 李四 0001 数学 89 3 2005001 张三 0001 数学 69 删除除了自动编号不同,其他都相同的学生冗余信息

A: delete tablename where 自动编号 not in(select min(自动编号) from tablename group by 学号,姓名,课程编号,课程名称,分数)

一个叫department的表,里面只有一个字段name,一共有4条纪录,分别是a,b,c,d,对应四个球对,现在四个球对进行比赛,用一条sql语句显示所有可能的比赛组合. 你先按你自己的想法做一下,看结果有我的这个简单吗? 答:select a.name, b.name from team a, team b where a.name < b.name

18

黄刚创意工作室·IT技术部

请用SQL语句实现:从TestDB数据表中查询出所有月份的发生额都比101科目相应月份的发生额高的科目。请注意:TestDB中有很多科目,都有1-12月份的发生额。 AccID:科目代码,Occmonth:发生额月份,DebitOccur:发生额。 数据库名:JcyAudit,数据集:Select * from TestDB 答:select a.* from TestDB a ,(select Occmonth,max(DebitOccur) Debit101ccur from TestDB where AccID='101' group by Occmonth) b

where a.Occmonth=b.Occmonth and a.DebitOccur>b.Debit101ccur

************************************************************************************

面试题:怎么把这样一个表儿 year month amount 1991 1 1.1 1991 2 1.2 1991 3 1.3 1991 4 1.4 1992 1 2.1 1992 2 2.2 1992 3 2.3 1992 4 2.4 查成这样一个结果

year m1 m2 m3 m4 1991 1.1 1.2 1.3 1.4 1992 2.1 2.2 2.3 2.4

答案一、

select year,

(select amount from aaa m where month=1 and m.year=aaa.year) as m1, (select amount from aaa m where month=2 and m.year=aaa.year) as m2, (select amount from aaa m where month=3 and m.year=aaa.year) as m3, (select amount from aaa m where month=4 and m.year=aaa.year) as m4 from aaa group by year

这个是ORACLE 中做的:

select * from (select name, year b1, lead(year) over (partition by name order by year) b2, lead(m,2) over(partition by name order by year) b3,rank()over(

partition by name order by year) rk from t) where rk=1;

************************************************************************************

精妙的SQL语句! 精妙SQL语句

作者:不详 发文时间:2003.05.29 10:55:05

19

黄刚创意工作室·IT技术部

说明:复制表(只复制结构,源表名:a 新表名:b)

SQL: select * into b from a where 1<>1

说明:拷贝表(拷贝数据,源表名:a 目标表名:b)

SQL: insert into b(a, b, c) select d,e,f from b;

说明:显示文章、提交人和最后回复时间

SQL: select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b

说明:外连接查询(表名1:a 表名2:b)

SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c

说明:日程安排提前五分钟提醒

SQL: select * from 日程安排 where datediff('minute',f开始时间,getdate())>5

说明:两张关联表,删除主表中已经在副表中没有的信息

SQL:

delete from info where not exists ( select * from infobz where info.infid=infobz.infid )

说明:--

SQL:

SELECT A.NUM, A.NAME, B.UPD_DATE, B.PREV_UPD_DATE

FROM TABLE1,

(SELECT X.NUM, X.UPD_DATE, Y.UPD_DATE PREV_UPD_DATE

FROM (SELECT NUM, UPD_DATE, INBOUND_QTY, STOCK_ONHAND

FROM TABLE2

WHERE TO_CHAR(UPD_DATE,'YYYY/MM') = TO_CHAR(SYSDATE, 'YYYY/MM')) X,

20

(O管理)O自学自学笔记

黄刚创意工作室·IT技术部return0.2;endif;end;调用方法如:selectlower(ename),sal_tax(sal)fromemp;触发器是一个比较重要的概念,具体的写法忘记了回头要写的时候很简单,回来查就可以了。比如谁对银行账户进行了转账等操作,一定得记录下来。先创建一张表:cr
推荐度:
点击下载文档文档为doc格式
5dw5o1qhp89sc9l3ppnv1xep036fc3019f1
领取福利

微信扫码领取福利

微信扫码分享