- 1、本文档共5页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Oracle存储过程学习
Oracle存储过程学习
大家都知道存储过程的开头语句是CREATE OR REPLACE PROCEDURE (VAR in type,VAR out type, .....) AS | IS 但从变量申明开始变量类型有哪些? BEGIN后逻辑语句有哪些,我就记不清楚了。
这里先给个简单的栗子
1
2
3
4
5
6
7
8
9
10
11
12 CREATE?OR?REPLACE?PROCEDURE?OUTPUTINFO?AS
??I?NUMBER(10);?--在这里申明变量I
BEGIN
??I?:=?0;?--申明变量I的值为0
??WHILE?I?=?10?LOOP
????--这里使用了WHILE循环?
????BEGIN
??????I?:=?I?+?1;
????END;
????DBMS_OUTPUT.PUT_LINE(I);?--发现该句放在BEGIN,END结构内外,结果一样?
??END?LOOP;
END?OUTPUTINFO;
1
2
3
4
5
6
7
8
9
10
11
12
13
14 SQL?SET?SERVEROUTPUT?ON
SQL?EXEC?OUTPUTINFO;
1
2
3
4
5
6
7
8
9
10
11
PL/SQL?PROCEDURE?SUCCESSFULLY?COMPLETED. 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 CREATE?OR?REPLACE?PROCEDURE?TBS?AS
??TB????VARCHAR2(15);
??TBN???NUMBER(10)?DEFAULT?1;
??V_SQL?VARCHAR2(2000);
??CNT???NUMBER(10);
??TBD???DATE;
BEGIN
??TBD?:=?TO_DATE(2013/12/31?23:59:59,?YYYY/MM/DD?HH24:MI:SS);
??WHILE?(TBN?=?11)?LOOP
????TB????:=?TBILLLOG?||?TBN;
????TBN???:=?TBN?+?1;
????V_SQL?:=?SELECT?COUNT(*)?FROM??||?TB;
????EXECUTE?IMMEDIATE?V_SQL
??????INTO?CNT;
????IF?CNT??1?THEN
??????DBMS_OUTPUT.PUT_LINE(TBD?||???||?TBN?||???||?CNT);
????END?IF;
??END?LOOP;
END; 今天写作业,一个简单的过程,犯了个简单的逻辑错误,输出的时候使用的变量是V_SQL,导致结果总是SELECT语句而非语句执行的结果。
1
2
3
4
5
6
7
8
9 CREATE?OR?REPLACE?PROCEDURE?MALE_AVG_SALARY?AS
??V_SQL???VARCHAR2(2000);
??RESULTS?NUMBER(10);
BEGIN
??V_SQL?:=?SELECT?AVG(SALARY)?FROM?EMPLOYEES?WHERE?EMPLOYEESEX=?||
???????????M?||??GROUP?BY?EMPLOYEESEX;
??EXECUTE?IMMEDIATE?V_SQL;
??DBMS_OUTPUT.PUT_LINE(V_SQL);
END; 今天的作业继续头大,不过参考了业务库上的过程,对过程调用有了进一步的认识:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 显示的开启游标
CREATE?OR?REPLACE?PROCEDURE?EMPLOYEE_SALARY(GENTEE?IN?VARCHAR2)?AS
??CURSOR?CUR?IS
????SELECT?FIRST_NAME?||?LAST_NAME?EMPLOYEE_NAME,?SALARY
??????FROM?EMPLOYEES
?????WHERE?EMPLOYEESEX?=?GENTEE;
??R?EMPLOYEES?%?ROWTYPE;
BEGIN
??FOR?R?IN?CUR?LOOP
????BEGIN
??????DBMS_OUTPUT.PUT_LINE(EMPLOYEE_NAME:??||?R.EMPLOYEE_NAME?||
????????????????????????????EMPLOYEE_SALARY:??||?R.S
文档评论(0)