300x250
300x250

알고리즘 문제를 풀다보면 vector에 값을 2개씩 넣고싶을때가 생기는데여 map을 써도 되겠지만 벡터가 좀더 친숙할 때가 있더라구여

#include <iostream>
#include <vector>

using namespace std;

int main()
{
	vector <pair<int, int>> vec;

	int num1, num2;
	int cnt;
	cin >> cnt;
	for (int i = 0; i < cnt; i++)
	{
		cin >> num1;
		cin >> num2;
		vec.push_back(make_pair(num1, num2));
	}

	for (int i = 0; i < cnt; i++)
	{
		cout << "vec[" << i << "].first : " << vec[i].first << endl;
		cout << "vec[" << i << "].second : " << vec[i].second << endl;
	}
}

 

300x250
300x250

    class productDTO
    {

        private string name;

 

        public string GetName()
        {
            return name;
        }
        public void SetName(string name)
        {
            this.name = name;
        }

    }


        private void button1_Click(object sender, EventArgs e)
        {
            productDTO productDTO = new productDTO();

            productDTO.SetName("컴퓨터");

            MessageBox.Show(productDTO.GetName());


        }
    

 

 

평소에난 get, set을 이렇게 사용 했는데 C# 에서는 좀더 편하게 사용이 가능했다.

 

    class productDTO 
    {

        private string name;

 

        public string Name
        {
            get
            {
                return name;
            }
            set
            {
                name = value;
            }
        }

    }

 

        private void button1_Click(object sender, EventArgs e) 
        { 
            productDTO productDTO = new productDTO(); 

 

            productDTO.Name = "컴퓨터";
            MessageBox.Show(productDTO.Name);
        } 

 

 

 

300x250
300x250

1. 중복된 값 제거하고 출력

SELECT DISTINCT [컬럼명]

FROM [테이블명];

 

예) SELECT DISTINCT DEPTNO

FROM EMP;

 

2. 원하는 조건 출력하기

SELECT [컬럼명]

FROM [테이블명]

WHERE [조건];

 

예)

SELECT *

FROM EMP

WHERE SAL = 800;

 

SELECT *

FROM EMP

WHERE JOB ='영업직';

문자 조회할 때는 영어 대소문자를 구분하고 작은따옴표를 사용한다.

 

SELECT *

FROM EMP

WHERE hiredate ='80/12/17';

날짜 조회하기

 

3. 기본 산술 연산자 사용하기

위데이터 에서 연봉 구하기

 

SELECT NAME,PAY, PAY*12

FROM MYEMP

 

4. 다양한 연산자

연산자 종류

설명

=

비교 대상에서 같은 조건을 검색

!=, <>

비교 대상에서 같지 않은 조건을 검색

>

비교 대상에서 큰 조건을 검색

>=

비교 대상에서 크거나 같은 조건을 검색

<

비교 대상에서 작은 조건을 검색

<=

비교 대상에서 작거나 같은 조건을 검색

BETWEEN a AND b

A와 B사이에 있는 범위 값을 모두 검색

IN(a,b,c)

A이거나 B이거나 C인 조건을 검색

LIKE

특정 패턴을 가지고 있는 조건을 검색

IS NULL/IS NOT NULL

NULL 값을 검색 / NULL이 아닌 값을 검색

A AND B

A 조건과 B 조건을 모두 만족하는 값만 검색

A OR B

A 조건이나 B 조건 중 한 가지라도 만족하는 값을 검색

NOT A

A가 아닌 조건을 검색

 

- BETWEEN 연산자로 PAY가 20000000 ~ 30000000 사이인 사람들의 이름과 PAY를 검색해보자.

SELECT NAME, PAY

FROM MYEMP

WHERE PAY BETWEEN 20000000 AND 30000000;

 

같은 결과로 AND 연산자로도 검색이 가능하다.

SELECT NAME, PAY

FROM MYEMP

WHERE PAY >= 20000000

AND PAY <= 30000000;

 

특정 구간의 값을 검색할 때 가급적 AND 연산자를 권장한다고 한다.

 

예)

- IN 연산자로 PAY가 20000000 이거나 30000000인 사람 찾기

SELECT NAME, PAY

FROM MYEMP

WHERE PAY IN(20000000,30000000);

 

예)

- LIKE 연산자로 이름이 'D'로 시작하는사람을 검색해보자.

SELECT NAME

FROM MYEMP

WHERE NAME LIKE 'D%';

 

5. 정렬하기 - ORDER BY

 

- 한글 : 가, 나, 다 ...

- 영어 : A, B, C ...

- 숫자 : 1, 2, 3 ...

- 날짜 : 오래된 날짜부터 최근 날짜로 정렬

 

예) PAY순으로 오름차순 정렬

SELECT * FROM MYEMP

ORDER BY PAY ASC;

 

예) PAY순으로 내림차순 정렬

SELECT * FROM MYEMP

ORDER BY PAY DESC;

300x250
300x250

내프로그램 으로 카카오톡 메시지를 보낼일이 있어 찾아보니 다음과 같은 코드가 있었다.

 

        [System.Runtime.InteropServices.DllImport("User32", EntryPoint = "FindWindow")] 
        private static extern IntPtr FindWindow(string lpClassName, string lpWindowName); 

        [System.Runtime.InteropServices.DllImport("User32", EntryPoint = "FindWindowEx")] 
        public static extern IntPtr FindWindowEx(IntPtr hWnd1, IntPtr hWnd2, string lpsz1, string lpsz2); 

        [DllImport("user32.dll")] 
        public static extern int SendMessage(IntPtr hwnd, int wMsg, int wParam, string lParam); 

        [DllImport("user32.dll")] 
        public static extern uint PostMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);

 

        private void sendMsg(string msg) 
        { 
            IntPtr hd01 = kakaoFindWindow(null, "대화방제목"); 
            if (hd01 != IntPtr.Zero) 
            { 

                IntPtr hd03 = kakaoFindWindowEx(hd01, IntPtr.Zero, "RichEdit20W", ""); 

                SendMessage(hd03, 0x000c, 0, msg); 
                PostMessage(hd03, 0x0100, 0xD, 0x1C001); 
            } 
        }

 

이렇게 하면 전송은 되지만 문제가 하나 있었다.

 

처음에는 잘보내지는데 대화방을 최소화 했다가 다시 열면 전송이 이상하게 되는 것이다.

정확한 이유를 알아보기는 귀찮아서.. 꼼수를 썼다.

 

 

        [System.Runtime.InteropServices.DllImport("User32", EntryPoint = "FindWindow")]
        private static extern IntPtr kakaoFindWindow(string lpClassName, string lpWindowName);

        [System.Runtime.InteropServices.DllImport("User32", EntryPoint = "FindWindowEx")]
        public static extern IntPtr kakaoFindWindowEx(IntPtr hWnd1, IntPtr hWnd2, string lpsz1, string lpsz2);

        [DllImport("user32.dll")]
        public static extern int SendMessage(IntPtr hwnd, int wMsg, int wParam, string lParam);

        [DllImport("user32.dll")]
        public static extern uint PostMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);

 

        private void sendMsg(string msg)
        {
            IntPtr hd01 = kakaoFindWindow(null, "대화방제목");
            if (hd01 != IntPtr.Zero)
            {

                IntPtr hd03 = kakaoFindWindowEx(hd01, IntPtr.Zero, "RichEdit20W", "");

                SendMessage(hd03, 0x000c, 0, msg);
                PostMessage(hd03, 0x0100, 0xD, 0x1C001);
                Thread.Sleep(100);
                PostMessage(hd03, 0x0100, 0xD, 0x1C001);
            }
        }

 

PostMessage(hd03, 0x0100, 0xD, 0x1C001);  // 이부분이 엔터 메시지 인거같다.

 

 

postmessage를 바로 쓰면 입력이 안되길래 sleep으로 딜레이를 살짝줬더니 잘된다.

 

잡담을 하자면 난 카카오톡메시지 보내는 프로그램만 만들거가 아니기 때문에 FindWindow를 여러번 사용해야 하는데 

        [System.Runtime.InteropServices.DllImport("User32", EntryPoint = "FindWindow")] 
        private static extern IntPtr "변수명"(string lpClassName, string lpWindowName); 

빨간색 부분을 바꿔서 사용 가능한거 같다. 이런식으로 여러개의 findwindow를 사용할수 있을듯.

300x250
300x250

실험용으로 만든 계정을 삭제할려고 했는데 삭제가 안된다.

오류코드는 ORA-28014: 관리 사용자를 삭제할 수 없습니다.

검색 해보니까

alter session set "_oracle_script"=true;

를 입력하고 삭제하면 된다고한다.

잘된다.

300x250
300x250

여러개의 컬럼을 마치 하나의 컬럼인 것처럼 연결해서 출력해야 하는 경우가 있다. 이때 사용할 수 있는 연산자가 연결 연산자이다.

위 데이터에서 이름, 직업, 급여만 보고싶다면 다음과 같이 입력하면 된다.

SELECTG ENAME, JOB, SAL

FROM EMP;

이때 3개의 컬럼 데이터를 1개의 컬럼처럼 보이게 쓰는게 연결 연산자이다.

SELECT ENAME || '/' || JOB || '/' || SAL "이름/직업/급여/"

FROM EMP;

|| 파이프 연산자2개를 이어서 쓰는거같은데

재밌는 기능 인거같다.

300x250
300x250

 

@경로\\[파일이름]

예) @c:\\temp\\test_data.sql

300x250
300x250

유저 생성중 [ORA-65096 : 공통 사용자 또는 롤 이름이 부적합합니다.] 이런 오류가 뜨는 경우가 있어요.

찾아보니 오라클12c로 넘어 오면서 계정이름 앞에 c## 을 붙여줘야 가능하다고 하네요.

예)CREATE USER c##SCOTT IDENTIFIED BY TIGER;

이거 귀찮으신 분들은

ALTER SESSION SET"_ORACLE_SCRIPT"=true;

하면 c##안붙여도 됩니다.

300x250
300x250

1. 오라클 유저 만들기

CREATE USER [유저이름]

IDENTIFIED BY [비밀번호];

예) create user scott identified by tiger;

2. 유저에 권한 주기

GRANT CONNECT, RESOURCE, DBA TO [유저이름]; // (모든 권한 주기)

예) GRANT CONNECT, RESOURCE, DBA TO SCOTT;

3. 유저 삭제하기

DROP USER [유저이름] CASCADE;

예) DROP USER SCOTT CASCADE;

4.유저 비밀번호 바꾸기

ALTER USER [유저이름] IDENTIFIED BY [새비밀번호];

300x250
300x250