문제
이 유형의 기능을 전에 사용했지만 MSSQL이지만 Oracle에서 작동하게 할 수는 없습니까?
DECLARE
MY_TBL NUMBER := 1;
BEGIN
IF(MY_TBL > 0) THEN
SELECT * FROM MY_TBL ORDER BY MY_TBL_ID DESC;
END IF;
END;
내가 갖고 싶은 것은 0으로 설정된 플래그 변수입니다. 이것은 모든 테이블과 선택 문을 하나의 스크립트로 사용하는 간단한 스크립트입니다. 따라서 5 개의 테이블이 있으면 ELSIF 기능을 사용하여 다음과 같이 추가합니다.
DECLARE
MY_TBL1 NUMBER := 1;
MY_TBL2 NUMBER := 1;
BEGIN
IF(MY_TBL1 > 0) THEN
SELECT * FROM MY_TBL1 ORDER BY MY_TBL1_ID DESC;
ELSIF(MY_TBL2 > 0) THEN
SELECT * FROM MY_TBL2 ORDER BY MY_TBL2_ID DESC;
END IF;
END;
등등. 도움을 주셔서 감사합니다
편집하다:
다음은 다음과 같습니다.
VAR result_set REFCURSOR
DECLARE
my_tbl_1 NUMBER := 1;
my_tbl_2 NUMBER := 0;
my_tbl_3 NUMBER := 0;
BEGIN
IF (my_tbl_1 > 0)
THEN
BEGIN
OPEN :result_set FOR
SELECT *
FROM my_tbl_1
ORDER BY my_tbl_1_id DESC;
END;
ELSIF (my_tbl_2 > 0)
THEN
BEGIN
OPEN :result_set FOR
SELECT *
FROM my_tbl_2
ORDER BY my_tbl_2_id DESC;
END;
ELSIF (my_tbl_3 > 0)
THEN
BEGIN
OPEN :result_set FOR
SELECT *
FROM my_tbl_3
ORDER BY my_tbl_3_id DESC;
END;
END IF;
END;
PRINT result_set
해결책
Oracle
저장 프로 시저에서 결과 세트를 반환 할 수 없습니다 SQL Server
하다.
Cliend Side Cursor 변수를 선언하고 그로 돌아갑니다.
커서를 표시합니다 SQL*Plus
:
VAR cur1 REFCURSOR
DECLARE
MY_TBL1 NUMBER := 1;
MY_TBL2 NUMBER := 1;
BEGIN
IF(MY_TBL1 > 0) THEN
BEGIN
OPEN :cur1
FOR
SELECT *
FROM MY_TBL1
ORDER BY
MY_TBL1_ID DESC;
END;
ELSIF (MY_TBL2 > 0) THEN
BEGIN
OPEN :cur1
FOR
SELECT *
FROM MY_TBL2
ORDER BY
MY_TBL2_ID DESC;
END;
END IF;
END;
/
PRINT cur
제휴하지 않습니다 StackOverflow