oracle plsql基本语法

包头:
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;

猜你喜欢

转载自852428783-qq-com.iteye.com/blog/2036640