2017년 6월 30일 금요일

오라클 EXCEPTION 진행 문제.

CREATE OR REPLACE PROCEDURE PROCEDURE1
AS

V_CNTR_NO VARCHAR2(13) ;
V_ITEM_CD VARCHAR2(13) ;

BEGIN

DBMS_OUTPUT.PUT_LINE('시작.') ;

BEGIN
SELECT CNTR_NO INTO V_CNTR_NO FROM TB_OD_CNSGN_FEE;
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('계약번호가 없습니다.') ;
WHEN TOO_MANY_ROWS THEN
DBMS_OUTPUT.PUT_LINE('계약번호가 두건 이상입니다.') ;
END;

DBMS_OUTPUT.PUT_LINE('중간.') ;

BEGIN
SELECT ITEM_CD INTO V_ITEM_CD FROM TB_OD_CNSGN_FEE;
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('아이템코드가 없습니다.') ;
WHEN TOO_MANY_ROWS THEN
DBMS_OUTPUT.PUT_LINE('아이템코드가 두건 이상입니다.') ;
END;


DBMS_OUTPUT.PUT_LINE('끝.') ;

EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('TOP EXCEPTION.') ;
END PROCEDURE1;

-------실행결과----------------------------
계약번호가 두건 이상입니다.
아이템코드가 두건 이상입니다.
끝.
프로세스가 종료되었습니다.

보통 EXCEPTION 처리를 위와 같이 중첩 블록을 사용하였다.
문제는 EXCEPTION이 발생하여도 해당 블록만 멈추고 다음으로 계속 진행을 한다.
자바와는 다르다.
그래서 각 블록마다 RAISE_APPLICATION_ERROR를 발생시키거나, 메인 블록만 남기는 방법을 선택해야 한다.

2017년 6월 1일 목요일

우클릭시 text 복사

우클릭시 '복사' DIV 나타나서 클릭시 우클릭 위의 TEXT를 복사하는 스크립트이다.

원했던 건 우클릭하면 바로 복사 하려고 하였으나,
왜 그런지 document.execCommand("copy"); 가 동작하지 않는다.
그래서 click 이벤트로 발생하기 위해 '복사'div 를 생성하였다.
	function copyToClipboard(value, showNotification, notificationText) {
var $temp = $("<input>");
$("body").append($temp);
$temp.val(value).select();
document.execCommand("copy");
$temp.remove();

if (typeof showNotification === 'undefined') {
showNotification = true;
}
if (typeof notificationText === 'undefined') {
notificationText = "Copied to clipboard";
}

var notificationTag = $("div.copy-notification");
if (showNotification && notificationTag.length == 0) {
notificationTag = $("<div/>", { "class": "copy-notification", text: notificationText });
$("body").append(notificationTag);

notificationTag.fadeIn("slow", function () {
setTimeout(function () {
notificationTag.fadeOut("slow", function () {
notificationTag.remove();
});
}, 10);
});
}
}

var copyData = "";
//$(".context-menu-one").on("contextmenu", function(event) {
$("table").on("contextmenu", function(event) {
event.preventDefault();
$("div.custom-menu").remove();
copyData = $.trim(event.target.textContent);

$("<div class='custom-menu'>복사</div>")
.appendTo("body")
.css({top: event.pageY + "px", left: event.pageX + "px"})
.on("click", function(event) {
event.preventDefault();
copyToClipboard(copyData);
copyData = "";
$("div.custom-menu").remove();
});

$("body").click(function (){
$("div.custom-menu").remove();
});
});


 
/* 우측 클릭 '복사' */
.custom-menu {
z-index:1000;
position: absolute;
background-color:#C0C0C0;
border: 1px solid black;
padding: 2px;
border-radius: 5px;
}

.copy-notification {
color: #ffffff;
background-color: rgba(0,0,0,0.8);
padding: 20px;
border-radius: 30px;
position: fixed;
top: 50%;
left: 50%;
width: 150px;
margin-top: -30px;
margin-left: -85px;
display: none;
text-align:center;
}

참조