목록SQL (10)
STUDY ROOM
SQL Error [512] [S0001]: 하위 쿼리에서 값을 둘 이상 반환했습니다. 하위 쿼리 앞에 =, !=, = 등이 오거나 하위 쿼리가 하나의 식으로 사용된 경우에는 여러 값을 반환할 수 없습니다. > 하위쿼리가 둘 이상의 데이터를 리턴할 때, 어떤 데이터와 매칭할 지 알 수 없어 발생하는 에러. 이 경우 GROUP BY와 HAVING COUNT를 사용해서 중복값을 확인한 후 해결하거나, 하위 쿼리 앞 =가 아닌 IN,EXIST를 작성해 해결한다. * 그렇다고 꼭 하위 쿼리가 하나의 값만 나와야하는 것은 아니다. 하위쿼리는 단일행 하위쿼리와 다중행 서브쿼리가 있으며, 다중행 하위쿼리의 경우 둘 이상의 값을 반환한다. 다중행 서브쿼리 연산자로는 IN,ANY,ALL 이 존재한다.
: 문자열에서 지정한 식의 시작 위치를 반환 프로시저에서 휴대폰 번호를 입력할 때, 하이픈을 꼭 넣어야하는 경우에 사용하였다. CHARINDEX('-', @IN_HP_NO) IF CHARINDEX('-', @IN_HP_NO) = 0 BEGIN SET @OUT_MSG = '휴대폰번호에는 반드시 - (하이픈) 을 사용하시기 바랍니다.' RETURN END
이 에러는 형이 달라서 발생하는 에러기 때문에, CONVERT를 사용하여 형변환을 해준다. 나는 FLOAT으로 형변환을 함 : CONVERT(FLOAT, 컬럼명) CASE WHEN CONVERT(FLOAT,AVG) >= 3.0 OR CONVERT(FLOAT,AVG) = 0 OR AVG IS NULL THEN '1' ELSE '0' END AS B
Format #QuerySample 날짜 변환 양식 TE ONLY FORMATS 1 select convert(varchar, getdate(), 1) 12/30/06 2 select convert(varchar, getdate(), 2) 06.12.30 3 select convert(varchar, getdate(), 3) 30/12/06 4 select convert(varchar, getdate(), 4) 30.12.06 5 select convert(varchar, getdate(), 5) 30-12-06 6 select convert(varchar, getdate(), 6) 30 Dec 06 7 select convert(varchar, getdate(), 7) Dec 30, 06 10 sele..
CREATE OR REPLACE PROCEDURE 프로시저 이름 (/*인수 이름 IN 데이터타입 */ ,IN_COL1 IN VARCHAR2 --IN : 내부프로그램에 제공 ,IN_COL2 IN VARCHAR2 ,IN_COL3 IN VARCHAR2 ,O_RESULT OUT VARCHAR2 --OUT : 호출자에게 제공, 프로시저 결과코드(-1:초기화오류, -2: 생성오류, 1:정상) ,O_MESSAGE OUT VARCHAR2 --프로시저 결과 메시지 ) IS OUT_CNT NUMBER := 0; -- 변수 선언 BEGIN BEGIN UPDATE문 ; OUT_CNT :=SQL%ROWCOUNT; -- 가장 최근에 수행된 SQL문에 의해 영향을 받은 행의 갯수(정수값) EXCEPTION -- 예외처리 WHEN ..
{call TABEL_NAME ( #{COL_1, mode=IN, jdbcType=VARCHAR, javaType=string} , #{COL_2, mode=IN, jdbcType=VARCHAR, javaType=string} , #{COL_3,mode=IN, jdbcType=VARCHAR, javaType=string} , #{SYSTEM_ID, mode=IN, jdbcType=VARCHAR, javaType=string} , #{SYSTEM_PBIP, mode=IN, jdbcType=VARCHAR, javaType=string} , #{SYSTEM_PROG, mode=IN, jdbcType=VARCHAR, javaType=string} , #{O_RESULT, mode=OUT, jdbcType=VAR..
SELECT A.DEPT_CD --기본키, 외래키 ,B.DEPT_NM ,B.NOTE ,A.SORT_ORD FROM COMM.DEPT_TABLE A LEFT JOIN ( SELECT DEPT_NM , NOTE , DEPT_CD FROM EMP_TABLE WHERE DEPT_ID = #{DEPT_ID} AND REGI_YEAR = #{REGI_YEAR} AND EMP_NO = #{EMP_NO} ) B ON A.DEPT_CD =B.DEPT_CD WHERE A.UP_DEPT_CD ='00001' ORDER BY A.SORT_ORD DEPT_ID,REGI_YEAR,EMP_NO 데이터는 부서테이블(DEPT_TABLE)에 존재하지 않는다. 따라서 LEFT JOIN을 걸 경우 DEPT_ID와 REGI_YEAR, EMP..
: SELECT 한 결과(행집합)을 반복작업해야 할 경우 사용 사용방법 선언 DECLARE CUR1 CURSOR FOR SELECT ... DECLARE CURSOR 문은 커서를 정의한다. for 구문 뒤에 cursor에 삽입시켜줄 select 구문을 적용한다. 커서 열기 OPEN CUR1 -- cur1 커서 열기 FETCH NEXT FROM V_CUR2 INTO @NAME @SEQ -- 커서에서 첫번째 행 값을 읽어 변수에 대입한다. 커서를 이용하여 질의 수행결과 반환되는 여러 행 처리한다. select에 결과 집합을 채운다 반복 하기 WHILE (@@FETCH_STATUS = 0) 패치문이 성공적으로 실행될 때 (행이 모두 없어질때까지 처리) 0값을 준다. @@FETCH_STATUS는 연결의 모든 커..