SELECT MOD(11,4) "Modulus" FROM DUAL;
Modulus
----------
3
This function behaves differently from the classical mathematical modulus function when m is negative. The classical modulus can be expressed using the MOD function with this formula:
m - n * FLOOR(m/n)
The following table illustrates the difference between the MOD function and the classical modulus:
TRANSLATE함수는 from_string에서 각 문자를 to_string안의 대응하는 문자로 치환하여 expr을 반환한다. from_string안에 존재하지 않는 expr안의 문자는 치환되지 않는다. 만약 expr이 문자열이라면, 홑 따옴표로 둘러쌓여야 한다. 인수 from_string는 to_string보다 더 많은 문자를 가질수 있다. 이 경우에, from_string의 마지막에 있는 여분의 문자는 to_string안에 상응하는 문자가 없다. 만약 이 여분의 문자가 char안에 있는 경우, 그러한 문자는 반환값으로부터 삭제된다.
반환값으로부터 from_string안의 모든 문자를 삭제하기 위해서 to_string에 대한 빈 문자열을 사용할수 없다. 오라클 데이터 베이스는 공백 문자열을 NULL로써 해석하고, 이 함수가 NULL 인수를 가지면, NULL을 반환한다.
TRANSLATE함수는 REPLACE함수에 의해 제공되는 관련 함수를 제공한다. REPLACE함수는 단일 문자열로부터 다른 단일 문자열의 치환과 문자열의 삭제를 실행할수 있다. TRANSLATE는 하나의 연산에서 단일 조작으로 복수의 단일 문자를 1대 1로 치환할수 있다.
이 함수는 CLOB데이터를 직접적으로 지원하지 않는다. 그러나 암묵적인 데이터 변환으로 CLOB를 인수로서 전달할수 있다.
다음 문장은 book 타이틀을 파일명으로써 이용되기 위해서 문자열로 변환한다. from_string는 공백,*,/,''(escape문자로써 여분의 apostrophe를 가지는)의 4개의 문자를 포함한다. to_string는 3개의 underscore를 소유한다. from_string의 4번째 문자(')에 대응하는 치환 문자가 없기 때문에, 반환되는 값으로 apostrophe가 삭제되었다.
LTRIM함수는 문자열 char 좌측으로부터 set으로 지정된 모든 문자를 제거한다. 만약 set이 지정되지 않았다면, 디폴트로 한개의 공백이 지정된다. 만약 char이 문자열이라면, 따옴표를 해야만한다. 오라클 데이터 베이스는 char 첫 문자에서부터 스캔을 하여 set으로 지정된 모든 문자를 삭제한다. 지정한 set이외의 문자 발견시 결과를 반환한다.
char과 set의 데이터 형은 CHAR,VARCHAR2,NCHAR,NVARCHAR2,CLOB,NCLOB이다.
LPAD함수는 지정된 자리수 n으로부터 expr1을 채우고,왼편의 남은 공간에 expr1을 채운다. 이 함수는 쿼리의 출력 서식에 대하여 유용하다.
인수 expr1과 인수expr2의 데이터 형식은 CHAR,VARCHAR2,NCHAR,NVARCHAR2,CLOB,NCLOB이다. 반환되는 문자열은 VARCHAR2데이터형이고, 인수 expr1과 같은 문자이다. 인수 n은 숫자 정수 또는 암묵적으로 정수로 변환가능한 값이다.
만약 expr2를 지정하지 않는다면, 기본값은 Blank이다. 만약 expr1이 n보다 크다면, 이 함수는 n에 적합한 expr1의 일부를 반환한다.
인수n은 터미널 스크린에서 표시되는 것과 같은 반환값의 전체 Length이다. 대부분의 문자세트에서, 이것은 반환되는 값에서 문자의 숫자이다. 그러나 multibyte문자세트에서는, 문자열의 표시되는 Length가 문자열에서 문자의 숫자로부터 다를수있다.
The INSTR함수는 string에서 substring를 찾는다. 이 함수는 처음 발생한 문자 string의 위치를 나타내는 정수를 반환한다. INSTR함수는 입력 문자 세트에 의해서 정의된 문자를 이용하여 문자열을 산출한다.
INSTRB함수는 문자 대신에 byte를 사용한다.
INSTRC함수는 완전한 UNICODE문자를 사용한다.
INSTR2함수는 UCS2 코드 포인트를 사용한다.
INSTR4함수는 UCS4 코드 포인트를 사용한다.
position은 오라클 데이터 베이스가 검색을 시작하는 string에서 문자의 위치를 나타내는 0이외의 정수이다. 만약 Position이 음수라면, 오라클은 string의 끝에서 역으로 카운트하여 검색한다.
occurrence은 오라클이 검색하여 string의 발생 횟수(정수)이다. Occurrence값은 양의 정수이다.
string과 substring의 데이터 형은 CHAR,VARCHAR2,NCHAR,NVARCHAR2,CLOB,NCLOB이다. 반환값의 데이터형은 NUMBER이다.
Position과 occurrence는 NUMBER 데이터형이거나, 암묵적으로 NUMBER형으로 변환가능한 데이터형일 필요가 있고, 정수로 변환될 필요가있다. Position 과 occurrence의 기본값은 1이고, 오라클은 string의 처음 문자에서 검색을 시작하여, substring이 처음 나타나는 위치를 검색한다. 반환되는 값은 position의 값과 상관없이 string의 시작에 비례하고, 문자에서 표현된다. 만약 검색이 실패한다면(substring이 string의 position 문자 뒤에 occurrence번 나타나지 않는다면), 반환값은 0이다.
• SQL에서 각각의 변수를 인식하기 위해 '&'를 사용한다. • 숫자에는 인용부호를 사용하지 않지만, 문자와 날짜에 대해서는 단중 인용부호를 사용한다. (예: &deptno, '&ename')
SQL> alter session set nls_language='KOREAN';
세션이 변경되었습니다.
deptno=&dept_no는 입력되는 값을 받아서 where 절에서 deptno=입력값으로 제한하여 select 함
SQL> select empno,ename,job,hiredate,deptno from emp
2 where deptno=&dept_no;
dept_no의 값을 입력하십시오: 10
구 2: where deptno=&dept_no
신 2: where deptno=10
EMPNO ENAME JOB HIREDATE DEPTNO
---------- ---------- --------- -------------- ----------
7782 CLARK MANAGER 09-6월 -81 10
7839 KING PRESIDENT 17-11월-81 10
7934 MILLER CLERK 23-1월 -82 10
대소문자 구분없이 입력받기 위하여 UPPER 함수를 사용하였음
SQL> select * from emp
2 where UPPER(ename)=UPPER('&name');
name의 값을 입력하십시오: SCOTT
구 2: where UPPER(ename)=UPPER('&name')
신 2: where UPPER(ename)=UPPER('SCOTT')
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- -------------- ---------- ---------- ----------
7788 SCOTT ANALYST 7566 19-4월 -87 3000 20
SQL>
Double ampersand(&&)
매번 사용자로부터 입력받지 않고 입력된 변수의 값을 사용하고자 할 경우에 쓰인다. single ampersand와 달리 사용자는 한 번만 데이터 값을 입력하면 된다.
SQL> select *
2 from test
3 where name='&&name';
name의 값을 입력하십시오: 임효선
구 3: where name='&&name'
신 3: where name='임효선'
NAME HIREDATE
---------- ----------------------------------------
임효선 12-1월 -06
SQL> / ☜ 다시 '임효선'을 입력하지 않아도 결과가 출력됨
구 3: where name='&&name'
신 3: where name='임효선'
NAME HIREDATE
---------- ----------------------------------------
임효선 12-1월 -06
SQL> / ☜ 다시 '임효선'을 입력하지 않아도 결과가 출력됨
구 3: where name='&&name'
신 3: where name='임효선'
NAME HIREDATE
---------- ----------------------------------------
임효선 12-1월 -06
SQL>
SQL> select empno,ename,job,&&column_name
2 from emp
3 order by &order_column;
column_name의 값을 입력하십시오: hiredate ☜ 처음에만 입력함
구 1: select empno,ename,job,&&column_name
신 1: select empno,ename,job,hiredate
order_column의 값을 입력하십시오: empno
구 3: order by &order_column
신 3: order by empno
EMPNO ENAME JOB HIREDATE
---------- ---------- --------- ----------------------------------------
7369 SMITH CLERK 17-12월-80
7499 ALLEN SALESMAN 20-2월 -81
7521 WARD SALESMAN 22-2월 -81
7566 JONES MANAGER 02-4월 -81
7654 MARTIN SALESMAN 28-9월 -81
7698 BLAKE MANAGER 01-5월 -81
7782 CLARK MANAGER 09-6월 -81
7788 SCOTT ANALYST 19-4월 -87
7839 KING PRESIDENT 17-11월-81
7844 TURNER SALESMAN 08-9월 -81
7876 ADAMS CLERK 23-5월 -87
7900 JAMES CLERK 03-12월-81
7902 FORD ANALYST 03-12월-81
7934 MILLER CLERK 23-1월 -82
14 개의 행이 선택되었습니다.
SQL> /
구 1: select empno,ename,job,&&column_name ☜ 이후 부터는 column_name은 입력하지 않아도 됨
신 1: select empno,ename,job,hiredate
order_column의 값을 입력하십시오: ename
구 3: order by &order_column
신 3: order by ename
EMPNO ENAME JOB HIREDATE
---------- ---------- --------- ----------------------------------------
7876 ADAMS CLERK 23-5월 -87
7499 ALLEN SALESMAN 20-2월 -81
7698 BLAKE MANAGER 01-5월 -81
7782 CLARK MANAGER 09-6월 -81
7902 FORD ANALYST 03-12월-81
7900 JAMES CLERK 03-12월-81
7566 JONES MANAGER 02-4월 -81
7839 KING PRESIDENT 17-11월-81
7654 MARTIN SALESMAN 28-9월 -81
7934 MILLER CLERK 23-1월 -82
7788 SCOTT ANALYST 19-4월 -87
7369 SMITH CLERK 17-12월-80
7844 TURNER SALESMAN 08-9월 -81
7521 WARD SALESMAN 22-2월 -81
14 개의 행이 선택되었습니다.
SQL>
double ampersand를 사용하여 한번 입력된 값은 고정적으로 사용된다. 이때 고정된 값을 해제하려면, UNDEFINE 컬럼명처럼 하여 해제한다. (예를 들어, &&column_name으로 정의되었다면, undefine column_name처럼 입력하여 해제) 어떤 값이 define 되었는지 확인하기 위해서는 define 명령을 사용하면 define된 값을 확인할 수 있다.
치환변수를 사용한 새로운 행 삽입 치환변수를 사용하여 새로운 행을 삽입할 수 있다. • 문자 변수인 경우 &,&&와 함께 변수명을 단중 인용부호(' ')를 사용해야 한다. • 숫자 변수인 경우에는 &,&&와 함께 변수명만 쓰며, 단중 인용부호(' ')를 사용하지 않아야 한다.
SQL> insert into dept values(
2 &deptno,'&dname','&loc');
deptno의 값을 입력하십시오: 50
dname의 값을 입력하십시오: MANAGER
loc의 값을 입력하십시오: COREA
구 2: &deptno,'&dname','&loc')
신 2: 50,'MANAGER','COREA')
1 개의 행이 만들어졌습니다.
SQL> select * from dept;
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
50 MANAGER COREA
SQL>
SQL> desc test;
이름 널? 유형
----------------------------------------- -------- ----------------------------
NAME VARCHAR2(10)
HIREDATE DATE
SQL> insert into test values(
2 '&name','&hiredate');
name의 값을 입력하십시오: 좋은 친구
hiredate의 값을 입력하십시오: 5-3월-06
구 2: '&name','&hiredate')
신 2: '좋은 친구','5-3월-06')
1 개의 행이 만들어졌습니다.
SQL> /
name의 값을 입력하십시오: 길동무
hiredate의 값을 입력하십시오: 7-4월-06
구 2: '&name','&hiredate')
신 2: '길동무','7-4월-06')
1 개의 행이 만들어졌습니다.
SQL> select * from test;
NAME HIREDATE
---------- ---------------
임효선 12-1월 -06
좋은 친구 05-3월 -06
길동무 07-4월 -06
SQL>
치환변수를 사용한 새로운 행 삽입
치환변수를 사용하여 새로운 행을 삽입할 수 있다. • 문자 변수인 경우 &,&&와 함께 변수명을 단중 인용부호(‘ ’)를 사용해야 한다. • 숫자 변수인 경우에는 &,&&와 함께 변수명만 쓰며, 단중 인용부호(‘ ’)를 사용하지 않아야 한다 . • &&로 변수를 지정하는 경우, define으로 변수를 정의한 것 과 같으므로 undefine으로 해지하여야 한다.
SQL> insert into test values(&id, '&name','&email');
id의 값을 입력하십시오: 4444
name의 값을 입력하십시오: 홍길동
email의 값을 입력하십시오: nugu@arirang.com
구 2: &id, '&name','&email')
신 2: 4444, '홍길동','nugu@arirang.com')
1 개의 행이 만들어졌습니다.
SQL> select * from test;
ID NAME EMAIL
---------- -------------------- -------------------------
4444 홍길동 nugu@arirang.com
SQL> insert into test values(&&id,‘&&name’,‘&&email’);
id의 값을 입력하십시오: 5555
name의 값을 입력하십시오: nugu2
email의 값을 입력하십시오: nugu2@arirang.co.kr
구 1: insert into test values(&&id,‘&&name’,‘&&email’)
신 1: insert into test values(5555,‘nugu2’,‘nugu2@arirang.co.kr’)
1 개의 행이 만들어졌습니다.
SQL> select * from test;
ID NAME EMAIL
---------- -------------------- -------------------------
4444 홍길동 nugu@arirang.com
5555 nugu2 nugu2@arirang.co.kr
SQL> define
DEFINE _DATE = "2009-10-21" (CHAR)
DEFINE _CONNECT_IDENTIFIER = "orcl" (CHAR)
DEFINE _USER = "NUGU" (CHAR)
DEFINE _PRIVILEGE = "" (CHAR)
DEFINE _SQLPLUS_RELEASE = "1101000600" (CHAR)
DEFINE _EDITOR = "vi" (CHAR)
DEFINE _O_VERSION = "Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit Product
ion
With the Partitioning, OLAP, Data Mining and Real Application Testing options" (CHAR)
DEFINE _O_RELEASE = "1101000600" (CHAR)
SQL> insert into test values(&&id, '&&name','&&email');
id의 값을 입력하십시오: 3333
name의 값을 입력하십시오: 좋은이
email의 값을 입력하십시오: aaa@arirang.com
구 1: insert into test values(&&id, '&&name','&&email')
신 1: insert into test values(3333, '좋은이','aaa@arirang.com')
1 개의 행이 만들어졌습니다.
SQL> define
DEFINE _DATE = "2009-10-21" (CHAR)
DEFINE _CONNECT_IDENTIFIER = "orcl" (CHAR)
DEFINE _USER = "NUGU" (CHAR)
DEFINE _PRIVILEGE = "" (CHAR)
DEFINE _SQLPLUS_RELEASE = "1101000600" (CHAR)
DEFINE _EDITOR = "vi" (CHAR)
DEFINE _O_VERSION = "Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit Product
ion
With the Partitioning, OLAP, Data Mining and Real Application Testing options" (CHAR)
DEFINE _O_RELEASE = "1101000600" (CHAR)
DEFINE ID = "3333" (CHAR)
DEFINE NAME = "좋은이" (CHAR)
DEFINE EMAIL = "aaa@arirang.com" (CHAR)
SQL>