Oracle中定義package以及儲存過程的使用
原文地址:http:///Linux/2015-02/113720.htm
使用scott賬戶下的dept表;
select * from dept order by deptno;
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
為了演示方便,插入一條資料:
insert into dept(deptno, dname, loc) values(50,'SYSTEM', 'NEW YORK');
新插入的記錄為:50 SYSTEM NEW YORK
----------
我們主要演示在package中儲存過程的返回型別為pipelined,cursor 和 value三種。
----------
1.返回型別為pipelined。
create or REPLACE type dept_obj is OBJECT( DEPTNO NUMBER(2,0), DNAME VARCHAR2(14 BYTE) );
create or REPLACE type dept_obj_type AS table of dept_obj;
2.定義 package
create or replace package SPTest
is
/*return a pipelined demo start*/
type dept_data_rec_type is RECORD(
DEPTNO NUMBER(2,0),
DNAME VARCHAR2(14)
);
type dept_ref_type is REF CURSOR;
function getDept(in_loc IN VARCHAR2) return dept_obj_type pipelined;
/*return a pipelined demo end*/
/*return a cursor demo start*/
FUNCTION getDeptInfo(in_deptno IN dept.deptno%TYPE) RETURN dept_ref_type;
/*return a cursor demo end*/
/* return a varchar value start */
function getName(in_deptno in number) RETURN VARCHAR2;
/* return a varchar value end */
end SPTest;
/
3、定義package body
create or replace package body SPTest
is
/*return a pipelined demo start*/
function getDept(in_loc IN VARCHAR2) return dept_obj_type pipelined is
l_dept_obj dept_obj :=dept_obj(null, null);
dept_ref_type_cursor dept_ref_type;
dept_data_rec dept_data_rec_type;
begin
open dept_ref_type_cursor
for select deptno, dname from dept where loc = in_loc;
loop
fetch dept_ref_type_cursor into dept_data_rec;
exit when dept_ref_type_cursor%NOTFOUND;
l_dept_obj.DEPTNO := dept_data_rec.DEPTNO;
l_dept_obj.DNAME := dept_data_rec.DNAME;
pipe row(l_dept_obj);
end loop;
close dept_ref_type_cursor;
RETURN ;
end getDept;
/*return a pipelined demo end*/
/*return a cursor demo start*/
FUNCTION getDeptInfo(in_deptno IN dept.deptno%TYPE) RETURN dept_ref_type
AS
dept_ref_type_cursor dept_ref_type;
BEGIN
OPEN dept_ref_type_cursor FOR
SELECT deptno, dname, loc FROM dept where deptno = in_deptno;
RETURN dept_ref_type_cursor;
END getDeptInfo;
/*return a cursor demo end*/
/* return a varchar value start */
function getName(in_deptno in number) RETURN VARCHAR2
as rtn_deptname VARCHAR2(100);
begin
select dname into rtn_deptname from dept where deptno = in_deptno;
RETURN rtn_deptname;
end getName;
/* return a varchar value start */
end SPTest;
/
最後,執行儲存過程。
/*返回pipelined table */
select deptno, dname from table(SPTest.getDept('NEW YORK')) order by deptno;
/*返回cursor*/
select SPTest.getDeptInfo(10) from dual;
/*返回具體值*/
select SPTest.getName(50) from dual;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29812844/viewspace-1878504/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle儲存過程中定義多個遊標Oracle儲存過程
- oracle的儲存過程Oracle儲存過程
- Oracle儲存過程Oracle儲存過程
- Oracle儲存過程-1Oracle儲存過程
- mysql 儲存過程中變數的定義與賦值操作MySql儲存過程變數賦值
- Oracle儲存過程乾貨(一):儲存過程基礎Oracle儲存過程
- Sqlsugar呼叫Oracle的儲存過程SqlSugarOracle儲存過程
- 原創:oracle 儲存過程Oracle儲存過程
- Oracle儲存過程中跳出迴圈的寫法Oracle儲存過程
- Mysql 儲存過程的使用MySql儲存過程
- LightDB/PostgreSQL 相容Oracle儲存過程SQLOracle儲存過程
- oracle儲存過程書寫格式Oracle儲存過程
- Sqlserver中的儲存過程SQLServer儲存過程
- MySQL儲存過程中如何使用ROLLBACKMySql儲存過程
- 儲存過程定義多個遊標多個begin儲存過程
- Oracle 儲存過程分頁 + Sqlsugar呼叫Oracle儲存過程SqlSugar
- oracle儲存過程和觸發器Oracle儲存過程觸發器
- Springboot呼叫Oracle儲存過程的幾種方式Spring BootOracle儲存過程
- SQL SERVER儲存過程AS和GO的含義SQLServer儲存過程Go
- 使用JavaScript和Python實現Oracle資料庫的儲存過程?JavaScriptPythonOracle資料庫儲存過程
- jsp中呼叫儲存過程JS儲存過程
- SqlServer儲存過程的建立與使用SQLServer儲存過程
- MySQL儲存過程的建立和使用MySql儲存過程
- mssql 儲存過程呼叫另一個儲存過程中的結果的方法分享SQL儲存過程
- 使用儲存過程(PL/SQL)向資料庫中儲存BLOB物件儲存過程SQL資料庫物件
- ibatis呼叫oracle儲存過程(極簡版)BATOracle儲存過程
- MySQL自定義函式與儲存過程MySql函式儲存過程
- .NET Core中使用Dapper操作Oracle儲存過程最佳實踐APPOracle儲存過程
- Oracle儲存過程編譯卡死的解決方法Oracle儲存過程編譯
- Laravel 中使用 MySQL 儲存過程LaravelMySql儲存過程
- Mysql中儲存過程、儲存函式、自定義函式、變數、流程控制語句、游標/遊標、定義條件和處理程式的使用示例MySql儲存過程儲存函式變數
- Oracle 編譯儲存過程卡死解決方法Oracle編譯儲存過程
- oracle使用儲存過程將表資料以excel格式匯出Oracle儲存過程Excel
- SQL 儲存過程裡呼叫另一個儲存過程SQL儲存過程
- 23. 使用MySQL之使用儲存過程MySql儲存過程
- 儲存過程與儲存函式儲存過程儲存函式
- unidac儲存過程儲存過程
- firedac儲存過程儲存過程
- 呼叫儲存過程儲存過程