1.创建实体表及初始化数据
create table PRESIDENTS(
ID NUMBER(10) not null,
NAME VARCHAR(32) not null,
BIRTHDATE DATE not null,
PARTY char(1) not null,
primary key (ID)
)
insert into PRESIDENTS (ID, NAME, BIRTHDATE, PARTY) values (1, 'George W. Bush', to_date('07/06/1946','MM/DD/YYYY'),'R');
insert into PRESIDENTS (ID, NAME, BIRTHDATE, PARTY) values (2, 'Bill Clinton', to_date('08/19/1946','MM/DD/YYYY'),'D');
insert into PRESIDENTS (ID, NAME, BIRTHDATE, PARTY) values (3, 'George H. W. Bush', to_date('06/12/1924','MM/DD/YYYY'),'R');
insert into PRESIDENTS (ID, NAME, BIRTHDATE, PARTY) values (4, 'Ronald W. Reagan', to_date('02/06/1911','MM/DD/YYYY'),'R');
insert into PRESIDENTS (ID, NAME, BIRTHDATE, PARTY) values (5, 'Jimmy Carter', to_date('10/01/1924','MM/DD/YYYY'),'D');
insert into PRESIDENTS (ID, NAME, BIRTHDATE, PARTY) values (6, 'Gerald R. Ford', to_date('07/14/1913','MM/DD/YYYY'),'R');
insert into PRESIDENTS (ID, NAME, BIRTHDATE, PARTY) values (7, 'Richard M. Nixon', to_date('01/09/1913','MM/DD/YYYY'),'R');
insert into PRESIDENTS (ID, NAME, BIRTHDATE, PARTY) values (8, 'Lyndon B. Johnson', to_date('08/27/1908','MM/DD/YYYY'),'D');
insert into PRESIDENTS (ID, NAME, BIRTHDATE, PARTY) values (9, 'John F. Kennedy', to_date('05/29/1917','MM/DD/YYYY'),'D');
insert into PRESIDENTS (ID, NAME, BIRTHDATE, PARTY) values (10, 'Dwight D. Eisenhower', to_date('10/14/1890','MM/DD/YYYY'),'R');
2.创建临时表以控制在函数与存储之间的数据
CREATE GLOBAL TEMPORARY TABLE TEMP_PRESIDENTS(
ID NUMBER(10) not null,
NAME VARCHAR(32) not null,
BIRTHDATE DATE not null,
PARTY char(1) not null
) ON COMMIT PRESERVE ROWS;
3.创建存储
CREATE PROCEDURE LOAD_TEMP_PRESIDENTS (
partyParam CHAR
)
as
begin
EXECUTE IMMEDIATE 'TRUNCATE TABLE TEMP_PRESIDENTS';
COMMIT;
INSERT INTO TEMP_PRESIDENTS
SELECT ID, NAME, BIRTHDATE, PARTY FROM PRESIDENTS WHERE PARTY = partyParam;
COMMIT;
end;
/
4.创建一个需要从函数返回的数据类型
CREATE OR REPLACE TYPE PRESIDENT_TYPE AS OBJECT (
ID NUMBER(10),
NAME VARCHAR2(32),
BIRTHDATE DATE,
PARTY CHAR(1)
);
5.创建一个以PRESIDENT_TYPE为类型的表类型
CREATE OR REPLACE TYPE PRESIDENT_TYPE_TABLE AS TABLE OF PRESIDENT_TYPE;
6.创建函数
CREATE OR REPLACE FUNCTION PRESIDENTS_FUNC (
partyParam CHAR
)
return PRESIDENT_TYPE_TABLE pipelined
is
PRAGMA AUTONOMOUS_TRANSACTION;
TYPE ref0 is REF CURSOR;
myCursor ref0;
out_rec PRESIDENT_TYPE := PRESIDENT_TYPE(0, null, null, null);
BEGIN
LOAD_TEMP_PRESIDENTS(partyParam);
open myCursor for
select
id,
name,
birthdate,
party
from TEMP_PRESIDENTS;
LOOP FETCH myCursor into
out_rec.ID,
out_rec.NAME,
out_rec.BIRTHDATE,
out_rec.PARTY;
EXIT WHEN myCursor%NOTFOUND;
PIPE ROW(out_rec);
END LOOP;
CLOSE myCursor;
RETURN;
END;
相关推荐
### Oracle函数调用存储过程详解 #### 背景与目的 在开发Oracle应用程序时,经常需要使用到存储过程和函数。这两种类型的数据库对象各有优势,可以满足不同的业务需求。有时候,为了更好地组织代码和提高复用性,...
在Java编程中,调用Oracle数据库的存储过程和函数是常见的任务,这通常涉及到JDBC(Java Database Connectivity)API的使用。以下将详细介绍这个过程,包括必要的步骤、使用的类和方法,以及可能遇到的问题和解决...
存储函数创建完后,就如同系统提供的内置函数(如VERSION()),所以调用存储函数的方法也差不多,都是使用SELECT关键字。 【例】 创建一个存储函数,返回Book表中某本书的作者姓名。 存储函数举例 DELIMITER $$ ...
存储过程是一种在数据库中定义并保存起来的可以被调用的子程序。它可以通过一个指定的名字来执行,可以有输入参数和输出参数。在报告中提到了创建了两个存储过程:count_sch5和count_sch2。它们分别用于计算表sch中...
在C语言中,函数调用不使用返回值的情况并不罕见,尤其是在函数设计为修改传入参数的情况下。然而,这种做法可能会影响代码的可读性和错误处理能力。为了编写高质量的代码,程序员应该清楚地定义函数的行为,合理地...
1. **模块化编程**:存储过程类似高级语言中的函数,可以被多个应用程序调用,实现了代码的模块化,提高代码的复用性,减少了重复编写相同功能的代码。 2. **性能优化**:存储过程在创建时即被编译,存储在服务器上...
6. **调用方式**:通常直接在SQL查询中作为函数调用,如`SELECT 函数名称(参数列表) FROM 表名`。 #### 四、示例对比 假设我们有一个需求:根据员工ID获取该员工的总薪水(包括基本工资和奖金)。我们可以使用存储...
在某些复杂的数据处理场景下,我们可能需要调用数据库中的存储过程或函数。本文将详细阐述如何通过JDBC在Java程序中调用存储过程和函数,并提供一个实际的例子。 ### 1. JDBC概述 JDBC是Java API,它提供了统一的...
2. **调用存储过程**:使用`EXECUTE`关键字或直接在PL/SQL块中调用,如: ```sql DECLARE result VARCHAR2(100); BEGIN my_procedure(123, result); DBMS_OUTPUT.PUT_LINE(result); END; ``` **二、Oracle...
- **调用存储过程**:使用`EXECUTE`语句或在PL/SQL块中调用,也可以在DML语句中作为触发器触发。 - **异常处理**:存储过程中可以使用`BEGIN...END`块和异常处理语句,如`RAISE_APPLICATION_ERROR`,在遇到特定...
当你需要在应用程序中调用Oracle函数和存储过程时,通常会使用数据库驱动或ODBC/JDBC。比如在Delphi中(根据提供的文件名`*.dpr`, `*.dfm`等,可能是Delphi项目),你可以使用ADO或Oracle的OCI库。以下是一个Delphi...
在VB(Visual Basic)编程中,模块是存储通用函数、常量和类型定义的地方,而窗体则是用户界面的主要组成部分。本实例通过在模块中定义全局函数并从窗体中调用这些函数来计算利润表,这对于初学者来说是一个很好的...
函数递归调用堆栈分析是指在计算机科学中,函数递归调用时,函数调用自身的过程中,如何使用堆栈来存储变量和参数的过程。堆栈是一种 lasts-in-first-out(LIFO)的数据结构,用于存储函数调用的参数和变量。 在...
在Java应用程序中调用Oracle数据库中的存储过程或函数是一项常见的任务。这不仅能够提高代码的执行效率,还可以有效地管理事务处理,确保数据的一致性和完整性。本文将详细介绍如何在Java环境中通过`...
2. **在其他PL/SQL块中调用**:可以在其他存储过程、函数或者包中调用已有的存储过程。 ```sql DECLARE BEGIN raise_salary(101); END; ``` ### 存储函数 存储函数与存储过程类似,但主要区别在于存储函数...
根据提供的文件信息,本文将详细解析数据库中的存储过程与函数,并深入探讨自主事务(autonomous_transaction)的概念及其在PL/SQL中的应用。 ### 一、存储过程 #### 1. 创建存储过程 存储过程是一种存储在数据库...
本资料包主要涵盖了Oracle中的函数大全、存储过程的语法以及Oracle分区的相关知识,这些都是数据库管理员和开发人员日常工作中不可或缺的部分。下面将对这些主题进行深入的探讨。 **一、Oracle函数大全** Oracle...
在这个主题中,“调用指针函数验证指针存储”是一个关于如何利用指针来调用函数并传递数据的过程。我们将深入探讨这个话题,并结合C语言中的字符串操作,来理解其工作原理。 首先,让我们了解什么是指针函数。在...