1.
2. 在imp导入数据时可以加上
ignore=y, 这样就会忽略对象创建错误信息,这样有的数据会报错,没有的数 据就会插入表中。
Rows=n时只能导入表结构,数据导入不了。
Show=y可以显示导出文件的内容,可以帮助找到错误。
Destroy=y时就会覆盖已经存在的数据文件。(我试过不行,不知道是不是我理解有问题)
Exp help=y找到详细的帮助
3. 在sqlplus 下调用exp:
SQL> host exp 'wang/wang@demo' file=c:/aa.dmp log=c:/aa.log tables=aa;
4. 使用spool
Sql>sqool c:/aa.tet
Sql>spool off
5. 在cmd下启动oracle
Lsnrctl start
Oradim –startup -sid demo
6. union只是将两个结果联结起来一起显示,并不是联结两个表,UNION ALL 这个指令的目的也是要将两个 SQL 语句的结果合并在一起。 UNION ALL 和 UNION 不同之处在于 UNION ALL 会将每一笔符合条件的资料都列出来,无论资料值有无重复。
网上有个人要做一个存储过程我有两个表.tempa,tempbtempa:内容为:
AA COL1 COL2
1 1 dd
1 1 SS
2 3 BB
TEMPB 内容为AA COL1 COL2
1 3 S
1 4 SS
2 5 BB
现在要把这两个表连在一起;当TEMPA中的AA 和 COL2 同TEMPB中的AA和COL2相同,则TEMPA.COL1+TEMPB.COL1 付值给新建的标TEMPC,若不同,则分别插入到表TEMPC,中.
insert into tempc
select aa,sum(col1) col1 ,col2
from (select * from tempa
union all
select * from tempb) t
group by t.aa,t.col2;
在这里注意group by 可以跟两个字段,这样就可以实现以两个字段都相等来分组。同时注意临时表的使,总是想不起来。
其实还有一种方法:
Merge into tempa t2
Using tempb t1
On (t1.aa=t2.aa and t1.col2=t2.col2)
When matched then update set t2.col1=t1.col1+t2.col1
When not matched then insert values(t1.aa,t1.col1,t1.col2);
7. 察看用户下的所有对象:
Select * from obj;
其中有object_name和object_type字段等字段,方便查找。
8. update多个字段,这种写法效率也高。
UPDATE EMP
SET (EMP_CAT, SAL_RANGE)
= (SELECT MAX(CATEGORY) , MAX(SAL_RANGE)
FROM EMP_CATEGORIES)
WHERE EMP_DEPT = 0020;
9. 查询语句也是可是加许多判断语句的。这样可以在写的时候加许多逻辑进去。
SQL> select id,
2 case
3 when id in (2) then
4 upper(sal)
5 else
6 lower(sal)
7 end sal
8 from cc;
ID SAL
---------- --------------
1 aa
2 BB
3 cc
10. 带参数的游标,这样可以传入不同的参数实现不同的查询,比如传入的用户id不同对应的发布信息不同:
declare
cursor e_c(no varchar2) is
select keyword from tb_publishinfo where userid=no;
v_key tb_publishinfo.keyword%TYPE;
begin
open e_c(&dd);
loop
fetch e_c into v_key;
exit when e_c%notfound;
dbms_output.put_line(v_key);
end loop;
close e_c;
end;
11. 根据不同的条件进行不同的输出,使用的是游标,但是要先创建一个包来先申明以下这个类型。
CREATE OR REPLACE PACKAGE refcursor
AS
TYPE ref_cur IS REF CURSOR;
END refcursor;
在使用游标来根据不同条件返回不同的记录集:
CREATE OR REPLACE FUNCTION f_d (
uid IN number
)
RETURN refcursor.ref_cur
IS
cur refcursor.ref_cur;
BEGIN
IF uid=1
THEN
OPEN cur FOR
SELECT userid
FROM tb_publishinfo tp
WHERE tp.id<10000;
END IF;
IF uid=2
THEN
OPEN cur FOR
SELECT userid
FROM tb_publishinfo tp
WHERE tp.id>10000;
END IF;
RETURN cur;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
NULL;
WHEN OTHERS
THEN
RAISE;
END f_d;

被折叠的 条评论
为什么被折叠?



