Toggle navigation
꿈꾸는 개발자, DBA 커뮤니티 구루비
로그인
:
회원가입
:
공지
:
버그
:
RSS
:
저작권
구루비 커뮤니티는
Tibero Database
로 운영되고 있습니다.
지식창고
Database Q&A
Oracle Database
Study RoadMap
권순용의 DB 이야기
권순용의 데이터모델링
엑시엄이 보는 DB 세상
Basic SQL 강좌
Advanced SQL 강좌
QUIZ로 배우는 SQL
PL/SQL 강좌
Admin 강좌
Oracle10g 강좌
Tuning 강좌
백업&복구 강좌
기타 강좌
Oracle 노하우/팁
Oracle 퀴즈
Oracle 자료실
Community
전체글
공지사항
IT 행사 및 소식
Toad for Oracle
Toad Data Point 강좌
Toad 기본강좌
Toad 소개
Toad 노하우/팁/자료
Toad 커뮤니티
Tibero DB
우리 회사 데이터베이스를 티베로로 변경하기
Tibero5 기본강좌
Tibero4 기본강좌
Tibero 노하우/팁/자료
Tibero TechNet
Tibero6 온라인메뉴얼
Database 북카페
SQL 전문가 가이드
대용량 데이터베이스솔루션 I
대용량 데이터베이스솔루션 II
새로쓴 대용량 데이터베이스솔루션 1
오라클 성능 고도화 원리와 해법 I
오라클 성능 고도화 원리와 해법 II
SQL 튜닝의 시작
Optimizing Oracle Optimizer
비용기반의 오라클 원리
전문가를 위한 오라클 데이터베이스 아키텍처
트러블슈팅 오라클 퍼포먼스(제2판)
오라클 성능 트러블슈팅의 기초
클라우드 데이터베이스 Oracle 12c 가이드
이펙티브 오라클
데이터베이스 설계와 구축(개정판)
관계형 데이터 모델링 프리미엄 가이드 DB구축
Real MariaDB
Database 기타
PostgreSQL 기본강좌
PostgreSQL 노하우/팁/자료
ALTIBASE 기초강좌
ALTIBASE 노하우/팁/자료
ALTIBASE Technical Center
CUBRID 기초강좌
CUBRID 노하우/팁/자료
CUBRID 홈페이지
MySQL 노하우/팁/자료
MySQL 홈페이지
Tag
세미나
세미나 목록
세미나 신청
세미나 Q&A
세미나 후기
세미나 자료실
My 신청세미나
My 취소세미나
My Home
My 정보
My 내공
My 정보수정
내가 즐겨찾는 게시글
내가 즐겨찾는 강좌
내가 작성한 게시글
내가 작성한 댓글
About
커뮤니티 발자취
구루비 소개
내공점수 소개
데이터베이스 질문과 답변
등록
목록
[함수] IF ELSE 문 에러가 뭔지 모르겠습니다.
0
5
2,844
by Vampirejk
[PL/SQL]
[2013.06.09 11:03:29]
<pre class="brush:sql;">
CREATE OR REPLACE FUNCTION RMSPTC."FC_GET_RNUMBER_NO"(P_GUBUN INTEGER)
RETURN VARCHAR2
IS
V_RNUMBER VARCHAR2(10);
BEGIN
IF P_GUBUN = 1 THEN
SELECT 'R'||TO_CHAR(SYSDATE, 'YYMMDD')||LPAD(TO_NUMBER(SUBSTR(R_NUMBERING,8,3))+ 1, 3, '0')
INTO V_RNUMBER
FROM (
SELECT R_NUMBERING, RANK() OVER(ORDER BY R_NUMBERING DESC) AS NUM
FROM IF_RMS_ERP_TTM
)
WHERE NUM = 1;
IF V_RNUMBER IS NULL THEN
V_RNUMBER := 'R'||TO_CHAR(SYSDATE, 'YYMMDD')||'001';
END IF;
DBMS_OUTPUT.PUT_LINE(V_RNUMBER);
RETURN V_RNUMBER;
ELSE IF P_GUBUN = 2 THEN
SELECT 'R'||TO_CHAR(SYSDATE, 'YYMMDD')||LPAD(TO_NUMBER(SUBSTR(R_NUMBERING,8,3))+ 1, 3, '0')
INTO V_RNUMBER
FROM (
SELECT R_NUMBERING, RANK() OVER(ORDER BY R_NUMBERING DESC) AS NUM
FROM IF_RMS_ERP_RTM
)
WHERE NUM = 1;
IF V_RNUMBER IS NULL THEN
V_RNUMBER := 'R'||TO_CHAR(SYSDATE, 'YYMMDD')||'001';
END IF;
DBMS_OUTPUT.PUT_LINE(V_RNUMBER);
RETURN V_RNUMBER;
ELSE IF P_GUBUN = 3 THEN
SELECT 'R'||TO_CHAR(SYSDATE, 'YYMMDD')||LPAD(TO_NUMBER(SUBSTR(R_NUMBERING,8,3))+ 1, 3, '0')
INTO V_RNUMBER
FROM (
SELECT R_NUMBERING, RANK() OVER(ORDER BY R_NUMBERING DESC) AS NUM
FROM IF_RMS_ERP_FIXTM
)
WHERE NUM = 1;
IF V_RNUMBER IS NULL THEN
V_RNUMBER := 'R'||TO_CHAR(SYSDATE, 'YYMMDD')||'001';
END IF;
DBMS_OUTPUT.PUT_LINE(V_RNUMBER);
RETURN V_RNUMBER;
ELSE
V_RNUMBER := 'R'||TO_CHAR(SYSDATE, 'YYMMDD')||'ERR';
RETURN V_RNUMBER;
END IF;
END FC_GET_RNUMBER_NO;
/
</pre>
by Vampirejk
[2013.06.09 11:13:23]
oracle 은 elsif군요 ;;
ㅠㅠ
c++, mfc만 익숙해서 ㅋ
by 아린
[2013.06.09 14:46:41]
위 함수는 당일 채번하는 함수 같은데요.
순번이 연속적으로 나오지는 않을 듯합니다.
6/8일 마지막채번번호 003 => R130608003
6/9일 첫번째채번번호 R130609004 (X) 이 나옴
R130609001 (O) 이 나와야됨
-- 현재 있는 sql
WITH t(r_numbering) AS(
SELECT 'R130608001' FROM dual UNION ALL
SELECT 'R130608002' FROM dual UNION ALL
SELECT 'R130608003' FROM dual
)
SELECT 'R'||TO_CHAR(SYSDATE, 'YYMMDD')
||LPAD(TO_NUMBER(SUBSTR(R_NUMBERING,8,3))+ 1, 3, '0') R_NUMBERING
FROM (SELECT R_NUMBERING, RANK() OVER(ORDER BY R_NUMBERING DESC) AS NUM
FROM t
)
WHERE NUM = 1
-- 수정 sql
SELECT 'R'||TO_CHAR(SYSDATE,'yymmdd')||
NVL(LPAD(SUBSTR(MAX(r_numbering),8)+1,3,'0'),'001') r_numbering
FROM t
WHERE r_numbering LIKE 'R'||TO_CHAR(SYSDATE,'yymmdd')||'%'
-- r_numbering 인덱스가 있다면.
SELECT /*+INDEX_DESC(t idx01_t) */
'R'||TO_CHAR(SYSDATE,'yymmdd')||
NVL(LPAD(SUBSTR(MAX(r_numbering),8)+1,3,'0'),'001') r_numbering
FROM t
WHERE r_numbering LIKE 'R'||TO_CHAR(SYSDATE,'yymmdd')||'%'
AND ROWNUM = 1
by Vampirejk
[2013.06.13 15:14:44]
아린님 감사합니다.
말씀주신대로 당일 채번은 맞지만 다음 일이라고해서 001로 다시 시작은 하지 않아도 되는 케이스예요
R20130601001
R20130602002
...
..
.
이런 식으로 증가해도 괜찮습니다
좋은 답변 감사드립니다.
by 부쉬맨
[2013.06.10 09:45:31]
그냥
if
begin
end;
로쓰면 저렇게 쓸수도있슴 준기상
by Vampirejk
[2013.06.14 10:58:30]
아리가또!
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code(
) 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다.
로그인
,
회원가입
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code(
) 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다.
로그인
,
회원가입