魔鬼式oracle训练第一周总结.docx_第1页
魔鬼式oracle训练第一周总结.docx_第2页
魔鬼式oracle训练第一周总结.docx_第3页
魔鬼式oracle训练第一周总结.docx_第4页
魔鬼式oracle训练第一周总结.docx_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

sELECT * FROM qj_test;恢复数据create table qj_test2asselect * from qj_test as of TIMESTAMP to_timestamp(20120711 16,yyyymmdd hh24);CREATE TABLE qj_test3(autoid NUMBER(30) NOT NULL PRIMARY KEY,NAME CHAR(30) NOT NULL,ID NUMBER(10) NOT NULL,address CHAR(50) NOT NULL)CREATE SEQUENCE temsequenceMINVALUE 1MAXVALUE 99999999START WITH 1INCREMENT BY 3NOCACHE;DROP SEQUENCE temsequenceINSERT INTO qj_test3 VALUES(123,qijin,temseq.nextval,123);INSERT INTO qj_test3 VALUES(temseq.nextval,qijin,123,123);/values这六个字母一定要打正确 否则会有不必要的麻烦SELECT SYSDATE FROM dualINT类型是NUMBER类型的子类型commit 的使用如何解决ORA-00054资源正忙,要求指定NOWAIT /杀掉进程 或者等待执行结束CREATE SEQUENCE temyearMINVALUE 1MAXVALUE 999999START WITH 2009INCREMENT BY 1NOCACHE;commit 之前 其他账号不能看到你更新的数据了UPDATE qj_test3 SET birth=temyear.nextval WHERE autoid=25;COMMIT;CURRVAL 必须在取了NEXTVAL之后才有效。它只表示当前SESSION最后一次取值,不表示这个SEQUENCE(被多个SESSION使用)的当前值。SELECT temyear.nextval FROM dual /查询到temyear的下一个数值 每查询一次 值修改一次不同的数据库中也成立 可以说是同步的SELECT temyear.nextval-10 FROM dual 可以进行计算SELECT temseq.currval FROM dual 不能一开始就用 需要初始化一下=第一次执行的时候要next 初始化一下(oracle规定)第一个循环体的使用DECLARECOUNT NUMBER:=1;countid NUMBER:=16;LOOPCOUNT:=COUNT+1;EXIT WHEN COUNT6;UPDATE qj_test3 SET birth= temyear.nextval WHERE birth=null;COMMIT;END LOOP;DECLAREv_COUNT NUMBER:=1;countid NUMBER:=16;BEGINWHILE v_COUNT=6LOOPUPDATE qj_test3 SET birth= temyear.nextval WHERE autoid=countid;v_COUNT := v_COUNT + 1;countid := countid + 3;COMMIT;END LOOP;END; / 为什么用exit when 不行! (没有找到解决办法)ALTER TABLE qj_test3ADD SNO NUMBER(20) /给qj_test3这张表 添加了一个属性ALTER TABLE qj_test3DROP COLUMN SNO /给qj_test3这张表 删除了一个属性CREATE OR REPLACE TRIGGER trg_testBEFORE INSERT ON qj_test3FOR EACH ROWBEGINSELECT temseq.nextval INTO :new.autoid FROM dual; /new. 这个很关键!END trg_testSELECT * FROM All_Triggers a WHERE a.table_name=QJ_TEST3;/查询表对应的触发器也可在my objects 里 查看triggers 就可以看到所有的触发器了!每张表最多可建立12 种类型的触发器,它们是:BEFORE INSERTBEFORE INSERT FOR EACH ROWAFTER INSERTAFTER INSERT FOR EACH ROWBEFORE UPDATEBEFORE UPDATE FOR EACH ROWAFTER UPDATEAFTER UPDATE FOR EACH ROWBEFORE DELETEBEFORE DELETE FOR EACH ROWAFTER DELETEAFTER DELETE FOR EACH ROW1. 执行 BEFORE语句级触发器;2. 对与受语句影响的每一行:l 执行 BEFORE行级触发器l 执行 DML语句l 执行 AFTER行级触发器 3. 执行 AFTER语句级Compilation errors for TRIGGER AGENT_INTE_NEW.TRG_TESTError: PLS-00801: 内部错误 ph2csql_strdef_to_diana:bindLine: 2Text: FOR EACH ROWError: PL/SQL: ORA-06544: PL/SQL: 内部错误, 参数: ph2csql_strdef_to_diana:bind, , , , , , , Line: 4Text: SELECT temseq.nextval INTO: new.autoid FROM dual;Error: PL/SQL: SQL Statement ignoredLine: 4Text: SELECT temseq.nextval INTO: new.autoid FROM dual;代码一:CREATE OR REPLACE TRIGGER trg_test BEFORE INSERT ON qj_test3FOR EACH ROWBEGINSELECT temseq.nextval INTO: (空格)new.autoid FROM dual;END;代码二:CREATE OR REPLACE TRIGGER trg_testBEFORE INSERT ON qj_test3FOR EACH ROWBEGINSELECT temseq.nextval INTO:new.autoid FROM dual;END trg_test;代码一爆出了三个错误,经过一晚上弱弱地查找,终于把三个错误找出,就是一个没有必要的空格 打错了位置! 惨痛的教训啊!SQL INNER AND LEFT JOIN 关键字训练!ALTER TABLE qj_test4DROP COLUMN addressALTER TABLE qj_test4ADD qj_size NUMBER(20)UPDATE qj_test4 SET qj_size=temyear.nextval WHERE autoid!=NULL;COMMIT; =有错误 更新不了 找不到错误所在? 不知道是不是系统繁忙 无法响应!试验另外一种方法:UPDATE qj_test4 SET qj_size=temyear.nextval WHERE autoid=37;COMMIT;和UPDATE qj_test4 SET qj_size=temyear.nextval WHERE autoid=37;COMMIT; 此方法是错误的! 因为数字 不能用单引号 单引号好像是用来匹配字符串的UPDATE qj_test4 SET qj_size=temyear.nextval-1000 WHERE autoid=16;COMMIT; =可以用来更新替换qj_size的原有值!按住F8 执行 和按住绿色的按钮能commit! 才算提交成功!SELECT * FROM qj_test3LEFT JOIN qj_test5ON qj_test3.autoid=qj_test5.autoidSELECT Distinct * FROM qj_test3LEFT JOIN qj_test5ON qj_test3.autoid=qj_test5.autoidDELETE ! ORDER BY TOP = LIKE = INSELECT * FROM qj_test3ORDER BY birthDELETE FROMQJ_TEST3WHERE birth=1990SELECT * FROM qj_testWHERE Rownum5 =返回前4条记录!SELECT * FROM qj_test3WHERE NAME IN (qijin,lby) SELECT * FROM qj_test5WHERE autoID BETWEEN 16 AND 25 =取在16到25之间的AUTOID的所有行SELECT q.autoidFROM qj_test3 AS qWHERE q.autoid IS NOT NULL=报错 网上给出的解决办法是 不用AS 直接用 qj_test3UNION 操作符用于合并两个或多个 SELECT 语句的结果集。请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。CREATE TABLE qj_test6ASSELECT * FROM (SELECT * FROM qj_test3UNION ALLSELECT * FROM qj_test5)W3cschool 没有标明 select into 是sql server的写法SELECT * INTO qj_test7FROM qj_test6这是oracle的写法 前

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论