Adventure Time - Finn 3
본문 바로가기

전체 글242

PL/SQL: ORA-00942: table or view does not exist 내용: PL/SQL을 사용할 때 종종 ORA-00942 오류가 발생할 수 있습니다. 이 오류는 주로 테이블이나 뷰가 존재하지 않을 때 발생합니다. 이 문제를 해결하기 위해 몇 가지 중요한 단계를 살펴보겠습니다. 테이블 또는 뷰 이름 확인: ORA-00942 오류가 발생할 때 먼저 확인해야 할 것은 사용하려는 테이블 또는 뷰의 이름입니다. 이름을 정확히 입력했는지 다시 한 번 확인해야 합니다. 권한 확인: 때로는 테이블이나 뷰에 대한 적절한 권한이 부여되지 않아 ORA-00942 오류가 발생할 수 있습니다. 필요한 권한이 부여되었는지 확인하고 부여되지 않은 경우 관리자에게 요청하여 권한을 추가해야 합니다. 테이블 또는 뷰의 존재 확인: ORA-00942 오류가 발생할 때 해당 테이블 또는 뷰가 실제로 데이.. 2024. 2. 5.
SQL Error [4082] [42000]: ORA-04082: NEW or OLD references not allowed in table level triggers 오류 코드: ORA-04082 설명: 테이블 레벨 트리거에서 NEW 혹은 OLD 참조는 허용되지 않습니다 원인: 트리거가 테이블 트리거의 "new"또는 "old"값에 액세스 중입니다. 조치: 새로운 참조 나 오래된 참조를 제거하십시오. FOR EACH ROW를 사용하여 로우 레벨 트리거로 변경해야 한다 위 사진을 보면 FOR EACH ROW가 주석안쪽 으로 들어가 있다 수정 2024. 2. 4.
쿼리문에서 1을 사용하는 이유 private static final String SELECT_CNT="SELECT COUNT(1) AS CNT FROM QUESTIONS WHERE Q_ACCESS=?"; 위처럼 쿼리문에서 1을 사용하여 개수를 구하는 모습을 볼 수 있다 SQL에서 COUNT(1)과 COUNT(*)은 대개 동일한 결과를 생성합니다. 이 두 방법은 행의 수를 세는 데 사용됩니다. 일반적으로 성능면에서는 차이가 거의 없다. 그러나 일부 데이터베이스에서는 COUNT(1)이나 COUNT(*)을 사용하는 것과 관련하여 미묘한 차이점이 있을 수 있다. 가독성: COUNT(1)과 COUNT(*)은 동일한 결과를 생성하지만, COUNT(*)은 모든 열을 포함하는 것으로 해석될 수 있습니다. 따라서 코드를 읽는 사람들이 해당 테이블의 .. 2024. 2. 3.
<FORM> submit 시 input type=text 인 모든 공백 확인 submit 시 모든 input type=text 의 공백을 한번에 확인 하고 싶었다 submitBlankCheack.js $(document).ready(function() { console.log('성공'); $('#insertForm').submit(function(event) { // 입력 필드의 값이 공백인지 확인합니다. if (!blankSpace()) { event.preventDefault(); // 폼 제출을 막습니다. alert('입력 필드에 값을 입력하세요.'); // 사용자에게 알립니다. } }); }); blankSpace.js function blankSpace() { var flag = true; // 모든 input 요소의 value 확인하기 $('input[type="tex.. 2024. 2. 2.
유저 탈퇴 트리거 유저가 탈퇴하면 다른 테이블의 유저 로그인 아이디 어트리뷰트의 값을 null로 바꾸는 트리거 제작 CREATE OR REPLACE TRIGGER USER_DELETE_TRIGGER BEFORE DELETE ON TEEMO.MEMBER --삭제가 발생하면 FOR EACH ROW BEGIN --다른 테이블 LOGIN_ID를 null로 UPDATE UPDATE TEEMO.QUESTIONS SET WRITER = NULL WHERE WRITER = :OLD.LOGIN_ID; UPDATE TEEMO.ANSWERS SET LOGIN_ID = NULL WHERE LOGIN_ID = :OLD.LOGIN_ID; UPDATE TEEMO.COMMENTS SET LOGIN_ID = NULL WHERE LOGIN_ID = :O.. 2024. 2. 1.
밸런스 게임 후원 트리거 V1~V3 후원 트리거 만들기 후원이 발생하면 해당 유저가 후원했던 총 후원 금액이 얼마 이상이면 등급업 4등급까지 있을 예정 V1 CREATE OR REPLACE TRIGGER SUM_SUPPORT_TRIGGER BEFORE INSERT ON TEEMO.SUPPORT FOR EACH ROW DECLARE --변수 선언 TOTAL NUMBER; BEGIN IF INSERTING THEN --INTO 변수 대입 SELECT SUM(AMOUNT) INTO TOTAL FROM TEEMO.SUPPORT WHERE LOGIN_ID = :NEW.LOGIN_ID; --SUPPORT에 INSERT된 LOGIN_ID의 AMOUNT의 총액을 가져온다 IF(TOTAL>=0) THEN TOTAL := TOTAL+ :NEW.AMOUNT;.. 2024. 1. 31.
댓글 공백만 입력 했을 때 확인 trim()으로 공백을 제거한뒤 제어문으로 검사를 하여 공백이라면 리턴 하여 댓글 입력을 막는다 2024. 1. 31.
js 파일에서 EL 태그 사용하기 console.log('[로그] 질문 pk'+`${qId}`); ` 기호를 사용하면 사용가능하다 2024. 1. 31.
트리거연습2 오류 구매가 발생하면 , 해당 유저의 지금까지 구매한 총 금액을 저장하기 트리거를 작성중 발생한오류 처음 트리거를 작성할시 CREATE OR REPLACE TRIGGER SUM_BUY_PRICES_TRIGGER AFTER INSERT -- INSERT 발생 이후 ON BUY FOR EACH ROW --BUY 테이블에 -- BUY 테이블에 INSERT 발생 이후 각 ROW에 대하여 --액션을 수행 시켜줘라 BEGIN DECLARE total INT; --변수선언 DECLARE user_id INT DEFAULT NEW.user_id; -- INSERT 발생한 튜플에 user_id를 user_id에 넣어줘라 --NEW --INSERT 된 TUPLE을 가리킴 --UPDATE된 후의 TUPLE을 가리킴 select .. 2024. 1. 30.
트리거 연습 2 문제 ) 구매가 발생하면 , 해당 유저의 지금까지 구매한 총 금액을 저장하기 테이블 CREATE TABLE BUY ( user_id VARCHAR2(300), price NUMBER ); CREATE TABLE USER_BUY_STATS ( user_id VARCHAR2(300), price_sum NUMBER ); 업데이트 연습을 위해 미리 넣어두기 INSERT INTO USER_BUY_STATS (user_id, price_sum) VALUES ('USER', 0); 이벤트 발생 시키기 위한 INSERT INSERT INTO BUY (user_id, price) VALUES ('USER',100); 트리거 작성 CREATE OR REPLACE TRIGGER SUM_BUY_PRICES_TRIGGER B.. 2024. 1. 30.
게임 url로 접근시 qId가 없으면 qId 받아오기 게임.jsp를 url로 접근시 qId가 없으면 게임을 실행시킬수 없기 때문에 qId를 받기위해 컨트롤러로 gamePage.do 액션을 호출해 url로 접근해도 게임이 가능하게 하였다 먼저 페이지 로드시에 확인하기 위해 gameSet.js를 호출하고 gameSet.js $(document).ready(function() { if (document.getElementById('qId').value == '') { console.log('[질문 pk x]'); location.href = 'gamePage.do'; } $("#comment").hide(); $("#next").on("click", function() { //localStorage.setItem("list",${list}); location.h.. 2024. 1. 30.
js 파일로 모듈화 jsp 파일에 아래 처럼 스크립트가 작성되어있었다 하지만 해당 비동기의 찜이 다른 페이지에서도 사용해야하기 때문에 모듈화를 통하여 재사용을 할 수있게 만들어 보았다 game.jsp gameSet /** * */ $(document).ready(function() { if (document.getElementById('qId').value == '') { console.log('[질문 pk x]'); location.href = 'main.do'; } $("#comment").hide(); $("#next").on("click", function() { //localStorage.setItem("list",${list}); location.href = 'gamePage.do'; }); }); gameBut.. 2024. 1. 30.
트리거 연습1 문제) 학생이 등록 될때 등록된 학생의 기록을 남기기 연습 테이블 CREATE TABLE STUDENT ( SCHOOL_NO VARCHAR2(300), CLASS VARCHAR2(300), NAME VARCHAR2(300), AGE VARCHAR2(300), GRADE VARCHAR2(300), SCORE VARCHAR2(300) ); CREATE TABLE STUDENT_HISTORY ( SCHOOL_NO VARCHAR2(300), CLASS VARCHAR2(300), NAME VARCHAR2(300), AGE VARCHAR2(300), GRADE VARCHAR2(300), SCORE VARCHAR2(300) ); 사용할 INSERT INSERT INTO STUDENT (SCHOOL_NO, CLASS,.. 2024. 1. 29.
DBeaver installer를 다운한다 설치를 한다 dbeaver.exe를 실행한다 왼쪽상단 +를 클릭한다 오라클 선택 누르면 해당창이 나온다 오라클 디비 설정대로 적는다 왼쪽 하단에 Test...을 클릭한다 성공시 해당 창이나온다 그리고 끝내기 파일이 생기면 완료~ 2024. 1. 28.
이클립스 트리거 에러 이클립스에서 SQL 파일에서 CREATE OR REPLACE TRIGGER TRRIGER_NAME BEFORE UPDATE ON USERS FOR EACH ROW BEGIN INSERT INTO USERS_LOG (LID, MID, NICKNAME) VALUES ((SELECT NVL(MAX(LID), 0) + 1 FROM USERS_LOG), :OLD.MID, :OLD.NICKNAME); END; 해당 구문을 실행 시켰을때 에러가 발생하였다 Group Exection 오류가 발생하였다 드롭메뉴를 확인해보니 ORA-00900: invalid SQL statement 이 해당에러는 오타 아니면 SQL문 맨뒤에 세미콜론이 붙어있을때 발생한다 그래서 CREATE OR REPLACE TRIGGER TRRIGER.. 2024. 1. 27.
Trigger 트리거는 사전적 의미로 방아쇠를 뜻한다 방아쇠를 당기면 자동으로 총알이 나가듯이 트리거는 테이블에 무슨 일이 일어나면 자동으로 실행된다 즉 데이터에 변경이 생겼을 때 DB에 insert,update,delete가 발생 했을때 자동적으로 실행되는 프로시저를 의미한다 trigger를 정의할 때 알고 있으면 좋은 내용 1. update,insert,delete등을 한번에 감지하도록 설정가능하다 2. row 단위가 아니라 statement 단위로 trigger가 실행될 수 있도록 할 수 있다 FOR EACH ROW - 변경된 튜플에 대해 트리거 실행 - 여러 튜플한번에 업데이트가 되었다면 여러번 실행되게 된다 FOR EACH STATEMENT - 여러 튜플한번에 업데이트가 되면 한 번만 실행된다 3. trigg.. 2024. 1. 26.
MVC 주의사항 MVC M SQL DAO -> 인자로 DTO를 받는다 (결합도를 낮추기 위해) DTO를 임의로 바꾸거나 값을 변경하면 안됨 ==>C 가 DAO 진입전에 전부 세팅해줘야함 V .jsp JAVA가 보이면 안됨 EL JSTL 커스텀태그 내부에서 JSTL,EL 사용가능 C .jsp apple.do AppleAction(C) banana.do bananaPage.do BananaAction(C) banana.jsp (v->c->c->v) 컨트롤러 이동 규칙 1. test.jsp 어떤 페이지를 보여주는 용도의 Action(C)이 존재함 mypagePage.do MypagePageAction(C) 회원의 정보가 필요해~~ mDTO=mDAO.selectOne(mDTO); req.setAttribute("data",mD.. 2024. 1. 25.
input 태그 엔터이벤트( + 만났던 에러사항) input 태그에 댓글을 입력한 후, 버튼을 클릭했을때 댓글이 잘올라갔다 그래서 엔터를 했을때를 구현해보고자 했다 첫번째로 시도한 방법은 폼 태그를 이용해보았다 하지만 폼태그를 이용하면 엔터를 사용했을때 엔터가 먹혔지만 창이 새로고침 되었다 새로고침이 되는 것을 원치 않았기 때문에 다음 방법을 사용해보았다 스크립트 j쿼리를 이용하여 키보드 입력 이벤트가 발생하였을때 엔터를 인식해서 댓글이 입력되게 해보았다 해당 방법을 사용하니 잘 입력이 되는 것을 확인하였다 하지만 엔터를 사용했을때 연속으로 입력되는 문제가 발생하였다 입력이 두번 되는 문제가 발생하여 엔터 연속입력 방지 코드를 넣어보았다 위 처럼 진위형을 사용하여 ajax가 동작중이라면 입력이 안되게 막아보았다 그랬더니 마지막 한글이 남는것을 확인할 수.. 2024. 1. 24.
uncaught syntaxerror: unexpected token ';' 세미 콜론이 있지만 오류가 났었다 해당 에러는 로그인을 하지 않고 해당 페이지를 들어왔을때 var loginId =;이 된다 그래서 해당 에러가 발생하였다 해결방안 EL 태그를 문자열로 만들어 저장하니 해결되었다 2024. 1. 22.
JSTL V .jsp 페이지 JAVA 코드가 단 한줄도 없는 코드 페이지 V : "내 페이지에는 JAVA 없앤다!" V를 V답게 해주는 기능 EL 커스텀 태그 JSTL >> JAVA 코드를 줄여주는 (제거해주는) 역할 .jar가 몇개 필요함 WEB-INF하위에 있는 lib에 jstl.jar, standard.jar을 추가한다 사용하려면 태그를 추가한다 jstl도 비슷하다 ex) ${msg} 출력할 댓글이 없습니다! ${data.rid}번 댓글 ${data.writer}님이 작성 출력할 회원이 없습니다! ${data.name}님 2024. 1. 21.
파일 입출력 자바 입출력과 스트림 프로그램은 데이터를 외부에서 입력받아 처리하고 출력하는 구조로 되어 있습닏 프로그램으로 들어오는 모든 값을 input이라 하고 출력되는 값은 Output이라고 합니다 이를 입출력이라고도 부르며 자바에서는 이불력을 처리하기 위해 별도의 I/O패키지를 제공합니다 여기서 데이터란 자바프로그램엣거 처리할 수 있는 모든 데이터를 의미합니다 디스크상에 존재하는 데이터일 수도 있고 키보드나 마우스와 같은 외부 입력 장치에서 입력되는 데이터일 수도 있으며 인터넷을 통해 전송되는 데이터일 수도 있습니다 1 입출력 스트림의 특징 자바에서는 입출력을 위한 입력 스트림과 출력 스트림이 있습니다 프로그램을 기준으로 데이터가 들어오면 입력 스트림이며 데이터가 나가면 출력 스트림입니다. 입력과 출력이 동시에 .. 2024. 1. 20.
HandlerMapping 스프링 FC(프론트 컨트롤러)에서 HandlerMapper가있다 HM 핸들러 현재 FC는 forward를 받기위해 if를 사용했다 Action action =handler.getAction(commend); ActionForward forward = action.execute(request,response); 핸들러에게 부탁을 해서 받아오겠다 스프링엔 있지만 자바에는 없기때문에 만들어 보았다 class HandlerMapper 생성 HandlerMapper 는 pojo이다 사용자의 요청정보에 알맞는 Controller(==Action 객체)를 반환 private Map mappings; 커맨드에 인해 알맞는 액션을 반환하기위해 map이 가지고있음 하지만 객체 생성이 안되어있기때문에 생성자를 이용해 new.. 2024. 1. 19.
서블릿 - 리스너 외부의 자극,액션, 수행을 감지 -모니터링함 외부의 요청, 자극, 수행, 액션등을 항상 감지(모니터링)하는 것 : 해당 리스너가 언제 반응할지 설정하며 생성함 -> "서블릿 컨테이너가 시작될때" 로 설정함 == 톰캣이 시작될때 실무에서 사용되는 리스너 서블릿 컨테이너가 실행될때 Lifecycle - 90퍼 이상 사용 서블릿컨테이너에 변화가생겼을대 Changes to attributes 세션이 생겼을때 Lifecycle 세션이 변화가 생겼을때 Changes to attributes 리퀘스트가 생겼을때 Lifecycle 리퀘스트가 변화가 생겼을때 Changes to attributes 리스너 생성 -> "서블릿 컨테이너가 시작될때" 로 설정함 == 톰캣이 시작될때 public void contextIniti.. 2024. 1. 18.
서블릿 - 필터 request.setCharacterEncoding("UTF-8"); 매번 넣어줘야했다 그래서 필터를 이용해서 UTF-8을 해주도록했다 필터 설정 생성시 fliter mapping에 대해 어떤요청을 처리할 것인지 정한다 *.do *.jsp 생성하면 서블릿을 상속받았다 그래서 어노테이션이 있음 @WebFilter({ "*.do", "*.jsp" }) 중괄호는 .메서드가 여러개라서 new가 미리 작성되었음 서블릿 컨테이너(톰캣)가 싱글톤 유지 + 제때에 메서드를 수행시켜줌 컨테이너의 역할 == 객체를 생성(new를 대신해줌) 및 관리(싱글톤 유지) 및 수행(.메서드()를해줌) ★ 필터는 타고타고 다닐수있음 뜻 : 다음 필터가 존재한다면 , 그곳으로 이동해라 더이상 수행할 필터가 없다면 원래 수행하던 요청으로.. 2024. 1. 18.
스레드 프로세스와 스레드 동시에 두 가지 이상의 작업을 처리하는 것을 멀티태스킹이라고 합니다 컴퓨터에는 멀티대트킹을 위한 두 가지 도구가 있습니다 프로세스와 스레드 입니다 프로그램은 파일이 존재하지만 아직 메모리에 올라가있지 않은 상태 즉 실행되지 않은 코드의 집합을 말합니다 프로그램을 시행하는 순간 메모리에 올라가고 동작하게 되는데 이 상태의 프로그램을 프로세스라고 합니다 프로그램이 실행되면 메모리에 적재되고 프로세스가 됩니다 프로세스는 독립적으로 메모리에 등록되므로 여러 개의 프로그램을 동시에 실행할 수 있게 됩니다 이러한 프로세스 내부에 존재하면서 실행 흐름을 나타내는 것을 스레드라고 합니다 위에서 언급한 바와 같이 각각의 프로세스들은 메모리에 독립적으로 등록되어 서로 간섭할 수 없습니다 하나의 프로세스안.. 2024. 1. 18.
SQL 작성 --QUESTIONS-- --문제 전체 조회-- SELECT Q.QID, Q.TITLE, C.CATEGORY, COALESCE(S.SID, 0) AS SAVE_SID --코우얼레스 FROM QUESTIONS Q JOIN CATEGORY C ON Q.CATEGORY = C.CGID LEFT JOIN SAVE S ON S.QID = Q.QID AND S.LOGIN_ID = 'user' WHERE Q.Q_ACCESS = 'T'; --COALESCE와 NVL 차이점 --둘다 NULL 값을 처리하기 위한 함수 -- COALESCE : --여러 개의 인수를 받아 첫 번째로 NULL이 아닌 값을 반환합니다 --인수로 전달된 값들 중에서 NULL이 아닌 첫번째 값을 반환하며 모든 값이 NULL인 경우에는 NULL을 반.. 2024. 1. 17.
SQL - ORA-01427: single-row subquery returns more than one row SELECT CASE WHEN EXISTS (SELECT 1 FROM SAVE WHERE LOGIN_ID='user') THEN (SELECT SID FROM SAVE WHERE LOGIN_ID='user') ELSE 0 END AS SAVE_RESULT, Q.QID,Q.TITLE,C.CATEGORY FROM QUESTIONS Q JOIN CATEGORY C ON Q.CATEGORY = C.CGID WHERE Q_ACCESS='T' ORA-01427: single-row subquery returns more than one row ORA-01427 오류는 단일 행 하위쿼리가 여러 개의 행을 반환하는 경우 발생합니다. 주어진 SQL 문에서도 해당 오류가 발생한 이유는 SELECT SID FROM SAVE.. 2024. 1. 17.
버튼 누르면 이미지 변경 / 2024. 1. 16.
JQuery - toggle 버튼을 누르면 이미지가 나오고 다시누르면 사라지는 토글을 만들어보려했다 버튼 위 처럼 로직으로 짜면 복잡하지만 제이쿼리를 사용하여 버튼을 클릭하면 이미지가 보였다가 다시 클릭하면 보이지 않게 하는 간단한 방법은 toggle()메소드를 사용하면 된다 버튼 2024. 1. 16.
JQuery - 클릭이벤트 click() 정적페이지에 로드된 요소에 클릭이벤트를 처리하고자 할때 click()메소드를 자주 사용합니다 주의 : 해당 클릭 이벤트는 동적 처리가 불가능하다 $("#btn").click(function(){ alert('확인 ! :D'); }); on() 주체가 되는 부모속성의 이벤트를 물려받아서 지정 선택자에게 이벤트를 연결할 수 있다 주의 : 잘못 사용하면 정적으로 사용되므로 부모속성을 이용하여 처리한다는 부분을 참고해야한다 $("#btn").on("click",function(){ alert('확인 ! :D'); }); 참고 블로그 https://myhappyman.tistory.com/123 jQuery - 클릭이벤트 동적 처리하기($("").click(), on('click') 차이) 클릭 이.. 2024. 1. 16.