oracle預存程序的結構包含三部分:1、過程聲明;2、執行過程部分;3、預存程序異常,該部分可省略,如果要增強腳本的容錯性和調試的方便性那就寫上異常處理。
本教學操作環境:Windows7系統、Oracle 11g版、Dell G3電腦。
什麼是預存程序
預存程序: 百度百科上是這樣解釋的,預存程序(Stored Procedure)是在大型資料庫系統中,一組為了完成特定功能的SQL 語句集,儲存在資料庫中,經過第一次編譯後再次呼叫不需要再次編譯,使用者透過指定預存程序的名字並給出參數(如果該預存程序帶有參數)來呼叫預存程序。
簡單的說就是專門做一件事一段sql語句。
可以由資料庫自己去調用,也可以由java程式去調用。
在oracle資料庫中預存程序是procedure。
預存程序結構
(1)基本結構
Oracle預存程序包含三部分:過程聲明,執行過程部分,預存程序異常(可寫可不寫,要增強腳本的容錯性和調試的方便性那就寫上異常處理)
(2)無參存儲過程
/** name_procedure就是自己自定义的存储过程名 */ create or replace procedure name_procedure AS/IS 变量名1 数据类型; 变量名2 数据类型; BEGIN --要处理的业务逻辑 EXCEPTION --存储过程异常 END name_procedure;
(3).有參考存儲過程
#普通參數預存程序
/* age 类型为number 初始化为20; */ CREATE OR REPLACE PROCEDURE name_procedure (param1 TYPE) AS/IS name varchar(20); age number :=20; BEGIN --业务处理..... END ;
帶參數的預存程序並且進行賦值
CREATE OR REPLACE PROCEDURE 存储过程名称( s_no in varchar, s_name out varchar, s_age number) AS total NUMBER := 0; BEGIN SELECT COUNT(1) INTO total FROM student s WHERE s.age=s_age; dbms_output.put_line('符合该年龄的学生有'||total||'人'); EXCEPTION WHEN too_many_rows THEN DBMS_OUTPUT.PUT_LINE('返回值多于1行'); END
其中參數IN表示輸入參數,是參數的預設模式。
OUT表示傳回值參數,型別可以使用任意Oracle中的合法型別。
OUT模式定義的參數只能在過程體內部賦值,表示該參數可以將某個值傳回呼叫他的過程
IN OUT表示該參數可以向該過程中傳遞值,也可以將某個值傳出去
第7行:查詢語句,把參數s_age作為過濾條件,INTO關鍵字,把查到的結果賦給total變數。
第8行:輸出查詢結果,在資料庫中「||」用來連接字串
第9—11行:做異常處理
#預存程序語法
(1)運算子
(2) SELECT INTO STATEMENT語句
將查詢結果賦值給一個變數或多個變數
需求:查出成績為100分的那個學生的姓名,年齡,籍貫
CREATE OR REPLACE PROCEDURE DEMO_CDD1 IS s_name VARCHAR2; --学生名称 s_age NUMBER; --学生年龄 s_address VARCHAR2; --学生籍贯 BEGIN --给单个变量赋值 SELECT student_address INTO s_address FROM student where student_grade=100; --给多个变量赋值 SELECT student_name,student_age INTO s_name,s_age FROM student where student_grade=100; --输出成绩为100分的那个学生信息 dbms_output.put_line('姓名:'||s_name||',年龄:'||s_age||',籍贯:'||s_address); END
(3)選擇語句
//if 后面一定要添加THEN 相当于Java中的 大括号 IF s_sex=1 THEN dbms_output.put_line('这个学生是男生'); ELSE IF THEN dbms_output.put_line('这个学生是女生'); ELSE dbms_output.put_line('这个学生性别错误'); END IF
(4)循環語句
#a.基本循環
LOOP IF 表达式 THEN EXIT; END IF END LOOP;
b.while循環
WHILE 表达式 LOOP dbms_output.put_line('haha'); END LOOP;
c.for循環
//a 1 到 20 范围 FOR a in 10 .. 20 LOOP dbms_output.put_line('value of a: ' || a); END LOOP;
推薦教學:《Oracle教程》
以上是oracle儲存過程的基本結構包含哪些的詳細內容。更多資訊請關注PHP中文網其他相關文章!