CREATE OR REPLACE PACKAGE pkg_study_test IS /*********************************************************** #function:oracle函数写法 #version:1.0 #author:作者 #createdate:2014-03-25 ***********************************************************/ FUNCTION f_addition(v_num1 NUMBER, v_num2 NUMBER) RETURN NUMBER; /*********************************************************** #function:oracle过程写法 #version:1.0 #author:作者 #createdate:2014-03-25 ***********************************************************/ PROCEDURE p_addition(v_num1 NUMBER, v_num2 NUMBER, v_out_num OUT NUMBER); /*********************************************************** #function:oralce plsql 基本语法 #version:1.0 #author:作者 #createdate:2014-03-25 ***********************************************************/ PROCEDURE p_basic_syntax(v_score NUMBER DEFAULT 60, v_out_param OUT NUMBER); END pkg_study_test;
包体:
CREATE OR REPLACE PACKAGE BODY pkg_study_test IS FUNCTION f_addition(v_num1 NUMBER, v_num2 NUMBER) RETURN NUMBER IS /*********************************************************** #function:oracle函数写法 #version:1.0 #author:作者 #createdate:2014-03-25 ***********************************************************/ v_rslt NUMBER(16); BEGIN v_rslt := v_num1 + v_num2; RETURN v_rslt; END; PROCEDURE p_addition(v_num1 NUMBER, v_num2 NUMBER, v_out_num OUT NUMBER) IS /*********************************************************** #function:oracle过程写法 #version:1.0 #author:作者 #createdate:2014-03-25 ***********************************************************/ v_rslt NUMBER(16); BEGIN v_rslt := v_num1 + v_num2; v_out_num := v_rslt; END p_addition; PROCEDURE p_basic_syntax(v_score NUMBER DEFAULT 60, v_out_param OUT NUMBER) IS /*********************************************************** #function:oralce plsql 基本语法 #version:1.0 #author:作者 #createdate:2014-03-25 ***********************************************************/ v_num1 NUMBER; --变量定义 v_num2 NUMBER; v_num3 NUMBER; v_owner all_tables.owner%TYPE; --这样定义变量不会因为修改表结构导致过程需要重新修改 v_tab_name all_tables.table_name%TYPE; v_index NUMBER; --循环变量 v_count NUMBER(10); BEGIN v_num1 := 1; --变量赋值 v_num2 := 2; v_num3 := pkg_study_test.f_addition(v_num1, v_num2); dbms_output.put_line(v_num3); -- --for 循环例子 FOR cur_tab IN (SELECT a.owner, a.table_name FROM all_tables a WHERE a.owner = 'AMBER' AND rownum < 10) LOOP dbms_output.put_line(cur_tab.owner || '=' || cur_tab.table_name); END LOOP; FOR v_index IN 1 .. v_num3 LOOP dbms_output.put_line('输出循环变量=' || v_index); END LOOP; -- -- --while 循环 及 exit when v_index := 1; v_num3 := 100; WHILE (v_index < v_num3) LOOP dbms_output.put_line('输出循环变量=' || v_index); EXIT WHEN v_index = 3; v_index := v_index + 1; END LOOP; -- --if else 判断 SELECT COUNT(*) INTO v_count FROM all_tables a WHERE a.owner = 'AMBER'; IF v_count = 0 THEN dbms_output.put_line('AMBER用户下没有表'); ELSE dbms_output.put_line('AMBER用户下有' || v_count || '张表.'); END IF; -- if elsif else 判断 IF v_score < 60 THEN dbms_output.put_line('成绩不及格'); ELSIF v_score >= 60 AND v_score < 80 THEN dbms_output.put_line('成绩良好'); ELSIF v_score >= 80 AND v_score < -100 THEN dbms_output.put_line('成绩优秀'); ELSE dbms_output.put_line('成绩不不存在'); END IF; END; END pkg_study_test;