Oracle存储过程学习.doc
文本预览下载声明
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
显示全部