전체 글 24

[ORACLE] 다른 테이블에서 특정 코드 데이터가 있는지 확인하는 FUNCTION

1. SI 프로젝트 진행시 대개 PL이 ERD를 그릴때 테이블간 FK를 연결해놓는다. 2. 그런데, ERD를 각 개개인이 담당하는 업무별로 작성하다보니 본인의 업무내에서는 FK가 연결이 되는데 타업무와는 연결이 안 되는 경우가 있었다. 3. 예컨대, 회계업무에서 관리하는 거래처코드를 급여업무에서 사용하고 있었는데 거래처코드가 삭제 되어 버린다던지.. (실제로 일어난 일) 4. 위 상황을 구현 단계에서 방어 할 수 있지 않을까 싶다. ※ 구현 스크립트 내의 TF_SPLIT_TO_ROW TABLE FUNCTION은 아래 링크에서 확인 할 수 있다. [ORACLE] 구분자로 분리하여 행으로 반환하는 TABLE FUNCTION 1. 우선 RETURN 받을 ROW의 COLUMN TYPE OBJECT를 생성 컬럼이..

DB/ORACLE 2023.09.27

[JAVA SCRIPT] Number 함수의 동작 방식(객체의 형변환)(nexacro.Decimal에 대한 고찰)

nexacro.Decimal 객체에 대한 고민하다가 Number 함수의 동작 방식을 알게 되어 기록을 남긴다 ㅜㅜ최하단에도 결론이 있지만 결론부터 정리하자면 1. Number 함수는 객체일경우 valueOf(), 그리고 toString() 메소드를 순서대로 호출한 값을 형변환하여 리턴한다.2. if (v instanceof nexacro.Decimal) v = v*1; 처럼 객체에 * 1을 연산해서 형변환을 하는 경우도 valueOf(), toString() 의 존재유무와 순서를 따른다.  nexacro.Decimal에 대해 설명을 하자면... 1. 투비소프트의 nexacro에서 nexacro.Decimal 라는 객체가 있다. 2. 이 객체는 Dataset 컬럼의 타입이 BIGDECIMAL일때, getC..

JAVA SCRIPT/NEXACRO 2023.08.30

[ORACLE] 텍스트 균등분할(균등정렬) FUNCTION

출력물을 개발하는데, 출력물 툴이 html 버전에서는 균등분할을 지원하지 않는다 오피셜 답변은 아래와 같다. ____________________________________________________________________________________ 안녕하세요. 기술개발팀입니다. 텍스트 상자 서식의 경우 WS 뷰어에서만 적용되는 속성으로 HTML 뷰어에서는 제공되지 않는 기능입니다. HTML 뷰어에서 글자 간격을 조절하기 위해서는 공백문자를 사용하여 조절해주셔야 합니다. 감사합니다. ____________________________________________________________________________________ 그리하여 Bing AI 도움을 받았다. DECLARE INPU..

DB/ORACLE 2023.08.18

[MSSQL] Function-Based Index

MSSQL에서는 Function-Based Index라는 개념이 없다고 함. 그러나, 계산된 열(Computed Column)을 사용하여 비슷한 기능을 구현할 수 있다고 함.(Oracle의 virtual 컬럼과 동일한 기능인 듯 싶음) 1. 테이블 생성CREATE TABLE MY_TABLE ( ID INT, FIRST_NAME VARCHAR(20), LAST_NAME VARCHAR(20)); 2. Computed Column 추가 ALTER TABLE [MY_TABLE] ADD FULL_NAME AS CONVERT(NVARCHAR(100), TRIM(FIRST_NAME + ' ' + LAST_NAME)); 3. 인덱스 추가CREATE INDEX FULL_NAME_IDX ON MY_TABL..

DB/MSSQL 2023.07.04

[ORACLE] BETWEEN 주의사항

1. 단일 일자의 데이터가 있고 프로그램 조회조건이 FROM ~ TO로 되어 있다면 BTWEEN을 통해서 간단히 데이터를 추출해 낼 수 있다. WITH TEMP AS ( SELECT '20220711' AS DT FROM DUAL ) SELECT A.DT AS DT FROM TEMP A WHERE A.DT BETWEEN '20220708' AND '20220712' 2-1. 데이터도 FROM ~ TO, 조회조건도 FROM ~ TO로 되어 있다면 어떻게 하면 될까? 우선 BETWEEN을 두번 쓰면 데이터가 나오는 것처럼 보인다. WITH TEMP AS ( SELECT '20220711' AS STT_DT , '20220717' AS END_DT FROM DUAL ) SELECT A.STT_DT AS STT..

DB/ORACLE 2022.07.11

[MSSQL] MAX KEEP

아래와 같은 데이터가 있을 때, 각 JOB별로 가장 많은 SALARY의 NAME을 알고 싶다면 설계자 ☞ 송차장 750 개발자 ☞ 정사원 160 ORACLE은 아래와 같이.. WITH EMP AS ( SELECT '남이사' AS NAME , '설계자' AS JOB , 700 AS SALARY FROM DUAL UNION ALL SELECT '이부장' AS NAME , '설계자' AS JOB , 680 AS SALARY FROM DUAL UNION ALL SELECT '송차장' AS NAME , '설계자' AS JOB , 750 AS SALARY FROM DUAL UNION ALL SELECT '강대리' AS NAME , '개발자' AS JOB , 80 AS SALARY FROM DUAL UNION ALL..

DB/MSSQL 2022.06.30

[MSSQL] EXISTS 주의사항

아래와 같은 SQL 이 있었다. DELETE FROM TB_D WHERE EXISTS ( SELECT 1 FROM TB_M B WHERE B.NO = @NO AND B.PK = PK ) 의도 자체는 TB_M을 이용하여 TB_D의 특정 데이터만 삭제하길 원했던 것으로 보인다. 그러나 실제론 운영서버 TB_D 테이블의 모든 데이터가 삭제 되고 있었다 ㅜ_ㅜ 확인하여 보니 아래 부분이 문제가 되고 있었다. TB_D와 TB_M간의 PK 컬럼을 비교하는 것이 아닌, TB_M과 TB_M간의 PK 컬럼을 비교하고 있었다. DELETE FROM TB_D WHERE EXISTS ( SELECT 1 FROM TB_M B WHERE B.NO = @NO AND B.PK = PK -- 비교 구문이 무조건 TRUE. ) 오라클이..

DB/MSSQL 2022.06.21