SQL> alter session set nls_language = american;

SQL> alter session set nls_date_format = 'YYYY-MM-DD HH24:MI:SS';


--> format elements: YYYY, MM, DD, HH24, MI, SS 등등



SQL> select * from emp;

SQL> select sysdate from dual;


SQL> alter session set nls_date_format='DD/MON-RR HH:MI [AM]';


SQL> select * from emp;

SQL> select sysdate from dual;


SQL> alter session set nls_date_format='DD-MONTH-RR HH:MI:SS.SSSSS     PM';

SQL> select sysdate from dual;


SQL> alter session set nls_date_format='DD-month-rr';

SQL> select sysdate from dual;


SQL> alter session set nls_date_format='DD-mon-RR';

SQL> select sysdate from dual;

Dual Table 
    
    : Database 가 생생되면서 자동으로 생성되는 테이블로
      Sys 유저 소유의 테이블이나, 모든 유저가 Access 가능하다.
      DUMMY(Varchar2(1)) 칼럼 하나로 구성되어 있으며, 
      항상 하나의 로우만 간직 하고 있다.
      원래, 오라클 Internal Processing 을 위해서 사용된 테이블이다.
      일반 유저는 조회는 가능하다. DML 은 불가능하다.
      Sys 유저만 조회 및 DML 이 가능하다.


        SQL> desc dual 

SQL> desc sys.dual


SQL> select * from dual;


D

-

X


SQL> select 4770*123+5345/546

    from dual;


SQL> select round(45.995, 2)

    , round(45.995, -2)

    , round(645345.995, -2)

from dual;


   SQL> select trunc(45.995, 2)

    , trunc(45.995, -2) 

    , trunc(645345.995, -2)

from dual;


   SQL> select 7/3, ceil(7/3), floor(7/3)

from dual;


   SQL> select empno, mod(empno, 2), mod(empno, 3) from emp;

   SQL> select empno, mod(empno, 2), mod(empno, 3) from emp where mod(empno, 2) = 0;      --> 사번이 짝수

   SQL> select empno, mod(empno, 2), mod(empno, 3) from emp where mod(empno, 2) = 1;      --> 사번이 홀수

   SQL> select empno, mod(empno, 2), mod(empno, 3) from emp where mod(empno, 3) = 0;      --> 사번이 3의 배수




  문제) 월급을 * 를 이용해서 수평 막대 그래프로 표현하세요.

* 한개가 100입니다. 필요하면 올림을 수행하세요.


ENAME ...... SAL_GRAPH

------ ...... ----------------------

SMITH ...... ********

ALLEN ****************

WARD *************



힌트) CEIL, RPAD 함수를 사용하세요



해답)


SQL> select ename, sal, sal/100, ceil(sal/100)

    from emp;


↓ ↓ ↓ 


SQL> col sal_graph format a60

SQL> select ename, sal, rpad('*', ceil(sal/100)) as sal_graph

    from emp;


↓ ↓ ↓ 


SQL> select ename, sal, rpad('*', ceil(sal/100), '*') as sal_graph

    from emp;


ROUND (number) n값을 소수점 이하를 integer를 기준으로 반올림하여 반환한다


TRUNC (number) 인수 n1을 소수점 자리 파라미터 n2 이하를 절삭.


CEIL 인수에서 지정한 수치를 올림하여 정수를 구하는 함수이다.


FLOOR 지정한 숫자보다 작거나 같은 정수 중에서 최대값을 반환한다


MOD n2을 n1으로 나눈 나머지값을 반환.






'Oracle > SQL Fundamentals I' 카테고리의 다른 글

5일차 # 3-17: Working with Dates  (0) 2012.04.09
5일차 Date #3-19: DUAL table  (0) 2012.04.09
5일차 # 3-11 : Translate  (0) 2012.04.09
5일차 # 3-11 : TRIM vs. LTRIM, RTRIM  (0) 2012.04.09
5일차 # 3-11: RPAD, LPAD  (0) 2012.04.09

==> http://goo.gl/XQesC


  문제) 책 제목(ex: SQL*Plus User's Guide) 을 파일 이름으로 변환하는 방법?


SQL> select 'SQL*Plus User''s Guide' from dual;


↓ ↓ ↓ 


SQL> select 'SQL*Plus User''s Guide'

         , translate('SQL*Plus User''s Guide', ' */''', '___')

    from dual;



  문제) 다섯 자리 숫자가 포함된 행?


   SQL> drop table t1 purge;

   SQL> create table t1 (col1 varchar2(50));

   SQL> insert into t1 values ('여기는 ... 77785 입니다.');

   SQL> insert into t1 values ('그러나 241 이고 354 이면 ...');

   SQL> insert into t1 values ('잘 진행되면 98097가 가능하기도 ...');

   SQL> commit;


SQL> select * from t1;



SQL> select col1, translate(col1, '0123456789', '----------')

    from t2;


↓ ↓ ↓ 


SQL> select * from t2

    where translate(col1, '0123456789', '----------') like '%-----%';






- LTRIM, RTRIM 함수의 기본 예제: 기본 기능은 공백 제거


SQL> select substr('The Book and Movie', 4, 6)||'s Books'

         , rtrim(substr('The Book and Movie', 4, 6))||'s Books'

    from dual;


     ---------------


SQL> select ltrim('SSESS', 'S') from dual;

SQL> select trim(leading 'S' from 'SSESS') from dual;


SQL> select rtrim('SSESS', 'S') from dual;

SQL> select trim(trailing 'S' from 'SSESS') from dual;  


SQL> select trim(both 'S' from 'SSESS') from dual;  

SQL> select rtrim(ltrim('SSESS', 'S'), 'S') from dual;


     ---------------


SQL> select ltrim('xyxxyXYxy', 'xy') from dual;

    ==> http://goo.gl/kKO19


SQL> select trim('xy' from 'xyxxyXYxy') from dual;


==> 오류: ORA-30001: 트림 설정은 하나 문자만 가지고 있어야 합니다


     ---------------


  - LTRIM(char, [set]), RTRIM(char, [set])

     : set에 포함된 문자열이 아닌 문자열을 이루는 문자가 나타나지 않을 때까지 그 문자 하나 하나를 제거합니다.


SQL> select rtrim('abaa abbee aab', 'b a') from dual;



  문제) 숫자로만 이루어진 행 찾기ㅣ


SQL> drop table t1 purge;

SQL> create table t1 (col1 varchar2(10));

SQL> insert into t1 values ('77785');

SQL> insert into t1 values ('HJ241');

SQL> insert into t1 values ('9090P');

SQL> insert into t1 values ('130914');

SQL> insert into t1 values ('PUB01');

SQL> commit;



  - 해답 1)


SQL> select col1, ltrim(col1, '0123456789') from t1;


↓ ↓ ↓ 


SQL> select col1 from t1

    where ltrim(col1, '0123456789') is null;



  - 해답 2)


SQL> select col1, col1, col1

    from t1;


↓ ↓ ↓ 


SQL> select col1, upper(col1), lower(col1)

    from t1;


↓ ↓ ↓ 


SQL> select col1

    from t1

    where upper(col1) = lower(col1);


  - 해답 3)


SQL> select col1

    from t1

    where regexp_like(col1, '^[0-9]+$');








'Oracle > SQL Fundamentals I' 카테고리의 다른 글

5일차 Number// # 3-13: ROUND, TRUNC, CEIL, FLOOR, MOD  (0) 2012.04.09
5일차 # 3-11 : Translate  (0) 2012.04.09
5일차 # 3-11: RPAD, LPAD  (0) 2012.04.09
5일차 # 3-11: INSTR  (0) 2012.04.09
5일차 # 3-11: LENGTH  (0) 2012.04.09

SQL> select ename, lpad(ename, 10, '-'), rpad(ename, 10, '+')

    from emp;

  

↓ ↓ ↓ 


SQL> select ename, lpad(ename, 10, ' '), rpad(ename, 10)

    from emp;



SQL> select ename, substr(lpad(ename, 10, ' '), 10, 1), substr(ename, -1, 1)


====================================================================================================




'Oracle > SQL Fundamentals I' 카테고리의 다른 글

5일차 # 3-11 : Translate  (0) 2012.04.09
5일차 # 3-11 : TRIM vs. LTRIM, RTRIM  (0) 2012.04.09
5일차 # 3-11: INSTR  (0) 2012.04.09
5일차 # 3-11: LENGTH  (0) 2012.04.09
5일차 # 3-11: SUBSTR  (0) 2012.04.09

SQL> SELECT INSTR('CORPORATE FLOOR', 'OR', 3, 2) "Instring" FROM DUAL;


SQL> SELECT INSTR('CORPORATE FLOOR', 'OR', -3, 2) "Reversed Instring" FROM DUAL;

SQL> SELECT INSTR('CORPORATE FLOOR', 'OR', -3, 1) "Reversed Instring" FROM DUAL;



문제) 이름에 S가 포함된 사원?


SQL> select *

    from emp

    where ename like '%S%';


* INSTR 이용

SQL> select ename, ename

    from emp;


↓ ↓ ↓ 


SQL> select ename, instr(ename, 'S')

    from emp;


↓ ↓ ↓ 


SQL> select *

    from emp

    where instr(ename, 'S') > 0;





'Oracle > SQL Fundamentals I' 카테고리의 다른 글

5일차 # 3-11 : TRIM vs. LTRIM, RTRIM  (0) 2012.04.09
5일차 # 3-11: RPAD, LPAD  (0) 2012.04.09
5일차 # 3-11: LENGTH  (0) 2012.04.09
5일차 # 3-11: SUBSTR  (0) 2012.04.09
5일차 Character  (0) 2012.04.09


SQL> select length('한글'), length('오라클') from dual;


LENGTH('한글') LENGTH('오라클')

-------------- ----------------

            2                3


SQL> select length('한국Oracle') from dual;


LENGTH('한국ORACLE')

--------------------

                  8



문제) 회사에서 이름이 5자인 사원들의 모든 정보를 출력해다오, 오라클아!


SQL> select ename, length(ename)

    from emp;


방법1)

SQL> select *

    from emp

    where length(ename) = 5;



방법2)

select *

from emp

where ename like '_____';






'Oracle > SQL Fundamentals I' 카테고리의 다른 글

5일차 # 3-11: RPAD, LPAD  (0) 2012.04.09
5일차 # 3-11: INSTR  (0) 2012.04.09
5일차 # 3-11: SUBSTR  (0) 2012.04.09
5일차 Character  (0) 2012.04.09
5일차 3. Single-Row Functions  (0) 2012.04.09

# 3-11: SUBSTR --> 3번째 인자가 음수일 경우 null 값이 반환된다.







'Oracle > SQL Fundamentals I' 카테고리의 다른 글

5일차 # 3-11: INSTR  (0) 2012.04.09
5일차 # 3-11: LENGTH  (0) 2012.04.09
5일차 Character  (0) 2012.04.09
5일차 3. Single-Row Functions  (0) 2012.04.09
5일차 Interaction: 치환변수  (0) 2012.04.09

# 3-7: Character Functions

  - Case-Manipulations

  - Character-Manipulations




# 3-9: Case-Manipulation Functions

  - LOWER, UPPER, INITCAP

  - 문자열 비교시 유용 <= 문자열은 대소문자 구별하기 때문


==> 문제점: 컬럼을 가공하면 그 컬럼의 인덱스를 사용할 수 없습니다.

==> 해결방법: FBI (Function-Based Index)


'Oracle > SQL Fundamentals I' 카테고리의 다른 글

5일차 # 3-11: LENGTH  (0) 2012.04.09
5일차 # 3-11: SUBSTR  (0) 2012.04.09
5일차 3. Single-Row Functions  (0) 2012.04.09
5일차 Interaction: 치환변수  (0) 2012.04.09
5일차 File Manipulation(파일 조작造作 )  (0) 2012.04.09



* Functions - Built-in Functions     - Single-row Functions  : return one result per row

                                     - Multiple-row Functions: return one result per SET of rows

(=group function)

            - User-defined Functions - PL/SQL로 작성








* Arguments : input values of functions





* Single-row Functions - Character - Case-manipulation

                                   - Character-manipulation

                       - Number

                       - Date

                       - Conversion: Implicit/Explicit data type conversion

                       - General





# 3-5: Single-Row Functions

  1) 데이터 조작

  2) 인자를 받아서 결과값을 반환

  3)

  4) 

  ...


  - Possible Arguements

    1) User-supplied constant

    2) Variable

    3) Column name

    4) Expression (함수가 올 수도 있는데 이 경우를 nested function이라고 합니다)

'Oracle > SQL Fundamentals I' 카테고리의 다른 글

5일차 # 3-11: SUBSTR  (0) 2012.04.09
5일차 Character  (0) 2012.04.09
5일차 Interaction: 치환변수  (0) 2012.04.09
5일차 File Manipulation(파일 조작造作 )  (0) 2012.04.09
5일차 Edit: SQL Buffer를 편집  (0) 2012.04.09

* &









* &&


SQL> l

SQL> 1

SQL> c/&/&&

SQL> r

col의 값을 입력하십시오: ename



* define/undefine ---->SQL*Plus에서 사용할 변수를 선언하거나, 이미 선언된 변수와 그 변수값을 나열한다.

[출처] DEFINE 명령어|작성자 씽아횽



SQL> define col

DEFINE COL             = "ename" (CHAR)

SQL> /


SQL> undefine col

SQL> /

col의 값을 입력하십시오: sal


SQL> define col = job

SQL> /


SQL> def

SQL> def col



* acc[ept]


SQL> ed sv002.sql


accept col prompt '세번째 컬럼 이름을 넣으세요: '


select empno, ename, &col

from emp

order by &col desc;


SQL> @sv002

세번째 컬럼 이름을 넣으세요: sal


SQL> l



* 문자


SQL> select empno, ename, sal

     from emp

     where ename = &col_name;


col_name의 값을 입력하십시오: KING

==> 에러: ORA-00904: "KING": 부적합한 식별자


SQL> /

col_name의 값을 입력하십시오: 'KING'

구   3:      where ename = &col_name

신   3:      where ename = 'KING'


↓ ↓ ↓ 


SQL> l

SQL> c/&col_name/'&col_name'



* new_value


SQL> ed sv003 --> 자동적으로 sql 확장자가 붙습니다


col avg_sal new_value nv_avg_sal


select avg(sal) as avg_sal

from emp

where deptno = 10;


select *

from emp

where sal > &nv_avg_sal;


SQL> @ sv003


  AVG_SAL

----------

2916.66667


구   3: where sal > &nv_avg_sal

신   3: where sal > 2916.66667


    EMPNO ENAME      JOB              MGR HIREDATE        SAL       COMM     DEPTNO

---------- ---------- --------- ---------- -------- ---------- ---------- ----------

     7566 JONES      MANAGER         7839 81/04/02       2975                    20

     7788 SCOTT      ANALYST         7566 82/12/09       3000                    20

     7839 KING       PRESIDENT            81/11/17       5000                    10

     7902 FORD       ANALYST         7566 81/12/03       3000                    20


SQL> def nv_avg_sal

DEFINE NV_AVG_SAL      = 2916.66667 (NUMBER)



* &n: &1, &2, ..., &9


SQL> ed sv004


select empno, &1

from emp

where sal > &2;


SQL> @ sv004 ename 2000



==============================================================================================================








'Oracle > SQL Fundamentals I' 카테고리의 다른 글

5일차 Character  (0) 2012.04.09
5일차 3. Single-Row Functions  (0) 2012.04.09
5일차 File Manipulation(파일 조작造作 )  (0) 2012.04.09
5일차 Edit: SQL Buffer를 편집  (0) 2012.04.09
5일차 Execution(실행,수행)  (0) 2012.04.09

SQL> select *

     from emp

     order by sal desc;


SQL> save sv001 --> sav[e] : SQL buffer ==> file --> 현재 디렉토리에 저장

file sv001.sql(이)가 생성되었습니다


SQL> cl buff

SQL> get sv001 --> get    : file ==> SQL buffer


SQL> save c:\test_count

file c:\test_count.sql(이)가 생성되었습니다


SQL> define _editor

DEFINE _EDITOR         = "Notepad" (CHAR)


SQL> ed rep_sort_emp.sql


select empno, ename, sal, comm

from   emp

order by sal desc;



SQL> l

SQL> @ rep_sort_emp.sql

SQL> start sv001


SQL> spool에 관한 예제는 치환변수 편에서 확인




※넌센스~~~
造作 [ 조작 ]
①물건(物件)을 지어서 만듦 ②일부러 무엇과 비슷하게 만듦 ③일을 꾸미어 만듦

-나는 다른 한문이 쓰일 줄 알았는데.....아아...한문공부의 중요성이.....



'Oracle > SQL Fundamentals I' 카테고리의 다른 글

5일차 3. Single-Row Functions  (0) 2012.04.09
5일차 Interaction: 치환변수  (0) 2012.04.09
5일차 Edit: SQL Buffer를 편집  (0) 2012.04.09
5일차 Execution(실행,수행)  (0) 2012.04.09
5일차 Format  (0) 2012.04.09

SQL> exit

C:\Documents and Settings\user\java>sqlplus java20/java20@211.183.3.52:1521/orcl


SQL> select empno

  2  from emp;


SQL> list

  1  select empno

  2* from emp --> *는 현재행을 의미 --> 모든 편집의 효과는 현재행에 미칩니다


SQL> l         ----------------->여기서 ㅣ은 list 


SQL> i

  3  where deptno = 10

  4 <-- 엔터를 한번 더 입력하면 실행하지 않고 편집을 종료


SQL> l

SQL> /


SQL> l

  1  select empno

  2  from emp

  3* where deptno = 10

SQL> c/10/20

  3* where deptno = 20

SQL> r

  1  select empno

  2  from emp

  3* where deptno = 20


SQL> c/e/a

  3* whare deptno = 20 <-- c는 첫번째로 일치하는 패턴을 변경

SQL> c1a1e <-- /뿐만 아니라 다른 문자도 가능

  3* where deptno = 20


SQL> l

SQL> a , deptno <-- 현재행에 붙임(append)

  3* where deptno = 20, deptno

SQL> c/, deptno/ <-- 지우려면 / 뒤에 그냥 엔터


SQL> 1 <-- 1번행을 현재행으로

SQL> a , deptno

SQL> r


SQL> 1

SQL> i

  2i      , ename, sal

  3i      , hiredate, comm

  4i

SQL> r


SQL> i

  6  and  comm is not null

  7  order by empno;


선택된 레코드가 없습니다.


SQL> 5

SQL> c/20/30

SQL> r


SQL> l 1 3

SQL> l * 6

SQL> l 2 last

SQL> 3

SQL> l * last


SQL> del 1

SQL> l


SQL> 2 , comm as commission

SQL> l


SQL> 1 select empno, deptno

SQL> 1      , ename, sal


SQL> 1

SQL> i

  2i select empno, deptno

  3i l

  4i


SQL> 0 select empno, deptno

SQL> l


SQL> del 3 4

SQL> l


SQL> 3

SQL> del * last

SQL> l


SQL> clear buffer --> cl buff

SQL> l

SQL> cl scr


'Oracle > SQL Fundamentals I' 카테고리의 다른 글

5일차 Interaction: 치환변수  (0) 2012.04.09
5일차 File Manipulation(파일 조작造作 )  (0) 2012.04.09
5일차 Execution(실행,수행)  (0) 2012.04.09
5일차 Format  (0) 2012.04.09
5일차 Environment  (0) 2012.04.09

SQL> / ==> SQL Buffer의 내용을 실행

SQL> r ==> run: SQL Buffer의 내용을 출력하고 실행


SQL> set serveroutput on

SQL> create procedure hello

     is

     begin

dbms_output.put_line('안녕하세요, 여러분!');

     end;

     /


SQL> execute hello


SQL> exec dbms_output.put_line('오라클 만세')


'Oracle > SQL Fundamentals I' 카테고리의 다른 글

5일차 File Manipulation(파일 조작造作 )  (0) 2012.04.09
5일차 Edit: SQL Buffer를 편집  (0) 2012.04.09
5일차 Format  (0) 2012.04.09
5일차 Environment  (0) 2012.04.09
5일차 Miscellaneous(기타)  (0) 2012.04.09

+ Recent posts