반응형
저장 프로시저에서 "반품"을 사용할 수 있습니까?
CREATE PROCEDURE Pname(in_Tid IN VARCHAR2,in_IP IN VARCHAR2,outstaticip OUT VARCHAR2,outcount OUT NUMBER)
AS
BEGIN
select STATIC_IP into outstaticip from OP_TTER_MAPPING where TERMINAL_ID = in_Tid;
if in_IP = outstaticip then
return 1;
else
select COUNT(*) into outcount from OP_TTER_MAPPING where DYNAMIC_IP_LOW <= in_IP AND DYNAMIC_IP_HIGH >= in_IP AND TERMINAL_ID = in_Tid;
if outcount = 1 then
return 1;
else
return 0;
end if;
end if;
END;
- 위와 같은 저장 프로시저에서 반품을 사용할 수 있습니까?
- 반품을 사용할 수 있다면, 반품 값을 어떻게 얻을 수 있습니까?
Executesql("begin Pname(----)END")
방법
편집
이제 이렇게 저장 프로시저에서 반품 값을 편집했는데, 제대로 하고 있나요?
CREATE PROCEDURE P_ValidateTIDIP(in_Tid IN VARCHAR2,in_IP IN VARCHAR2,outstaticip OUT VARCHAR2,outcount OUT NUMBER,outretvalue OUT NUMBER)
AS
BEGIN
select STATIC_IP into outstaticip from OP_TTER_MAPPING where TERMINAL_ID = in_Tid;
if in_IP = outstaticip then
outretvalue:=1;
else
select COUNT(*) into outcount from OP_TTER_MAPPING where DYNAMIC_IP_LOW <= in_IP AND DYNAMIC_IP_HIGH >= in_IP AND TERMINAL_ID = in_Tid;
if outcount = 1 then
outretvalue:=1;
else
outretvalue:=0;
end if;
end if;
END;
저장 프로시저에서 다음을 사용하여 값을 반환합니다.OUT
매개 변수만.예제에서 두 개의 변수를 정의한 것처럼,
outstaticip OUT VARCHAR2, outcount OUT NUMBER
반환 값을 out 매개 변수에 할당하기만 하면 됩니다.outstaticip
그리고.outcount
통화 위치에서 다시 액세스할 수 있습니다.여기서 제가 의미하는 것은 저장 프로시저를 호출할 때 이 두 변수도 전달하게 된다는 것입니다. 저장 프로시저 호출 후에는 변수가 반환 값으로 채워집니다.
갖고 싶다면,RETURN value
PL/SQL 호출에서 반환된 다음FUNCTION
이 경우 하나의 변수만 반환 변수로 반환할 수 있습니다.
기능 사용:
CREATE OR REPLACE FUNCTION test_function
RETURN VARCHAR2 IS
BEGIN
RETURN 'This is being returned from a function';
END test_function;
-- IN arguments : you get them. You can modify them locally but caller won't see it
-- IN OUT arguments: initialized by caller, already have a value, you can modify them and the caller will see it
-- OUT arguments: they're reinitialized by the procedure, the caller will see the final value.
CREATE PROCEDURE f (p IN NUMBER, x IN OUT NUMBER, y OUT NUMBER)
IS
BEGIN
x:=x * p;
y:=4 * p;
END;
/
SET SERVEROUTPUT ON
declare
foo number := 30;
bar number := 0;
begin
f(5,foo,bar);
dbms_output.put_line(foo || ' ' || bar);
end;
/
절차 출력은 변수 x 및 y(ans1:= x 및 ans2:=y)에서 각각 150 및 20이 됩니다.
다음에서 빌린 답변: https://stackoverflow.com/a/9484228/1661078
가능하다.
프로시저 내부에서 Return을 사용하면 컨트롤이 프로시저를 호출하는 호출 프로그램으로 전송됩니다.그것은 마치 루프의 출구와 같습니다.
값을 반환하지 않습니다.
CREATE PROCEDURE pr_emp(dept_id IN NUMBER,vv_ename out varchar2 )
AS
v_ename emp%rowtype;
CURSOR c_emp IS
SELECT ename
FROM emp where deptno=dept_id;
BEGIN
OPEN c;
loop
FETCH c_emp INTO v_ename;
return v_ename;
vv_ename := v_ename
exit when c_emp%notfound;
end loop;
CLOSE c_emp;
END pr_emp;
언급URL : https://stackoverflow.com/questions/13225532/is-it-possible-to-use-return-in-stored-procedure
반응형
'programing' 카테고리의 다른 글
SQLChemy와 함께 Oracle 서비스 이름 사용 (0) | 2023.07.21 |
---|---|
HttpServletRequest에서 WebRequest로 캐스팅 (0) | 2023.07.21 |
인덱스별 Python 사전 요소 액세스 (0) | 2023.07.21 |
Oracle에서 모든 외부 키, 제약 조건, 트리거 및 시퀀스가 업데이트되고 기존 데이터가 보존되도록 테이블 이름을 변경하려면 어떻게 해야 합니까? (0) | 2023.07.21 |
일시적으로 auto_now / auto_now_add 사용 안 함 (0) | 2023.07.21 |