oracle 저장 프로세스가 결과 집합table 형식으로 되돌아오는 사례
--sys_refcursor와cursor의 장단점 비교
장점 비교
장점 1:
sys_refcursor는 저장 과정에서 매개 변수로table 형식의 구조 집합을 되돌릴 수 있다. (나는 그를table 유형이라고 생각하는데 이해하기 쉽고 사실은 커서 집합이다.)cursor는 저장 과정, 함수, 패키지 등의 실현체에만 사용할 수 있고 매개 변수로 사용할 수 없다.
장점 2:
sys_refcursor는 패키지에 매개 변수를 사용하여 데이터베이스를 대상으로 개방할 수 있습니다.하하.좋아해요.cursor는 안돼.
create or replace procedure p_test(p_cur out sys_refcursor)
as
begin
open p_cur for select * from emp;
end p_test;
declare
p_cur sys_refcursor;
i emp%rowtype;
begin
p_test(p_cur);
loop fetch p_cur
into i;
exit when p_cur%notfound;
DBMS_OUTPUT.PUT_LINE('---'||i.ename||'---'||i.empno);
end loop;
close p_cur;
end;
보충: Oracle 스토리지 프로세스가 select * from table 결과를 반환합니다.1. 먼저 가방 만들기
create or replace package LogOperation is
type listLog is ref cursor;
procedure PCenterExamine_sel(listCenterExamine out listlog,testlist out listLog,numpage in decimal);
end;
2. 패키지의 바디 만들기
create or replace package body LogOperation is
procedure PCenterExamine_sel
(
listCenterExamine out listlog,
testlist out listlog,
numpage in decimal
)
as
begin
open listCenterExamine for select * from Log_CenterExamine;
open testlist for select * from Log_CenterExamine;
end;
end;
3. 프로그램에서 저장 프로세스의 값을 호출합니다
public static DataSet RunProcedureGetDataSet(string storedProcName, OracleParameter[] parameters)
{
string connectionString ="192.168.1.1/db";
using (OracleConnection connection = new OracleConnection(connectionString))
{
DataSet dataSet = new DataSet();
connection.Open();
OracleDataAdapter sqlDA = new OracleDataAdapter();
sqlDA.SelectCommand = BuildQueryCommand(connection, storedProcName, parameters);
sqlDA.Fill(dataSet, "dt");
connection.Close();
return dataSet;
}
}
private static OracleCommand BuildQueryCommand(OracleConnection connection, string storedProcName, IDataParameter[] parameters)
{
OracleCommand command = new OracleCommand(storedProcName, connection);
command.CommandType = CommandType.StoredProcedure;
foreach (OracleParameter parameter in parameters)
{
command.Parameters.Add(parameter);
}
return command;
}
4. 몇 개의 out의refcursor가 있고 변수 ds에는 몇 개의 DataTable를 사용합니다.또한 입력 매개 변수 indecimal도 영향을 받지 않으며 저장 프로세스의 연산에 참가할 수 있습니다
OracleParameter[] paramDic = {
new OracleParameter("listCenterExamine",OracleType.Cursor),
new OracleParameter("testlist",OracleType.Cursor),
new OracleParameter("numpage",OracleType.Int32)};
paramDic[0].Direction = ParameterDirection.Output;
paramDic[1].Direction = ParameterDirection.Output;
paramDic[2].Value = 1;
ds = Model.OracleHelper.RunProcedureGetDataSet("LogOperation.PCenterExamine_sel", paramDic);
이상의 개인적인 경험으로 여러분께 참고가 되었으면 좋겠습니다. 또한 많은 응원 부탁드립니다.만약 잘못이 있거나 완전한 부분을 고려하지 않으신다면 아낌없이 가르침을 주시기 바랍니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
PLSQL을 사용하여 배열에서 가장 큰 요소 인쇄(Oracle Application Express 11g에서)배열에서 가장 큰 요소를 인쇄하는 것은 기본 코드입니다. 여기서는 Oracle Application Express 11g에서 PLSQL을 사용하여 어레이에서 가장 큰 요소를 인쇄하는 방법을 보여드리겠습니다. Orac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.