묻고 답해요
131만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결장래쌤과 함께하는 쉽고 재미있는 SQL 이야기
mysql 설치 오류로 학습 불가
강사님 안녕하세요 강의 신청을 했는데, 2일동안 아무리 sql 환경 셋팅을 해보려했는데 제 pc에서는 서버 연결이 안되서 죄송하지만 혹시 환불 해주실 수 있을까요? 자료는 모두 삭제 완료 하였습니다ㅜㅜ 다른 DB 강의를 들어야 할 거 같습니다. 현재 환불 버튼이 없어져서 인프런에 요청 해주시면 정말 감사하겠습니다 ㅜㅜㅜㅜ
-
미해결오라클 성능 분석과 인스턴스 튜닝 핵심 가이드
soe_10g_01.dbf생성중 오류
안녕하세요.swingbench 테이블 스페이스 생성을 위해 CREATE BIGFILE TABLESPACE SOE_10GDATAFILE '/opt/oracle/oradata/ORCL/soe_10g_01.dbf' SIZE 60G AUTOEXTEND ON NEXT 64M MAXSIZE UNLIMITEDEXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M; 실행을 하면 용량 초과로 생성이 안되는데요.어떻게 용량을 늘릴수 있을까요?
-
해결됨실무 환경 그대로 주문게시판 만들기 웹개발 기초 마스터
투비소프트 넥사크로 만기일
투비소프트 만기일이 다가오고 있는데 어떻게 만기일을 늘릴 수 있나요?
-
미해결오라클 성능 분석과 인스턴스 튜닝 핵심 가이드
TOAD 연결 질문드립니다.
안녕하세요.구글 cloud에 oracle19c 설치까지 완료했습니다.그 후에 Toad 설치후 실행시키니 connect창에서 OracleHome이 안나오는데 어떻게 진행을 해야 할까요?
-
미해결개발자를 위한 ORACLE 입문 첫걸음
Connection & Table 생성 강의에서 사용하는 쿼리 출처
Connection & Table 생성 강의에서 사용하는 스키마 출처가 어디인가요? 스프링 강의에서 가져온거라고 하셨는데 이 강의만 듣는 사람은 어디서 구할 수 있을까요?수업자료에서는 없는 거 같습니다.
-
미해결RDBMS Modeling 실습
시 군 구로 나눈 이유가 궁금합니다.
서울특별시 무슨무슨구 무슨무슨 동이면하나의 컬럼이아니라 여러개의 컬럼으로 나누어서 sd,sgg.. 등의 컬럼을 만들어서 하나의 테이블로 가능할것 같은데 이름 하나 때문에 테이블이 3개가 더 생기는 것 같은데 이유가 있을까요?
-
미해결오라클 성능 분석과 인스턴스 튜닝 핵심 가이드
oracl21c로 설치해도 되나요?
oracle cloud 가입이 안되서 참.. oracle에 전화도 해보고 oracle live chat , email 등등 해봤는데요 포기하려고요.. 그래서 oracle 수동 설치를 하려고 합니다.file system 문제 때문에 올려주신 rpm , dbca 방식은 못할거 같아요.. 이왕이면 최신 DB 로 하고 싶어서 19c 말고 21c로 하고자 하는데 학습하는데 문제가 없을까요? 즐거운 명절 되세요~감사합니다
-
미해결Oracle PL/SQL 딱 이만큼..
real_ord 테이블 포렌키 에러 문의
강사님 혹시 sql deveploper ide 툴에서 해당 테이블의 등록된 포렌키 혹은 기본키가 어찌 설정 되어 있는지 보려면 어떻게 확인 할 수 있을까요? dbeaver 에서 컨트롤 + 좌클릭을 누르면 보통 history가 나오는데 해당 real_ord 테이블은 조회가 되지 않습니다..ㅠ 3 번째 real_ord 테이블 포렌키 설정만 해당 에러가 나옵니다 alter table real_ord add CONSTRAINT fr_real_ord_01 FOREIGN key(cst_id) REFERENCES cst_info(cst_id);SQL Error [2275] [42000]: ORA-02275: 참조 제약이 이미 테이블에 존재합니다 alter table real_ord drop CONSTRAINT fr_tmp_ord_01;SQL Error [2443] [72000]: ORA-02443: 존재하지 않는 제약 - 삭제할 수 없습니다
-
미해결Oracle PL/SQL 딱 이만큼..
real_ord 테이블 행 문의 드립니다
안녕하세요 강사님 다음 영상에서 포렌키 등록 후 real_ord 테이블에 값이 없어서 아무것도 조회되지 않습니다찾아보니 해당 영상에서 찾아보니 real_ord 테이블 값이 없는데 다른 영상에 있나요..? select real_ord.ord_no, real_ord.ord_seq, cst_info.name, cst_info.birth, menu.mnu_nm, real_ord.price, real_ord.qty, real_ord.total_pricefrom real_ord, cst_info, menuwhere real_ord.cst_id=cst_info.cst_idand real_ord.mnu_id=menu.mnu_id;
-
미해결지금 당장 리눅스 - 무료 클라우드 서버 활용하기
whois 도메인 연결 관련
whois 도메인 연결 문제안녕하세요. 하다가 막히면 구글 검색 신공으로하고 있습니다.저는 자체 우분투 22.04 서버에서 설치하고 진행하고있습니다. 그리고 whois 도메인 관리에서 A레코드을서버 ip로 연결했습니다.location / {...} 위에 serve_name api.saju.day;위 부분 서버네임은 whois도메인 www.starchemicals.co.kr 위 부분을 적으면 되는 건지...참고로 에러메세지는nginx: [emerg] "server_name" directive is not allowed here in /etc/nginx/sites-enabled/default:9nginx: configuration file /etc/nginx/nginx.conf test failed이렇게 나옵니다.
-
해결됨오라클 성능 분석과 인스턴스 튜닝 핵심 가이드
Hard Parsing의 자원 사용
안녕하세요.SQL 실행 계획의 이해와 Hard Parsing, Soft Parsing의 차이 강의에서 궁금한 점이 있어 질문글을 남깁니다! 12:00 분 경부터 설명해주시는 하드 파싱 부분에서, 하드 파싱이 Library Cache의 Latch를 자주 사용하는것이 문제가 된다 설명해주셨는데요,그럼 하드파싱시에 SQL 파싱, 비용계산, 소스코드 생성과 같은 일련의 과정보다 이런 생성된 정보들을 Library Cache에 올리는것이 훨씬 더 큰 자원을 필요로 하는것일까요?그냥 추상적으로만 알고있었을때는 옵티마이저가 비용을 계산하는 과정이 제일 자원을 많이 잡아먹는 문제일거라고 생각했어서 …ㅎㅎ그리고 latch는 ms 수준으로만 잠긴다고 알고있어, 큰 문제를 유발하지 않을것같은 생각이 막연하게 들어 질문을 드립니다. 모르는 내용 많이 배워가고 있습니다 !! 감사합니다~
-
해결됨오라클 성능 분석과 인스턴스 튜닝 핵심 가이드
Sequential Acess는 HDD상에서도 Block을 Sequential하게 읽나요?
안녕하세요!강의 Section2의 데이터베이스 IO Access 유형 이해 - Sequential 과 Random Access 에서 헷갈리는 점이 있어서 질문을 남깁니다.Radom access 와 Table Full scan(강의 중 9:00~)에 있는 Table은 실제로는 Block 단위로 저장되어 있을텐데, HDD 상에서도 이 Block이 연속으로 저장되어 있는건가요 ??Random acces는 Hard disk 에서 랜덤하게 접근하기 때문에 disk access time이 더 걸린다고 앞에서 말씀해주셨는데, 만약 hdd상에서 block 위치가 여기저기에 있으면 table full scan도 disk access time이 똑같이 많이 걸리지 않을까 ...싶어서 개념이 헷갈립니다.정리하자면 Sequential 이라는 개념이 물리적인 disk에서도 시퀀셜하게 읽는다는건지..? 궁금합니다
-
해결됨실무 환경 그대로 주문게시판 만들기 웹개발 기초 마스터
DBEAVER 설치 오류
안녕하세요. 디비버를 설치하고 orcl3를 클릭하면Loading이 돌고 다음과 같은 문구가 되며 설치가 안됩니다. Got minus one from a read call 구글링 해보니 오라클 리스너 포트가 달라서 그럴 수 있다는데.. TNS포트 쪽에 뭘 변경해야하는게 있는걸까요?혹시 방법을 아시면 구체적으로 설명해주시면 감사하겠습니다.
-
해결됨실무 환경 그대로 주문게시판 만들기 웹개발 기초 마스터
페이징처리 관련 문의 드립니다
안녕하세요. 페이징 처리 관련하여 질문 사항 있어 요청 드립니다.현재 다른 분께서 페이징 처리 관련하여 질문하신 것에 강사님께서 댓글 달아주신 내용 보면서 페이징 처리 구현 중인데 잘 안되서 문의드립니다.구현한 사항은 순서대로 다음과 같습니다.1) OB_001.xfdl(게시판 메인화면) 그리드 하단에 div 만들고id : Div00url : cmm::paging_comm.xfdl기입한 후, 저장하였습니다 2) paging_comm.xfdl cmm 폴더내에 paging_comm.xfdl 파일 생성하여 페이징 처리 관련 컴포넌트 만들고 ID 부여하였습니다. 이후, 공유해주신 링크에 paging_comm.xfdl 페이징 처리 스크립트 전체 복사하여 붙여넣었습니다. 3) UiadapterBoardServiceImpl.java에 page_sample.jsp 스크립트를 java 코드로 변환하여 selectOrdLList 메서드에 코드 추가하였습니다.코드 아래와 같이 첨부드리니 확인 부탁드립니다.( HttpServletRequest request = ;, HttpServletResponse response = 부분에서request.getInputStream()과 response.getOutputStream();에서 "The local variable request may not have been initialized" 동일한 오류 납니다. )public ArrayList<Map<String, Object>> selectOrdList(Map<String, Object> ds_searchList) { UiadapterBoardMapper mapper = sqlSession.getMapper(UiadapterBoardMapper.class); try { String strCharset = "utf-8"; // PlatformRequest 생성 및 데이터 수신 HttpServletRequest request = (HttpServletRequest) request.getInputStream(); //The local variable request may not have been initialized 오류 발생 PlatformRequest platformRequest = new PlatformRequest(request.getInputStream(), PlatformType.CONTENT_TYPE_XML, strCharset); platformRequest.receiveData(); PlatformData inPD = platformRequest.getData(); VariableList inVariableList = inPD.getVariableList(); DataSetList inDataSetList = inPD.getDataSetList(); int iRowCnt = inVariableList.getInt("rowCount"); int iPageNo = inVariableList.getInt("pageNum"); // PlatformResponse 생성 HttpServletResponse response = (HttpServletResponse) response.getOutputStream(); // The local variable request may not have been initialized 오류 발생 PlatformResponse platformResponse = new PlatformResponse(response.getOutputStream(), PlatformType.CONTENT_TYPE_XML, strCharset); PlatformData outPD = new PlatformData(); VariableList outVariableList = new VariableList(); DataSetList outDataSetList = new DataSetList(); try { int iTotalRowCount = 1000; int nPageBlock = (int) Math.ceil((double) iTotalRowCount / iRowCnt); int nStartRow = iRowCnt * (iPageNo - 1); int nEndRow = nStartRow + 30; DataSet outDataSet = new DataSet("output"); outDataSet.addColumn("Column0", DataTypes.INT, 10); outDataSet.addColumn("Column1", DataTypes.STRING, 10); outDataSet.addColumn("Column2", DataTypes.STRING, 10); outDataSet.addColumn("Column3", DataTypes.STRING, 10); outDataSet.addColumn("Column4", DataTypes.STRING, 10); outDataSet.addColumn("Column5", DataTypes.STRING, 10); outDataSet.addColumn("Column6", DataTypes.STRING, 10); outDataSet.addColumn("Column7", DataTypes.STRING, 10); outDataSet.addColumn("Column8", DataTypes.STRING, 10); outDataSet.addColumn("Column9", DataTypes.STRING, 10); int nRow; for (int i = nStartRow; i < nEndRow; i++) { if (i + 1 > 1000) { break; } nRow = outDataSet.newRow(); outDataSet.set(nRow, "Column0", i + 1); outDataSet.set(nRow, "Column1", "test"); outDataSet.set(nRow, "Column2", "test"); outDataSet.set(nRow, "Column3", "test"); outDataSet.set(nRow, "Column4", "test"); outDataSet.set(nRow, "Column5", "test"); outDataSet.set(nRow, "Column6", "test"); outDataSet.set(nRow, "Column7", "test"); outDataSet.set(nRow, "Column8", "test"); outDataSet.set(nRow, "Column9", "test"); } outDataSetList.add(outDataSet); Variable pageBlockCount = new Variable("pageBlockCount"); pageBlockCount.set(nPageBlock); Variable totRowCount = new Variable("totRowCount"); totRowCount.set(iTotalRowCount); outVariableList.add("ErrorCode", 0); outVariableList.add("ErrorMsg", "succ"); outVariableList.add(pageBlockCount); outVariableList.add(totRowCount); } catch (Exception e) { outVariableList.add("ErrorCode", -1); outVariableList.add("ErrorMsg", e.toString()); } finally { outPD.setDataSetList(outDataSetList); outPD.setVariableList(outVariableList); OutputStream out = response.getOutputStream(); platformResponse.setData(outPD); platformResponse.sendData(); } } catch (Exception e) { } return mapper.selectOrdList(ds_searchList); } 4) 기존 주문 조회 쿼리를 안내해주신대로 한번 더 감싸서 수정하였습니다4) 기존 주문 조회 쿼리를 안내해주신대로 한번 더 감싸서 수정하였습니다 SELECT * FROM ( A.ORD_NO AS ORD_NO /*주문번호*/ , FN_CODE_NM('001',A.ORD_STAT_CD) AS ORD_STAT_NM /*주문상태*/ , A.CUST_CD AS CUST_NO /*고객번호*/ , B.CUST_NM AS CUST_NM /*고객명*/ , FN_CODE_NM('002',B.CUST_GBCD) AS CUST_GBCD_NM /*고객구분*/ , B.PHONE AS PHONE /*전화번호*/ , B.ADDR AS ADDR /*주소*/ , C.ITEM_NM AS ITEM_NM /*상품명*/ , A.REG_DT AS REG_DT /*주문일시*/ , 0 AS CHK /*체크박스*/ FROM TB_ORD A LEFT JOIN TB_CUST B ON A.CUST_CD = B.CUST_CD LEFT JOIN TB_ITEM C ON A.ITEM_CD = C.ITEM_CD WHERE 1=1 <if test="ORD_NO != null and ORD_NO !=''"> AND A.ORD_NO = #{ORD_NO} </if> <if test="CUST_NM != null and CUST_NM !=''"> AND B.CUST_NM = #{CUST_NM} </if> <if test="COMP_YN == 'true'"> AND B.CUST_GBCD = 'C' </if> <if test="ORD_STAT_CD != null and ORD_STAT_CD !=''"> AND A.ORD_STAT_CD = #{ORD_STAT_CD} </if> <if test="CUST_GBCD != null and CUST_GBCD !=''"> AND B.CUST_GBCD = #{CUST_GBCD} </if>) A <choose> <when test = "pageNum ==1 "> WHERE <![CDATA[A.RNUM <= #{rowCount}]]> </when> <otherwise> WHERE <![CDATA[A.RNUM > (#{pageNum}-1)*#{rowCount} AND A.RNUM <= #{pageNum}*#{rowCount}]]> </otherwise> </choose> 5) 결과상단과 같은 과정을 통해 구현한 후, 넥사크로에서 런치하여 확인해보니 메인화면 자체가 뜨지 않습니다.혹시 paging_comm.xfdl의 스크립트와 page_sample.jsp 자바 형식으로 변환하여 UiadapterBoardServiceImpl에 구현한 코드 공유해주실 수 있으실까요?그리고 OB_001.xfdl에 페이징 처리 div 만들고 "id : Div00"와 "url : cmm::paging_comm.xfdl" 부여한 후, cmm 폴더에 paging_comm.xfdl 형성하여 페이징 처리 관련 컴포넌트 그리고 id 부여하여 스크립트 복붙하는게 맞는지 확인 부탁드립니다.감사합니다.
-
해결됨실무 환경 그대로 주문게시판 만들기 웹개발 기초 마스터
교재가 어디 있나요?
계속 교재가 있다고 하시는데 .. 어디 있나요? 못찾겠네요.
-
미해결윤재성의 Oracle SQL Database 11g PL/SQL Developer
join 에 in을 사용할때.
직무가 clerk인 사원과 동일한 부서에 근무하고 있는 사원들의 사원번호, 이름 , 입사일을 가져온다.clerk인 사원이 몇번의 부서에서 일 하는지 모른다.```sqlselect empno, ename, hiredate from emp where deptno in (select deptno from emp where job = "clerk")```부서번호를 가져와야 한다.```sqlselect deptno from emp where job = "clerk"에서 결과가 하나이 상인 서브쿼리에 in을 사용하면 서브쿼리의 결과 중 하나라도 일치하면 조건이 참이 된다라고 했는데 부서 번호를 가져와서 여러개의 결과가 있는데 그중 하나라도 있으니까 in을 쓴다는 말인가요? 일반 서브쿼리를 사용 했을때랑 서브쿼리에 in을 사용했을때 그 에러가 정확히 무슨뜻인지 이해가 안갑니다. 일반서브쿼리를 쓰면 값이 1개가 나오고 in은 결과 값이 여러개가 나오는 경우에 in을 쓴다는 건가요?
-
미해결윤재성의 Oracle SQL Database 11g PL/SQL Developer
강의 9:15 초 커미션을 받는 사원 이요
17강 그룹함수에 9:15 에 나오는 커미션을 받는 사원들의 커미션 평균을 구하는 문제 인데요 select trunc(avg(comm))from emp;답은 이해가 가는데 comm이 null 인 사람들을 제외하고 4명의 값을 구하려면 select comm is null, trunc(avg(comm))from emp; 이렇게 해서 null인 사람을 먼저 빼놓고 그후에 avg()함수를 사용해서 평균을 구해도 상관 없나요?
-
미해결윤재성의 Oracle SQL Database 11g PL/SQL Developer
16강 마지막 문제 질문
16강 case문 사용하는 마지막 문제에서-직원들의 급여를 다음과 같이 인상한다.-1000 이하:100%-1000 초과 2000 미만:50%-2000 이상:200%라고 되어있는데select empno, ename, case when sal<=1000 then sal*2 when sal>1000 and sal<=2000 then sal*0.5 when sal>=2000 then sal*3 end from emp;이렇게 알려주셨는데 1000 초과 2000 미만이면 급여 50% 인상이면select empno, ename, case when sal<=1000 then sal*2 when sal>1000 and sal<=2000 then sal*1.5 when sal>=2000 then sal*3 end from emp;코드가 이렇게 되어야 하는거 아닌가요?
-
미해결지금 당장 리눅스 - 무료 클라우드 서버 활용하기
교수님 저희 DB 접속할 때 로컬로 접속해야하는 거 아니에요?
아래 Prod DB 접속하는 거 보면 127.0.0.1 이 아니라 146.56.147.0 같은 호스트의 IP인데이러면 DNS로 나갔다가 다시 저희 DB로 접속할텐데그럼 느려지는 거 아닌가요?! 이 문제 해결하려면 어떻게 해야할까요?127.0.0.1로 했을 때 동작을 안해서요... ㅠ [.env]JWT_SECRET= test2022DEV_DB_HOST= 127.0.0.1DEV_DB_DATABASE= saju_db_devDEV_DB_USERNAME= rootDEV_DB_PASSWORD= 1234DEV_DB_PORT= 3306TEST_DB_HOST= TEST_DB_DATABASE= TEST_DB_USERNAME= TEST_DB_PASSWORD= PROD_DB_HOST= 146.56.147.0PROD_DB_DATABASE= saju_db_prodPROD_DB_USERNAME= test_adminPROD_DB_PASSWORD= test1234SLACK_KEY=
-
해결됨실무 환경 그대로 주문게시판 만들기 웹개발 기초 마스터
주문 등록 및 주문 수정 그리드 업데이트 관련 문의드립니다.(3차 문의)
안녕하세요. 우선 연이어 질문 드려서 정말 죄송합니다. 어제 문의드렸던 내용 안내해주신대로 수정 팝업에 대한 함수 만들어서 구현해보았는데 여전히 수정 후, 게시판 메인화면에 조회버튼을 재클릭해야 수정사항이 반영되고 있습니다. 해결책이 마땅치 않아 재차 관련 내용 문의드리며, OB_001.xfdl l코드 블록 참조하여 문의 드립니다.아직 응용하기에 벅찬 부분이 있어 주문 수정과 함께 주문 등록도 같이 안내해주시면 정말 감사하겠습니다.재차 문의드려 번거롭게 해드려 죄송합니다. 이왕 시작한 것 꼭 구현해보고자 해서 문의드립니다.답변 주시면 정말 감사하겠습니다.감사합니다.(혹시 몰라 OB_001_01.xfdl과 OB_001_02.xfdl 코드블록도 참조드리겠습니다. 글자 수 제한 때매 다음 게시글에 첨부드리니 참조 해주시면 감사하겠습니다.) this.OB_001_onload = function(obj:nexacro.Form,e:nexacro.LoadEventInfo) { //alert("onload 함수 실행"); //OB_001.xfml 화면이 로드될 때, 검색 조건의 주문상태 콤보박스를 초기화 시킨다. //서버에 요청을 하기전에 서버에 전달해줘야할 인자값은 뭐가 있을지 생각해봐야 한다. //주문상태값만을 불러오기 위해선 TB_CD_MST 테이블의 WHERE절에 CD_VAL = '001'이라는 조건을 걸어줘야 한다. //따라서 DATASET에 001이라는 값을 넣어 서버로 전달 //ds_searchCombo 데이터셋을 생성하고 서버로 전달할 인자값 추가. this.ds_searchCombo.clearData();//데이터셋을 초기화 this.ds_searchCombo.addRow();//초기화한 데이터셋에 값을 세팅하기 위해 한줄을 추가 this.ds_searchCombo.setColumn(0,"CD_VAL","001");//추가된 0번째 ROW의 CD_VAL 컬럼에 001이라는 값을 추가 //서버로 데이터 전송 //서버로 데이터를 전송하기 전 필요한 값 세팅 var strSvcId = "selectCommonCode"; //넥사크로에서 트랜잭션을 구분하기 위한 id값, 이 id값은 차후 fncallback함수에 쓰인다. var strSvcUrl = "selectCommonCode.do"; //java Controller에서 요청을 처리 var inData = "ds_search=ds_searchCombo"; //서버로 전송할 데이터셋을 세팅 = 문자 기준으로 왼쪽이 서버, 오른쪽이 프론트 데이터셋 //서버측(.java)에도 = 기준 왼쪽 데이터셋명(ds_search)과 반드시 동일하게 명명해야한다. var outData = "ds_ordStatCombo=ds_commonCode"; //서버로부터 값을 전달받을 데이터셋을 세팅, inData와는 반대로 = 문자 기준으로 왼쪽이 프론트, 오른쪽이 서버 데이터셋 //서버측(.java)에서도 = 기준 오른쪽 데이터셋명(ds_commonCode)와 동일한 이름 사용해야함. var strAvg = ""; //데이터셋이 아닌 값을 보낼 때 쓰는 필드지만 데이터셋을 쓰는 것으로 통일 var callBackFnc = "fnCallback"; //서버로부터 값을 받은 이후 프론트에서 이행해야할 작업 코드를 fnCallback 함수에서 작성 this.gfnTransaction(strSvcId ,strSvcUrl ,inData ,outData ,strAvg ,callBackFnc); }; this.fn_search = function(nPageNo) { //alert("주문리스트 조회"); //1. 조회 버튼을 클릭했을 때, 우리는 db에서 데이터를 조회하여 값을 그리드에 뿌려줘야 한다. //프론트에서 값들을 데이터셋에 생성해서 서버로 보내줘야 한다. //검색조건에 있는 5개 조회 요건들의 맞게 값들을 담아서 서버로 보내줘야 한다. //값들을 주문 리스트 조회 시 where절에 넣어줘야 조건에 알맞은 데이터를 가져올 수 있다. //1. 따라서, 검색 조건들을 ds_searchList라는 데이터셋을 만들어서 값을 세팅하는 작업을 수행해야 한다. //2. 서버에서 가져온 주문리스트를 화면단에 그리드에 보여줘야 한다. // 만들어놓은 그리드 뼈대에 서버에서 보내준 결과인 ds_list 데이터셋을 만들어 바인딩한다. // 바인딩함으로써 그리드가 서버로부터 가져오는 ds_list값을 보여주도록 만든다. //3. this.gfnTransaction 함수를 통해 서버로 데이터를 전송하고 받는 작업 수행 this.ds_searchList.clearData();//ds_searchList 데이터셋 초기화 this.ds_searchList.addRow();//초기화한 데이터셋에 데이터 세팅할 ROW추가 // column별 데이터 추가 // 데이터를 추가하기 위해서 set으로 세팅한다. this.ds_searchList.setColumn(0,"ORD_NO",this.edt_ordNo.value); this.ds_searchList.setColumn(0,"CUST_NM",this.edt_custNm.value); this.ds_searchList.setColumn(0,"COMP_YN",this.chk_cmpYn.value); this.ds_searchList.setColumn(0,"ORD_STAT_CD",this.cbo_ordStat.value); this.ds_searchList.setColumn(0,"CUST_GBCD",this.rdo_custGb.value); trace("ds_searchList::::::: 조회 버튼 클릭시 로그 확인 :::::::::::::::::::::::::"); trace("ORD_NO :" + this.ds_searchList.getColumn(0,"ORD_NO")); trace("CUST_NM :" + this.ds_searchList.getColumn(0,"CUST_NM")); trace("COMP_YN :" + this.ds_searchList.getColumn(0,"COMP_YN")); trace("ORD_STAT_CD :" + this.ds_searchList.getColumn(0,"ORD_STAT_CD")); trace("CUST_GBCD :" + this.ds_searchList.getColumn(0,"CUST_GBCD")); var strSvcId = "selectOrdList"; //넥사크로에서 트랜잭션을 구분하기 위한 id값, 이 id값은 차후 fncallback함수에 쓰인다. var strSvcUrl = "selectOrdList.do"; //java Controller에서 요청을 처리 var inData = "ds_searchList=ds_searchList"; //서버로 전송할 데이터셋을 세팅 = 문자 기준으로 왼쪽이 서버, 오른쪽이 프론트 데이터셋 //서버측(.java)에도 = 기준 왼쪽 데이터셋명(ds_search)과 반드시 동일하게 명명해야한다. var outData = "ds_list=ds_list"; //서버로부터 값을 전달받을 데이터셋을 세팅, inData와는 반대로 = 문자 기준으로 왼쪽이 프론트, 오른쪽이 서버 데이터셋 //서버측(.java)에서도 = 기준 오른쪽 데이터셋명(ds_commonCode)와 동일한 이름 사용해야함. var strAvg = ""; //데이터셋이 아닌 값을 보낼 때 쓰는 필드지만 데이터셋을 쓰는 것으로 통일 var callBackFnc = "fnCallback"; //서버로부터 값을 받은 이후 프론트에서 이행해야할 작업 코드를 fnCallback 함수에서 작성 this.gfnTransaction(strSvcId ,strSvcUrl ,inData ,outData ,strAvg ,callBackFnc); } this.btn_selectOrd_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo) { this.fn_search(); }; this.btn_regOrd_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo) { //alert("주문 등록 팝업 오픈"); var oArg = {}; var oOption = {}; var sPopupCallBack = "fnPopupCallback"; this.gfnOpenPopup("popup","Board::OB_001_01.xfdl",oArg,sPopupCallBack,oOption); }; this.btn_updOrd_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo) { //alert("주문 수정 팝업 오픈"); var ordNo = this.ds_list.getColumn(this.ds_list.rowposition,"ORD_NO"); var oArg = {ordNo:ordNo}; var oOption = {}; var sPopupCallBack = "fnPopupCallback"; this.gfnOpenPopup("popup","Board::OB_001_02.xfdl",oArg,sPopupCallBack,oOption); }; this.btn_delOrd_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo) { //alert("주문 삭제 진행"); var ordNo = this.ds_list.getColumn(this.ds_list.rowposition,"ORD_NO"); //확인창 띄우기 var confirmResult = this.confirm("주문을 삭제하시겠습니까?"); if (confirmResult){ this.ds_delList.clearData(); this.ds_delList.addRow(); this.ds_delList.setColumn(0,"ORD_NO",ordNo); //서버로 deleteOrdList.do 라는 URL 요청에 ds_delList값을 담아 전송 var strSvcId = "deleteOrdList"; //넥사크로에서 트랜잭션을 구분하기 위한 id값, 이 id값은 차후 fncallback함수에 쓰인다. var strSvcUrl = "deleteOrdList.do"; //java Controller에서 요청을 처리 var inData = "ds_delList=ds_delList"; //서버로 전송할 데이터셋을 세팅 = 문자 기준으로 왼쪽이 서버, 오른쪽이 프론트 데이터셋 //서버측(.java)에도 = 기준 왼쪽 데이터셋명(ds_search)과 반드시 동일하게 명명해야한다. var outData = ""; //서버로부터 값을 전달받을 데이터셋을 세팅, inData와는 반대로 = 문자 기준으로 왼쪽이 프론트, 오른쪽이 서버 데이터셋 //서버측(.java)에서도 = 기준 오른쪽 데이터셋명(ds_commonCode)와 동일한 이름 사용해야함. var strAvg = ""; //데이터셋이 아닌 값을 보낼 때 쓰는 필드지만 데이터셋을 쓰는 것으로 통일 var callBackFnc = "fnCallback"; //서버로부터 값을 받은 이후 프론트에서 이행해야할 작업 코드를 fnCallback 함수에서 작성 this.gfnTransaction(strSvcId ,strSvcUrl ,inData ,outData ,strAvg ,callBackFnc); } }; this.grd_ordList_oncelldblclick = function(obj:nexacro.Grid,e:nexacro.GridClickEventInfo) { //그리드 셀 더블 클릭시 실행 }; this.chk_cnpYn_onchanged = function(obj:nexacro.CheckBox,e:nexacro.CheckBoxChangedEventInfo) { //alert("onchanged 함수 실행"); }; this.grd_ordList_onheadclick = function(obj:nexacro.Grid,e:nexacro.GridClickEventInfo) { //아래 속성에서 0은 그리드에서 0번째 column을 의미하며, text값을 가져오라는 의미 var chkVal = obj.getCellProperty("head", 0, "text"); // 0이면 체크 안된 상태이고 1이면 체크된 상태 if(chkVal == "1"){ // 이미 체크된 상태라면 체크 해지로 변환 chkVal = "0"; obj.setCellProperty("head", 0, "text", chkVal); // 프론트에 적용(HEAD 부분) for (var i=0; i<this.ds_list.rowcount; i++) { // 프론트에 적용(ROW 부분) this.ds_list.setColumn(i,"CHK","0"); } }else{ chkVal = "1"; // 체크 안 된 상태라면 체크 표시 obj.setCellProperty("head", 0, "text", chkVal); // 프론트에 적용(HEAD 부분) for(var i=0; i<this.ds_list.rowcount; i++){ // 프론트에 적용(ROW 부분) this.ds_list.setColumn(i,"CHK","1"); } } }; /******************************************************************************************* * CallbackFunction (서버수신 후 후처리 영역) ********************************************************************************************/ this.fnCallback = function(svcID, errorCode, errorMsg) { if(errorCode < 0){ alert("작업 실패 코드: " + errorCode + "\n" + errorMsg) return 0; } switch(svcID) { case "selectCommonCode" : this.ds_ordStatCombo.insertRow(0);//0번째 ROW에 라인 삽입 this.ds_ordStatCombo.setColumn(0,"CD_VAL1",""); this.ds_ordStatCombo.setColumn(0,"CD_NM1","전체"); break; case "deleteOrdList" : alert("주문 삭제 완료 되었습니다."); //조회버튼을 누르는 동작 this.fn_search(); break; } }; this.fnPopupCallback = function (strId, strVal) { trace("strId :" + strId + "strVal :" + strVal); switch(strId) { case "updatePopup" : this.fn_search(); break; } };