sequel pro를 사용해 MySQL을 쓸 때 사용자 지정 함수를 생성하는 방법은 다음과 같다.
DROP FUNCTION 'ufn_board_no'
delimiter ||
CREATE DEFINER=`test`@`%` FUNCTION `ufn_board_no`() RETURNS int(11)
BEGIN
DECLARE v_result INT(11);
SELECT MAX(a.no) + 1 INTO v_result
FROM table_sequense a
WHERE 1=1
AND a.name='board_no';
if v_result is null then
set v_result = 1;
end if;
INSERT INTO TABLE_SEQUENSE (`no`, `name`) VALUES (v_result, 'board_no');
RETURN (v_result);
END;
||
delimiter;
기존에 있는 함수의 syntax를 확인하면 다음과 같다.
CREATE DEFINER=`test`@`%` FUNCTION `ufn_board_no`() RETURNS int(11)
BEGIN
DECLARE v_result INT(11);
SELECT MAX(a.no) + 1 INTO v_result
FROM table_sequense a
WHERE 1=1
AND a.name='board_no';
if v_result is null then
set v_result = 1;
end if;
INSERT INTO TABLE_SEQUENSE (`no`, `name`) VALUES (v_result, 'board_no');
RETURN (v_result);
END;
새로 함수를 생성하려면 Query 탭에서 제일 위의 코드와 같이 다음 코드를 추가해주면 된다.
DROP FUNCTION 'ufn_board_no'
delimiter ||
||
delimiter;
데이터를 Json 객체로 받아와 화면에 JqGrid로 출력하려고 하는데 화면에 아무것도 출력되지 않았다.
DB에 아에 샘플 데이터가 없는 경우에는 다음과 같이 문제 없이 파싱이 잘 됐는데 샘플 데이터가 있는 경우에는 파싱이 되지 않는 것을 크롬 개발자 도구를 통해 확인할 수 있었다.
{"total":1,"record":1,"page":1,"rows":[{"MODI_DATE":"2020-02-02 02:02:02.0","BBS_NO":"1","BBS_DV_CD":"1","REG_DATE":"2020-06-19 00:16:08.0","SUBJECT":"This is Test","DEL_DATE":"2033-03-03 03:03:03.0","CONTENT":"I have a parsing problem"}]}
Json 객체를 보니 TIMESTAMP에 소수점까지 표시되고 있는걸 확인했다.
SQL SELECT문에서 날짜와 관련된 칼럼명을 모두 지우자 다음과 같이 문제없이 파싱이 되었다.
이를 해결하기 위해 mapper.xml에서 SELECT문에서 BBS.MODI_DATE를 다음과 같이 고치자 소수점이 더 이상 출력되지 않았고 파싱도 문제 없이 잘 되었다.
SELECT
DATE_FORMAT(BBS.MODI_DATE,'%Y-%m-%d %H:%i:%s') AS MODI_DATE
( ※ 프로그램을 작동시킨 날짜가 양식의 작성일자에 들어갔으나 ERP의 수금일자가 작성일자가 되도록 수정하였음)
사이트
코드
사용방법
위의 주소로 접속하면 위와 같은 단순한 UI의 사이트에 접속할 수 있다.
전자세금계산서 발행을 위한 웹 사이트로 ERP 프로그램에서 다운로드 받은 엑셀 파일에서 [사업자번호, 수금날짜, 법인명, 대표자, 업태, 종목, 사업장주소, 공급가액, 세액] 항목과 별도의 이메일 파일에서 [사업자번호, 이메일주소]를 사용하여 전자세금계산서 양식을 채운 엑셀 파일을 다운할 수 있다.
모든 파일은 xlsx 파일로 업로드 해야하며 xlsx 파일로 다운로드한다. (xls 파일 불가능)
ERP 파일 (업로드) - [사업자번호, 수금날짜, 법인명, 대표자, 업태, 종목, 사업장주소, 공급가액, 세액] 항목이 반드시 포함되어 있어야함 - 사업자명이나 수금액이 공란일 경우 세금계산서에 작성하지 않음 - 첫번째 행은 공란이어야함(두번째 행에서부터 파일 시작해야함)
이메일 파일 (업로드) - [사업자번호, 이메일주소] 항목이 필요하나 필수는 아님 - 이메일 파일에 정보가 없을 경우 세금계산서 항목에 공란으로 작성
전자세금계산서 파일 (다운로드) - ERP 파일와 이메일 파일을 모두 업로드 한 후 [다운로드] 버튼을 눌러 다운로드 할 수 있음 - 필수 작성 항목인 [전자(세금)계산서종류, 작성일자, 공급받는자 등록번호, 공급받는자 상호, 공급받는자 성명, 공급가액, 세액, 일자1, 공급가액1, 세액1, 영수(01)청구(02)] 항목을 각각 ERP 파일에서 ["01(영수)", 수금일자, 사업자번호, 법인명, 대표자, 공급가액, 세액, 수금일자의 일자, 공급가액, 세액, "01(영수)"] 항목으로 작성 - 필수 작성 항목 이외에도 [공급받는자 사업장주소, 공급받는자 업태,공급받는자 종목] 항목을 각각 ERP 파일의 - [공급받는자 이메일1] 항목은 별도의 이메일 파일에서 사업자번호와 ERP 파일의 사업자번호가 일치하는 이메일 주소로 작성 - [품목1] 항목은 세금계산서 작성 "월(다운로드한 월) + CCTV 용역료"으로 작성
파일이나 파일 내의 항목이 잘못 된 경우 'Internal Server Error'가 발생할 수 있다. 이 경우 새로고침하여 웹사이트에 재접속 한 후에 파일의 상태를 확인한 후 다시 시도하면 된다.
이 프로그램은 특정 회사의 요청으로 개발 되었으며 그로 인해 [전자(세금)계산서 종류, 품목1, 영수(01)청구(02)] 항목은 특정 회사의 요구사항에 맞게 자동 작성함
NAME = prog //NAME 변수에 prog 내용 선언
SRC = source.c //SRC 변수에 파일 명, 여러 파일 명 선언 가능
all : &(NAME) //all 명령
$(NAME): //변수 이름으로 명령어 실행
gcc -o $(NAME) $(SRC) //name 변수 값 이름으로 컴파일 (object(*.o)파일 생성)
fclean: //빌드 과정에서 생성된 파일을 삭제
/bin/rm -f $(NAME)
re: fclean all //파일 삭제 후 다시 all 명령 실행
dt = datetime.datetime.now()
date = dt.strftime("%m월세금계산서").encode('utf-8')
아무리 변수 타입을 확인해봐도 dt는 str 타입이었고, encode('utf-8')을 했더니 바이트 타입이 되어 그대로 파일명이 'b'12_xec_x9b_x94_xec_x84_xb8_xea_xb8_x88_xea_xb3_x84_xec_x82_xb0_xec_x84_x9c''이 되어버렸다.
dt = datetime.datetime.now()
date = dt.strftime("%m월세금계산서").encode('utf-8').decode('iso-8859-1')
encode('utf-8').decode('iso-8859-1') 했더니 문제가 해결되었다.