Oracle 데이터베이스에서 저장 프로시저는 입력 매개변수를 받아들이고 일련의 작업을 수행하여 최종적으로 결과를 반환하는 컴파일되고 재사용 가능한 코드 블록입니다. 결과는 스칼라 값, 임시 테이블이나 커서에 저장된 결과 집합 또는 OUT 매개 변수를 통해 호출자에게 전달된 값일 수 있습니다.
일상 작업에서는 일부 일괄 작업, 장기 실행 작업 또는 복잡한 데이터 처리 논리를 완료하기 위해 저장 프로시저를 작성해야 하는 경우가 많습니다. 그러나 저장 프로시저에서 결과 집합을 반환해야 할 때 종종 몇 가지 문제에 직면하게 됩니다. 결과 집합을 어떻게 출력합니까? 출력 결과 세트의 형식은 무엇입니까? 여러 결과 세트를 처리하는 방법은 무엇입니까?
이러한 문제에 대응하여 이 기사에서는 Oracle 저장 프로시저에서 결과 집합을 반환하는 방법을 소개하고 독자의 이해를 돕기 위해 몇 가지 샘플 코드를 제공합니다.
- 커서를 사용하여 결과 집합 반환
Oracle 저장 프로시저에서는 커서를 사용하여 결과 집합을 반환할 수 있습니다. 구체적으로 REF CURSOR 유형의 변수를 정의한 다음 OPEN-FETCH-CLOSE 작업을 통해 커서에 데이터를 채우고 마지막으로 OUT 매개 변수로 호출자에게 커서를 반환해야 합니다.
다음은 커서를 사용하여 직원 테이블의 모든 레코드를 반환하는 방법을 보여주는 간단한 샘플 코드입니다.
CREATE OR REPLACE PROCEDURE get_all_employees(cur OUT SYS_REFCURSOR) AS BEGIN OPEN cur FOR SELECT * FROM employees; END;
위 코드에서는 get_all_employees
라는 저장 프로시저를 정의했습니다. 반환된 결과 집합을 나타내는 SYS_REFCURSOR
유형의 OUT 매개변수 cur
가 있습니다. 저장 프로시저에서는 OPEN cur FOR
를 사용하여 SELECT 문 실행 결과로 커서를 채웁니다. 마지막으로 저장 프로시저가 끝나면 커서가 자동으로 닫힙니다. get_all_employees
的存储过程,它有一个 OUT 参数 cur
,类型为 SYS_REFCURSOR
,表示返回的结果集。在存储过程中,我们通过 OPEN cur FOR
来将 SELECT 语句执行结果填充到游标中。最后,在存储过程结束时,游标会自动关闭。
在调用存储过程时,我们需要先声明一个与游标类型相同的变量,并将它作为参数传递给存储过程,然后使用 FETCH 语句来从游标中读取数据行:
DECLARE emp_cur SYS_REFCURSOR; emp_rec employees%ROWTYPE; BEGIN get_all_employees(emp_cur); LOOP FETCH emp_cur INTO emp_rec; EXIT WHEN emp_cur%NOTFOUND; -- 处理数据行 END LOOP; CLOSE emp_cur; END;
在上面的代码中,我们先声明了一个名为 emp_cur
的游标变量,然后调用 get_all_employees
存储过程,并将 emp_cur
作为参数传递进去。接下来,我们使用 LOOP 和 FETCH 语句来从游标中逐行读取数据,并在每个循环迭代中用 emp_rec
变量来存储当前行的数据。在读取完所有数据后,我们需要手动关闭游标,以释放资源。
需要注意的是,在以上的代码中,我们使用了 %ROWTYPE
来定义了一个类型为 employees
表的行类型变量 emp_rec
。这样,在 FETCH 语句中,就无需手动为每个字段指定变量,而是可以将整个数据行读取到 emp_rec
变量中。这种方式可以使代码更加简洁和易读。
值得一提的是,在 Oracle 12c 中,我们还可以使用 FETCH BULK COLLECT INTO 语句来一次性将多行数据读取到 PL/SQL 表或者数组变量中,以提高代码效率。由于 BULK COLLECT 的使用较为复杂,本文不再赘述,读者可以自行搜索相关资料深入学习。
- 使用临时表返回结果集
除了游标外,我们还可以使用临时表来返回一个结果集。具体来说,我们可以在存储过程中创建一个临时表,并将数据填充到表中,最后将表名作为 OUT 参数返回给调用者。
以下是一个简单的示例代码,演示如何使用临时表返回员工表中的所有记录:
CREATE OR REPLACE PROCEDURE get_all_employees(tbl_name OUT VARCHAR2) AS BEGIN CREATE GLOBAL TEMPORARY TABLE temp_employees AS SELECT * FROM employees; tbl_name := 'temp_employees'; END;
在上面的代码中,我们先创建了一个名为 temp_employees
的全局临时表,在创建表的同时,将 employees
表中的所有记录填充到表中。接下来,我们将表名 "temp_employees"
通过 OUT 参数 tbl_name
返回给调用者。
在调用存储过程时,我们可以通过表名来访问临时表中的数据:
DECLARE tbl_name VARCHAR2(30); BEGIN get_all_employees(tbl_name); SELECT * FROM TABLE(tbl_name); END;
在上面的代码中,我们声明了一个名为 tbl_name
的变量,用来存储存储过程返回的表名。在调用存储过程 get_all_employees
时,tbl_name
将会被更新为 "temp_employees"
。之后,我们可以通过 SELECT * FROM TABLE(tbl_name)
CREATE OR REPLACE PROCEDURE get_employees_and_stats(cur OUT SYS_REFCURSOR, total_salary OUT NUMBER) AS BEGIN OPEN cur FOR SELECT * FROM employees; SELECT SUM(salary) INTO total_salary FROM employees; END;위 코드에서는 먼저
emp_cur
라는 커서 변수를 선언한 다음 get_all_employees
저장 프로시저를 호출하고 emp_cur
를 매개변수로 전달합니다. 다음으로 LOOP 및 FETCH 문을 사용하여 커서에서 행별로 데이터를 읽고 emp_rec
변수를 사용하여 각 루프 반복에서 현재 행의 데이터를 저장합니다. 모든 데이터를 읽은 후 리소스를 해제하려면 커서를 수동으로 닫아야 합니다. - 위 코드에서는
%ROWTYPE
을 사용하여employees
테이블 코드>에 대한 행 유형 변수emp_rec를 정의했다는 점에 유의하세요. 이렇게 하면 FETCH 문에서 각 필드에 대한 변수를 수동으로 지정하는 대신 전체 데이터 행을 <code>emp_rec
변수로 읽을 수 있습니다. 이 접근 방식을 사용하면 코드가 더 간결해지고 읽기 쉬워집니다.
- 임시 테이블을 사용하여 결과 집합 반환🎜커서 외에도 임시 테이블을 사용하여 결과 집합을 반환할 수도 있습니다. 특히, 저장 프로시저에서 임시 테이블을 만들고, 테이블에 데이터를 채운 다음, 마지막으로 테이블 이름을 호출자에게 OUT 매개 변수로 반환할 수 있습니다. 🎜🎜다음은 임시 테이블을 사용하여 직원 테이블의 모든 레코드를 반환하는 방법을 보여주는 간단한 샘플 코드입니다. 🎜
DECLARE emp_cur SYS_REFCURSOR; emp_rec employees%ROWTYPE; total_salary NUMBER; BEGIN get_employees_and_stats(emp_cur, total_salary); LOOP FETCH emp_cur INTO emp_rec; EXIT WHEN emp_cur%NOTFOUND; -- 处理员工数据行 END LOOP; -- 处理工资汇总数据(total_salary) CLOSE emp_cur; END;🎜위 코드에서는 먼저
temp_employees
테이블이라는 전역 임시 테이블을 만듭니다. , 테이블을 생성하는 동안 employees
테이블의 모든 레코드로 테이블을 채웁니다. 다음으로, OUT 매개변수 tbl_name
을 통해 호출자에게 테이블 이름 "temp_employees"
를 반환합니다. 🎜🎜저장 프로시저를 호출할 때 테이블 이름을 통해 임시 테이블의 데이터에 액세스할 수 있습니다. 🎜rrreee🎜위 코드에서는 tbl_name
이라는 변수를 선언하여 반환된 테이블 이름을 저장했습니다. 저장 프로시저. 저장 프로시저 get_all_employees
가 호출되면 tbl_name
이 "temp_employees"
로 업데이트됩니다. 이후 SELECT * FROM TABLE(tbl_name)
문을 통해 임시 테이블의 데이터에 접근하여 클라이언트에 표시할 수 있습니다. 🎜🎜전역 임시 테이블의 수명 주기는 세션 수준입니다. 즉, 데이터베이스 세션이 종료되면 테이블의 데이터가 자동으로 삭제됩니다. 이렇게 하면 각 세션에 고유한 임시 테이블이 있고 다른 세션 간의 데이터 충돌이 방지됩니다. 🎜🎜🎜여러 결과 세트 반환🎜🎜🎜어떤 경우에는 하나의 저장 프로시저에서 여러 결과 세트를 반환해야 합니다. 예를 들어, 복잡한 쿼리에서는 쿼리 결과와 일부 요약 통계를 모두 반환해야 합니다. Oracle 저장 프로시저에서는 OUT 매개변수와 커서를 사용하여 여러 결과 집합 출력을 얻을 수 있습니다. 🎜🎜다음은 하나의 저장 프로시저에서 두 개의 결과 집합을 반환하는 방법을 보여주는 간단한 예제 코드입니다. 🎜CREATE OR REPLACE PROCEDURE get_employees_and_stats(cur OUT SYS_REFCURSOR, total_salary OUT NUMBER) AS BEGIN OPEN cur FOR SELECT * FROM employees; SELECT SUM(salary) INTO total_salary FROM employees; END;
在上面的代码中,我们定义了一个名为 get_employees_and_stats
的存储过程,它有两个 OUT 参数,分别是一个游标变量 cur
和一个标量变量 total_salary
。在存储过程中,我们先通过 OPEN cur FOR
来填充游标变量 cur
,并将其返回给调用者。接着,我们通过 SELECT SUM(salary) INTO total_salary FROM employees;
语句计算出员工表中工资的总和,并将结果设置为标量变量 total_salary
,同样也将其返回给调用者。
在调用存储过程时,我们需要将两个 OUT 参数作为参数传递给存储过程,并用游标变量来访问查询结果:
DECLARE emp_cur SYS_REFCURSOR; emp_rec employees%ROWTYPE; total_salary NUMBER; BEGIN get_employees_and_stats(emp_cur, total_salary); LOOP FETCH emp_cur INTO emp_rec; EXIT WHEN emp_cur%NOTFOUND; -- 处理员工数据行 END LOOP; -- 处理工资汇总数据(total_salary) CLOSE emp_cur; END;
在上面的代码中,我们声明了一个游标变量 emp_cur
和一个标量变量 total_salary
,用来接收存储过程的返回值。在调用存储过程时,我们将这两个变量作为参数传递给存储过程,并通过 FETCH emp_cur INTO emp_rec
逐行读取结果集中的数据。在读取所有数据之后,我们通过标量变量 total_salary
处理工资汇总数据。最后,我们需要手动关闭游标 emp_cur
以释放资源。
需要注意的是,在返回多个结果集时,我们需要保证每个结果集在调用存储过程之前都执行完毕,否则可能会导致输出数据不完整或者部分数据丢失。因此,我们需要仔细设计存储过程的逻辑,保证数据的完整性和准确性。
总结
在 Oracle 数据库中,存储过程是一个强大的编程工具,可以帮助我们完成一些复杂的数据处理任务。在存储过程中,返回结果集是一个常见的需求,我们可以使用游标或者临时表来实现结果集的输出,也可以通过 OUT 参数来返回多个结果集。在编写存储过程时,我们需要深入理解数据库的工作方式和 PL/SQL 语法,以保证代码的正确性和性能。
위 내용은 oracle 저장 프로시저는 결과 세트를 반환합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

Oracle의 사명은 "사람들이 데이터의 가치를 볼 수 있도록 돕는 것"이며, 그 핵심 가치에는 다음과 같습니다. 1) 고객 우선, 2) 무결성, 3) 혁신 및 4) 팀워크가 포함됩니다. 이 가치는 시장에서 Oracle의 전략적 의사 결정 및 비즈니스 혁신을 안내합니다.

Oracle Database는 데이터 보안 및 고 가용성을 제공하기 위해 SQL 및 객체 관계형 모델을 지원하는 관계형 데이터베이스 관리 시스템입니다. 1. Oracle 데이터베이스의 핵심 기능에는 데이터 저장, 검색, 보안 및 백업 및 복구가 포함됩니다. 2. 작업 원칙에는 다층 저장 구조, MVCC 메커니즘 및 최적화가 포함됩니다. 3. 기본 사용에는 테이블 작성, 데이터 삽입 및 쿼리; 고급 사용에는 저장된 절차 및 트리거가 포함됩니다. 4. 성능 최적화 전략에는 인덱스 사용, 최적화 된 SQL 문 및 메모리 관리가 포함됩니다.

데이터베이스 관리 외에도 Oracle Software는 Javaee 응용 프로그램, 데이터 그리드 및 고성능 컴퓨팅에도 사용됩니다. 1. OracleWeblogicserver는 Javaee 응용 프로그램을 배포하고 관리하는 데 사용됩니다. 2. OracleCoherence는 고성능 데이터 저장 및 캐싱 서비스를 제공합니다. 3. OracleExadata는 고성능 컴퓨팅에 사용됩니다. 이러한 도구를 통해 Oracle은 Enterprise IT 아키텍처에서보다 다양한 역할을 수행 할 수 있습니다.

Oracle은 데이터베이스 회사 일뿐 만 아니라 클라우드 컴퓨팅 및 ERP 시스템의 리더이기도합니다. 1. Oracle은 데이터베이스에서 클라우드 서비스 및 ERP 시스템에 이르기까지 포괄적 인 솔루션을 제공합니다. 2. OracleCloud는 AWS와 Azure에 도전하여 IAA, PAAS 및 SAAS 서비스를 제공합니다. 3. E-BusinessSuite 및 FusionApplications와 같은 Oracle의 ERP 시스템은 기업이 운영을 최적화하는 데 도움이됩니다.

현실 세계의 Oracle 소프트웨어 응용 프로그램에는 전자 상거래 플랫폼 및 제조가 포함됩니다. 1) 전자 상거래 플랫폼에서 Oracledatabase는 사용자 정보를 저장하고 쿼리하는 데 사용됩니다. 2) 제조에서 Oraclee-BusinessSuite는 재고 및 생산 계획을 최적화하는 데 사용됩니다.

Oracle Software가 여러 분야에서 빛나는 이유는 강력한 응용 프로그램과 맞춤형 솔루션입니다. 1) Oracle은 데이터베이스 관리에서 ERP, CRM, SCM에 이르기까지 포괄적 인 솔루션을 제공합니다. 2) 솔루션은 금융, 의료, 제조 등과 같은 업계 특성에 따라 사용자 정의 할 수 있습니다.

MySQL 또는 Oracle을 선택하는 것은 프로젝트 요구 사항에 따라 다릅니다. 1. MySQL은 오픈 소스, 무료 및 사용 편의성으로 인해 중소형 응용 프로그램 및 인터넷 프로젝트에 적합합니다. 2. Oracle은 강력하고 안정적이며 고급 기능으로 인해 대기업의 핵심 비즈니스 시스템에 적합하지만 높은 비용으로 적합합니다.

Oracle의 제품 생태계에는 데이터베이스, 미들웨어 및 클라우드 서비스가 포함됩니다. 1. Oracledatabase는 효율적인 데이터 저장 및 관리를 지원하는 핵심 제품입니다. 2. OracleWeblogicserver와 같은 미들웨어는 다른 시스템에 연결됩니다. 3. OracleCloud는 완전한 클라우드 컴퓨팅 솔루션 세트를 제공합니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

DVWA
DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

WebStorm Mac 버전
유용한 JavaScript 개발 도구

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기

에디트플러스 중국어 크랙 버전
작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

MinGW - Windows용 미니멀리스트 GNU
이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.
