初次使用OracleWord格式文档下载.docx
- 文档编号:21319806
- 上传时间:2023-01-29
- 格式:DOCX
- 页数:11
- 大小:19.34KB
初次使用OracleWord格式文档下载.docx
《初次使用OracleWord格式文档下载.docx》由会员分享,可在线阅读,更多相关《初次使用OracleWord格式文档下载.docx(11页珍藏版)》请在冰豆网上搜索。
7next1Mmaxsize1000Mextentmanagementlocal;
8--删除表空间
9--droptablespaceDBTest_tbsincludingcontentsanddatafilescascadeconstraints;
10--创建临时表空间
11createtemporarytablespaceDBTest_temp
12tempfile'
\Oracle\oradata\DBTest_tbs\Temp.dbf'
size100Mautoextendonnext1Mmaxsize1000Mextentmanagementlocal;
13--创建索引表空间
14createtablespaceDBTest_index
15datafile'
\Oracle\oradata\DBTest_tbs\Index.dbf'
size100Mextentmanagementlocal;
然后就是创建用户了
1createuserDBTest_useridentifiedby441821
2defaulttablespaceDBTest_tbs
3temporarytablespaceDBTest_temp;
4--授权
5--一般授予的权限:
createsession,createtable,unlimitedtablespace;
6--对象权限:
用户创建的表属于用户自己的,想给被所有人用,则grantallontabletopublic;
7--可以指定列的权限:
grantupdate(name)ontbtoDBTest_user;
8grantconnect,resource,dbatoDBTest_user;
9--收权
10RevokedbafromDBTest_user;
创建完用户并授予相应的权限就可以创建表之类的DDL操作了,具体语法跟T-SQL语法差不多的,注意一下Oracle的数据类型就可以了。
然后记录下PL/SQL的基本使用方法:
1----------------------PL/SQL语句基础------------------------
2--mergeinto的用法,通过MERGE语句,根据一张表或子查询的连接条件对另外一张表进行查询,
3--连接条件匹配上的进行UPDATE,无法匹配的执行INSERT,效率要高于INSERT+UPDATE
4mergeintofzq1aa--fzq1表是需要更新的表
5 usingfzqbb--关联表
6 on(aa.id=bb.id)--关联条件
7 whenmatchedthen--匹配关联条件,作更新处理
8 updateset
9 aa.chengji=bb.chengji+1,
10 aa.name=bb.name--此处只是说明可以同时更新多个字段。
11 whennotmatchedthen--不匹配关联条件,作插入处理。
如果只是作更新,下面的语句可以省略。
12 insertvalues(bb.id,bb.name,bb.sex,bb.kecheng,bb.chengji);
13
14--pl/sql语句块
15declare
16ecounttb_food.count%Type;
--定义表中的字段类型
17enonumber;
18eresultnumber;
19foodtb_food%rowtype;
--定义表类型,只能存储一条记录
20begin
21eno:
=&
no;
--要用户输入信息
22selectcountintoecountfromtb_foodwherefoodID='
F001'
;
23select*intofoodfromtb_foodwherefoodID='
24eresult:
=ecount/eno;
25dbms_output.put_line(ecount||'
/'
||eno||'
='
||eresult);
26dbms_output.put_line(food.FoodID);
27exception--捕捉异常
28whenzero_dividethen
29dbms_output.put_line('
error'
30end;
31/--执行语句
32
33--loop循环
34declare
35counumber;
36begin
37cou:
=1;
38loop
39dbms_output.put_line('
cou='
||cou);
40exitwhencou>
10;
41cou:
=cou+1;
42endloop;
43end;
44/
45
46--while循环
47declare
48counumber;
49begin
50cou:
51while(cou10)
52loop
53dbms_output.put_line('
cou);
54cou:
55endloop;
56end;
57/
58
59--for循环
60declare
61counumber;
62begin
63forcouin1..10loop
64dbms_output.put_line('
65endloop;
66end;
67/
68
69--if...else语句
70declare
71counumber;
72begin
73cou:
74ifcou>
10then
75dbms_output.put_line('
76else
77dmbs_ouput.put_line(条件不满足);
78endif;
79end;
80/
81
82--goto语句
83declare
84eIDtb_food.FoodID%Type;
85ecounttb_food.Count%Type;
86begin
87eID:
=%ne;
88selectcountintoecountfromtb_foodwhereFoodID=eID;
89ifecout>
5then
90gotopo1;
91else
92gotopo2;
93endif;
94po1>
>
dbms_output.put_line('
数量大于5'
95po2>
数量小于等于5'
96end;
97/
ViewCode
注意:
PL/SQL中的赋值是使用"
:
="
代替的,而字符串连接则使用"
||"
代替。
创建函数的方法:
1createorreplacefunctionmyfun(fidtb_food.foodID%type)
2returnnumber
3as
4Fnamenarchar2;
5selectFoodNameintoFnamefromtb_foodwhereFoodId=fid;
6returnFname;
7end;
8/
9--调用函数
10selectmyfun('
)fromdual;
创建存储过程的方法:
1createorreplaceproceduremyproc
2(fidinouttb_food.foodId%type)--带值进带值出
4counumber;
5v_idchar;
6begin
7selectcount(*)intocoufromtb_foodwherefoodId=fid;
8ifcou=0then--不存在ID
9insertintotb_foodvalues(fid,'
名称'
10else--已存在,不能插入
11fid:
=-1;
12endif;
13end;
14/
15
16--执行存储过程
17declare
18fidtb_food.foodid%type;
19begin
20fid:
21myproc(fid);
22dbms_output.put_line(fid);
23end;
24/
25
26--删除存储过程
27dropproceduremyproc;
存储过程返回数据集不像SQLServer的一样直接select就可以了,需要使用游标来存储数据集,具体使用方法如下:
1--带结果集的存储过程
2--创建包
3createorreplacepackagepak_test
4istyperefcursorisrefcursor;
5procedurepro_test(curoutrefcursor);
6end;
7/
8--创建包体
9createorreplacepackagebodypak_testis
10procedurepro_test
11(curoutrefcursor)
12is
13begin
14opencurfor
15select*fromtb_food;
16return;
17end;
18end;
19/
20
21--执行存储过程
22declare
23v_curpak_test.refcursor;
24v_foodtb_food%rowtype;
25begin
26pak_test.pro_test(v_cur);
27FETCHv_curINTOv_food;
28WHILEv_cur%FOUNDLOOP
29DBMS_OUTPUT.PUT_LINE(v_food.FoodID);
30FETCHv_curINTOv_food;
31ENDLOOP;
32end;
33/
创建触发器的方法:
1--------触发器------------
2--触发器不能从触发器所对应的基本中读取数据,否则执行时会出错
3--Before语句触发器
4createorreplacetriggertr_src_emp
5beforeinsertorupdateordeleteonemp
7ifto_char(sysdate,'
DY'
'
nls_date_language=AMERICAN'
)in('
SAT'
SUN'
)then
8raise_application_error(-20001,'
工作人员不能在周末改变雇员信息'
9endif;
10end;
11/
12
13--Bofre行触发器,没作用一行就触发一次触发器
14createorreplacetriggertr_emp_sal
15beforeupdateofsalonemp
16foreachrow
17begin
18if:
new.sal:
old.salthen
19raise_application_error(-20010,'
员工工资不能低于原有工资'
20endif;
21end;
22/
23
24--限制行触发器
25createorreplacetriggertr_sal_sal
26afterupdateofsalonemp
27foreachrow
28when(old.job='
salesman'
)
29declare
30v_tempint;
31begin
32selectcount(*)intov_tempfromempwherename=:
old.name;
33ifv_temp=0then
34insertintoempvalues(:
old.name,:
old.sal,:
new.sal);
35else
36updateempsetoldsal=:
old.sal,newsal=:
new.salwherename=:
37endif;
38end;
39/
动态执行SQL语句的方法:
1----------动态执行SQL语句------------
2declare
3sql_stmtvarchar2(200);
--动态SQL语句
4kind_namenvarchar2(50):
5kind_idtb_foodKind.Kindid%type:
55'
6cur_foodkindtb_foodKind%rowtype;
7begin
8--无子句的executeimmediate
9executeimmediate'
createtablet_test(idnumber)'
10--using子句的executeimmediate
11sql_stmt:
insertintotb_foodKind(kindid,KindName)values(:
1,:
2)'
12executeimmediatesql_stmtusingkind_id,kind_name;
13--into子句的executeimmediate
14--sql_stmt:
select*fromtb_foodkindwherekindID=:
1'
15executeimmediatesql_stmtintocur_foodkindusingkind_id;
16dbms_output.put_line(cur_foodkind.kindid);
17--returninginto子句的executeimmediate
18--returning可以把操作影响行中的数据返回
19sql_stmt:
updatetb_foodkindsetkindname='
'
西瓜'
wherekindid=:
1returningkindnameinto:
2'
20executeimmediatesql_stmtusingkind_idreturningintokind_name;
21dbms_output.put_line(kind_name);
22end;
23/ 最后,讲一下在C#中操作Oracle数据库,我使用的是Odbc连接数据库的,连接字符串是"
DSN=testdb;
uid=dbtest;
pwd=dbtest"
,DSN就是之前添加的ODBC驱动名称,其他的也就跟Sql的差不多了,还需要注意的是使用OdbcParameter参数的SQL语句中,参数的要用"
?
"
作为替代符,例如"
select*fromtb_foodKindwhereKindID=?
,而且如果想使用ODBC来调用存储过程,存储过程中如果存在参数,则需要使用cmd.CommandText="
{callpro_AddPackageDetail(?
?
)}"
这样的格式才能执行,如果没有参数则可以直接使用存储过程名称。
好了,暂时就先记录到这里了,如果以后有继续学到更多的知识再来补充。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 初次 使用 Oracle