Oracle筆記6

1、函數
函數適用於複雜的統計和計算,最終將結果返回;而存儲過程則更適合執行對數據庫的更新,尤其是大量數據的更新。存儲過程中可以實現數據庫的增、刪、改、查等操作。

CREATE OR REPLACE FUNCTION get_hello_msg
RETURN VARCHAR2 AS
BEGIN
  RETURN 'Hello World';
 END get_hello_msg;

SELECT get_hello_msg() AS aa FROM dual;
SELECT object_name,object_type,status FROM user_objects t WHERE t.OBJECT_NAME='GET_HELLO_MSG';
SELECT NAME,TYPE,line,text FROM user_source t WHERE t.name='GET_HELLO_MSG';

set serveroutput on 
DECLARE
msg VARCHAR2(20);
BEGIN
  msg := get_hello_msg();
  dbms_output.put_line(msg);
 END;

CREATE OR REPLACE FUNCTION TEST04.get_name_string(p_deptno NUMBER)
RETURN VARCHAR2 AS
CURSOR cu_emp IS SELECT * FROM emp WHERE deptno=TRIM(p_deptno);
v_emp_rec emp%ROWTYPE;
v_name_str VARCHAR2(500);
BEGIN
  OPEN cu_emp;
  LOOP
    FETCH cu_emp INTO v_emp_rec;
    EXIT WHEN cu_emp%NOTFOUND;
    v_name_str := v_name_str||v_emp_rec.ename||',';
  END LOOP;
  CLOSE cu_emp;
  RETURN SUBSTR(v_name_str,1,LENGTH(v_name_str)-1);
END get_name_string;
 

CREATE OR REPLACE FUNCTION TEST04.get_emp_string
RETURN VARCHAR2
AS
BEGIN
  DECLARE CURSOR cu_emp IS SELECT ename FROM emp;
  v_name VARCHAR2(20);
  v_name_str VARCHAR2(500);
  BEGIN
    OPEN cu_emp;
        FETCH cu_emp INTO v_name;
    WHILE cu_emp%FOUND LOOP
      v_name_str := v_name_str||v_name||',';
      FETCH cu_emp INTO v_name;
    END LOOP;
    CLOSE cu_emp;
  RETURN substr(v_name_str,1,length(v_name_str)-1);
 END;
END get_emp_string;

drop function get_emp_string;

2、存儲過程

CREATE OR REPLACE PROCEDURE prc_update_emp1(p_deptno IN NUMBER)
AS 
BEGIN
  UPDATE emp1 SET comm=NVL(comm,0)+100
  WHERE deptno=p_deptno;
  COMMIT;
END;

DECLARE
p_deptno NUMBER := 10;
BEGIN
prc_update_emp1(p_deptno);
END;

drop procedure prc_update_emp1;

3、包

包頭、包體

程序包可以包含多個函數和存儲過程,從而更好的管理這些函數和存儲過程。並且,可以在程序包中定義變量,包中的所有函數和存儲過程可以共享這些變量。

create or replace package pkg_xxx as

create or replace package body pkg_xxx as

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章