絢香 ayaka - おかえり

감상문 2008. 6. 26. 17:11 Posted by galad

최근 방영중인 일본드라마 절대그이-絶対彼氏의 엔딩곡.
맘에 든다.
드라마도 그냥 저냥 볼만하고.
冷静と情熱のあいだ Rosso - 江国 香織

한국에 있을떄부터 제목은 알고있었고 보려고도 했었지만,
왠지 보지 못했다. 않았다. 일지도...
그땐 그다지 책을 보지 않던 때였던 것 같다.

그러다 겨우 읽게된 - 무려 원서로! 모르는 부분은 그냥 적당히
알고 넘어갔지만 - 이 책에 대한 첫번째 감상은
"마브(Marv)가 불쌍해" 일려나? ㅎㅎ
아직 Blue가 남아있지만 Rosso는 별로 좋은 기분이 아니었다.
Blue도 그런 느낌이면 어쩐담...
사실 Rosso를 읽기 시작했을 때는 꽤나 재밌어서 가능하면
천천히 읽었다. Rosso가 주는 그 느낌을 오랫동안 느끼고 싶어서였다.
하지만 마지막 부분에 와서는 가능하면 빨리 넘기게되었다.

아오이는 왜 마브랑 사귀었을까?
나에게 있어서 아오이-쥰세이의 이야기보다도 마브가 기억에 남는다.
결국 아오이에게 마브는 아무런 의미도 되지 않는 사람이었나라는
느낌이 들어서 견딜수 없는 장면도 있었다.
자신의 안에 결코 지울 수없는-지워지지 않는 사람이 있다는 걸
알면서도 다른 사람의 곁에 있는 건...

그러고 보면 마브는 정말 대단한 듯.
4년이나 아오이의 거의 모든 걸 받아주었으니.
아오이는 항상 어딘가로 가 버릴 듯이,
자신의 모든 걸 내보이지 않고 있었는데도 말이지...

Blue는 어떤 내용인지는 모르겠지만,
아마 당분간은 읽고 싶다는 맘이 들지는 않을 듯 하다...
(사실 좀 안다 ㅡ.ㅡ;; 쥰세이가 아오이를 잡으러 간다는거? )


'감상문' 카테고리의 다른 글

[감상] 과속스캔들  (0) 2009.01.29
[감상] 작전명 발키리  (0) 2009.01.29
[감상] 대한민국 개발자 희망보고서 - 오병곤  (0) 2009.01.11
리타 길들이기  (0) 2009.01.06
絢香 ayaka - おかえり  (0) 2008.06.26

[펌]PLSQL 초보

프로그래밍/DB 2008. 1. 10. 15:57 Posted by galad

- PLSQL은 SQL에 프로그래맹 언어 설계 기능을 추가한 것이다.

- SQL의 데이터 조작문 및 질의문은 프로시저 단위코드에 포함된다.


< PL/SQL >

- Anonymou block : 평상시 script로 저장했다가 사용

- Function, Procedure

- Package : Function과 Procedure의 모음

- Trigger : 이벤트에 반응하는 로직


< PL/SQL의 블록구조 >

  -- DECLARE

          변수선언, 커서, 사용자가 정의한 예외사항

  -- BEGIN

          SQL문, PL/SQL문

  -- EXCEPTION

          오류가 발생할 때의 수행작업

  -- END;


※첨부파일 실행시 스키마를 고려하여 DB에 접속해야 한다.


< PL/SQL 공통 >


-- 생성한 함수/프로시져 조회
SQL> SELECT DISTINCT NAME FROM USER_SOURCE;
--생성 후에는 꼭 에러 여부를 확인한다.
SQL> SELECT * FROM USER_ERRORS; //마지막에 실행한 명령의 에러를 가지고 있다.


< PLSQL - EditPlus환경설정 >

※첨부파일

plsql2.zip

plsql2_구문강조_사용설명서.txt


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


< PLSQL - variable >

※첨부파일

plsql_variable01.sql

plsql_variable02.sql

plsql_variable03.sql


< PLSQL - cursor >

※첨부파일

plsql_cursor01.sql

plsql_cursor02.sql

plsql_cursor03.sql

plsql_cursor04.sql

plsql_cursor05.sql


< PLSQL - exception >

※첨부파일

plsql_exception01.sql

plsql_exception02.sql


< PLSQL - 종합문제 >

※첨부파일

plsql_exe01.sql : 종합문제 NO1 :사원별 급여현황에 따른 '*',급여 출력

plsql_exe02.sql : 종합문제 NO3 :급여 누적값 출력(1)

plsql_exe03.sql : 종합문제 NO3 :급여 누적값 출력(2)

plsql_exe04.sql : 종합문제 NO2 : 년도별 입사한 사원수 출력


 

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

** PROCEDURE : 어떠한 작업처리가 목적이다.

                         VALUE를 반환 할수도 안할 수도 있다.

                         SQL문에서 사용불가,

                         여러개의 인자를 받을수있다.


** FUNCTION : 반드시 한개의 VALUE를 반환한다.

                      SQL문에서 사용가능(사용자 정의 함수)


< PLSQL - PROCEDURE(프로시져) >

※첨부파일

procedure01_raise_salary.sql

procedure02_updownsalary.sql

procedure03_query_emp.sql

procedure03_query_emp_plsql.sql


< PLSQL - FUNCTION(함수) >

※첨부파일

function01_get_sal.sql : 사원번호를 받아 급여를 출력하는 함수

function02_annsal.sql : 연봉을 구하는 함수

function03_find_dname.sql : 특정 사번을 그 사원의 부서명을 출력하는 함수


< PLSQL - TRIGGER >

※첨부파일

trigger01_secure_emp.sql

trigger02_copy_insert.sql

trigger03_update_dept.sql

trigger04_delete_dept.sql

trigger05_delete_emp.sql

trigger06_set_null_emp.sql

trigger07_update_cascade_emp.sql

trigger08_audit_emp_values.sql

'프로그래밍 > DB' 카테고리의 다른 글

[펌] MySQL 사용하기  (0) 2008.11.25
[펌] mysql root 암호 분실 시  (1) 2008.11.25
PL SQL문제  (0) 2008.01.10
DBMS_LOCK 사용 시 에러  (0) 2008.01.10
[펌]SQL*plus FAQ 및 TIPS  (0) 2008.01.09

PL SQL문제

프로그래밍/DB 2008. 1. 10. 15:43 Posted by galad

금일 PL SQL문제중 이런게 나왔었다. 잘 기억은 안난다만... 인사관리를 짜라고 했는데...

등록되어 있는 사원들의 평균 급여를 내어 출력하고 평균 급여가 메니져보다 높은 사람의 급여를

15% 삭감하고, 삭감할 사람의 나이가 평균 나이보다 높을 사람의 경우에는 그대로 두어라...

물론 실제 문제랑은 많이 차이가 있음. 책에도 이런문제는 많이 있을 듯...


주요 조건은 프로시져로 짜야하며 패키지와를 시켜야 하고 폴더는 어디에 주석은 어떻게 달아야 하고

제한시간 1시간. 저건 문제중 한개이고... 총 문제수 5문제......-_-;;;;

'프로그래밍 > DB' 카테고리의 다른 글

[펌] mysql root 암호 분실 시  (1) 2008.11.25
[펌]PLSQL 초보  (0) 2008.01.10
DBMS_LOCK 사용 시 에러  (0) 2008.01.10
[펌]SQL*plus FAQ 및 TIPS  (0) 2008.01.09
[펌]DECODE 이용사례 (4) - BETWEEN OPERATOR  (0) 2008.01.09

DBMS_LOCK 사용 시 에러

프로그래밍/DB 2008. 1. 10. 10:20 Posted by galad
DBMS_LOCK.SLEEP()을 사용하려고 하는데, isql모드(sqlPlus)에서는 무리없이 수행되나, PL/SQL에서 사용하면 하기와 같은 에러가 발생합니다.
PLS-00201: identifier 'SYS.DBMS_LOCK' must be declared



system 계정에서 다음과 같이 권한을 주세요
> sqlplus /nolog

// sys유저에 sysdba권한으로 접속을 합니다
SQL*Plus: Release 9.2.0.5.0 - Production on Mon Feb 26 13:56:02 2007
Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.
SQL> conn sys/manager@oracle as sysdba

SQL> grant execute on dbms_lock to scott;

'프로그래밍 > DB' 카테고리의 다른 글

[펌]PLSQL 초보  (0) 2008.01.10
PL SQL문제  (0) 2008.01.10
[펌]SQL*plus FAQ 및 TIPS  (0) 2008.01.09
[펌]DECODE 이용사례 (4) - BETWEEN OPERATOR  (0) 2008.01.09
[펌]DECODE를 이용하여 원치 않는 자료를 없애는 방법  (0) 2008.01.09

[펌]SQL*plus FAQ 및 TIPS

프로그래밍/DB 2008. 1. 9. 17:45 Posted by galad
(V7.X ~ V8.X) : SQL*plus FAQ 및 TIPS
=============================================

Q) Row wrapping없이 flat ASCII file을 만드는 방법
Q) 두 개의 Date type column 사이의 평균 시간을 구하는 방법
Q) Ampersand나 특수 문자를 갖는 데이타를 insert하는 방법
Q) SQL 내의 문자열 주변에 인용부호를 생성하거나 QUOTES를 생성하는 방법
Q) `LIKE` 연산자를 사용하여 case insensitive search를 할 수 있는 방법
Q) Column delimited flat file을 생성하는 방법
Q) Product_User_Profile에 관하여

1. Q) Row wrapping없이 flat ASCII file을 만드는 방법은 무엇입니까?

    A) `SPOOL` command와 `SET LINESIZE` 와 `SET BUFFER` command를 사용하시기 바랍니다.
sql query를 화일에 저장하기 위해서는 spool command를 사용하시면 됩니다.
화일 확장자를 기술하지 않으면, O/S에 따라서 다르지만, 대부분의 O/S에서는 .lst나 .lis를 사용합니다.
    SQL*plus에서 flat file을 생성하기 위해서는 먼저 다음과 같은 SET command를 기술하여야 합니다.
    SET NEWPAGE 0
    SET SPACE 0
    SET LINESIZE 80
    SET PAGESIZE 0
    SET ECHO OFF
    SET FEEDBACK OFF
    SET HEADING OFF

위의 command를 기술한 후에, spool command를 사용하시면 됩니다.


2. Q) 두 개의 Date type column 사이의 평균 시간을 구하는 방법은 무엇입니까?

    A) 다음과 같은 두 개의 row를 가지는 date field가 있다고 가정합니다.

    01-jan-96 01:10
    01-jan-96 01:20

sql> select avg(to_number(to_char(a, `MMDDYYHHMI`))) from x;

AVG(TO_NUMBER(TO_CHAR(A,`MMDDYYHHMI`)))
---------------------------------------
                               101960115

즉, 1:10과 1:20 사이의 평균 시간은 1:15입니다.


3. Q) Ampersand나 특수 문자를 갖는 데이타를 insert하는 방법은 무엇입니까?

    A) 해결 방법은 세 가지가 있습니다.

1> SQL*plus에서 SET DEFINE OFF나 SET SCAN OFF를 실행하여 substitution
variable(&)을 turn off시키는 방법입니다.

(Example)
    sql> SET DEFINE OFF
    sql> INSERT INTO table_name VALUES(`AT&T`);
    /
    1 row created

2> SET DEFINE ON 상태로 유지시키면서 substitution variable을 다른
non-alphanumeric 문자나 non-white space 문자(*, % 등등)로 대체시킨다.
 
(Example)
    sql> SET DEFINE %
    sql> INSERT INTO table_name VALUES(`AT&T`);
    /
    1 row created

3> SET ESCAPE ON 상태에서(DEFINE은 &로, SCAN은 ON상태로 유지) 특수 문자 앞에
escape 문자인 backslash(``)를 선행하도록 합니다.

(Example)
    sql> SET ESCAPE ON
    sql> SHOW ESCAPE
         ESCAPE "" (hex 5c)
    sql> INSERT INTO table_name VALUES (`select * from emp where ename=&1`);
    1 row created.
    sql> select * from table_name;

    COL1
    ---------------------------------------------------------
    SELECT * FROM EMP WHERE ENAME=&1


4. Q) SQL 내의 문자열 주변에 인용부호를 생성하거나 QUOTES를 둘 수 있습니까?

    A) 해결 방법은 다음과 같습니다.

1> Single quotation mark를 생성하기 위해서는 4 single quote(````)를 사용하
시기 바랍니다.

(Example)
    sql> select ```` from dual;
위의 문장을 실행 시 return되는 결과는 다음과 같습니다.
`
-
`

2> 문자열 주변에 single quote를 두기 위해서는 3 single quote 안에(```) 문자
열을 포함시키면 됩니다.

(Example)
    sql> select ```character string in quotes``` result
         from dual;

위의 문장을 실행 시 return되는 결과는 다음과 같습니다.

RESULT
-----------------------------------------------
`CHARACTER STRING IN QUOTES`

3> 참고로, Literal single quote를 생성하기 위해 연속적인 single quote mark
를 사용하는 방법은 다음과 같습니다.

(Example)
    srw.do_sql(`select decode(dname, ``NONE``, NULL, ``A``)
                from dept
                where deptno = 10`);

위의 문장을 실행 시 return되는 결과는 다음과 같습니다.

    select decode(dname, `NONE`, NULL, `A`)
    from dept
    where deptno = 10

(Example)
    DECLARE
       a varchar2(200);
       q char(1) := ````;
    BEGIN
       a := ```this is a ` || q || `quoted`` string` || q;
    END;

위의 문장을 수행 결과 스트링 a에는 `this is a `quoted` string` 이 저장됩니다.


5. Q) `LIKE` 연산자를 사용하여 case insensitive search를 할 수 있는 방법은
무엇입니까?

    A) LIKE 연산자를 사용하여 비교하기 위해 필드에 `UPPER` 함수를 사용하시면
됩니다.


6. Q) Column delimited flat file을 생성하는 방법은 무엇입니까?

    A) 해결 방법은 두 가지가 있습니다.

1> query 내에서 column 분리자를 concatenate시키면 됩니다.

(Example)
To delineate column text with TABs:
------------------------------------
sql> select deptno || chr(9) || dname from dept;

DEPTNO || CHR(9) || DNAME
------------------------------------
10        ACCOUNTING
20        RESEARCH
30        SALES
40        OPERATIONS

CHR(9) 문자함수는 query 문 안에 TAB을 embedding하기 위해 사용됩니다.

(Example)
To deleneate column test with COMMAs:
-------------------------------------
sql> select deptno || `,` || dname from dept;

DEPTNO || `,` || DNAME
-------------------------------------
10,ACCOUNTING
20,RESEARCH
30,SALES
40,OPERATIONS

Query 결과를 화일로 보내기 전에 다음과 같이 SET COMMAND를 수행하시기 바랍니다.

SET TERMOUT OFF
SET NEWPAGE 0
SET SPACE 0
SET LINESIZE 80
SET PAGESIZE 0
SET ECHO OFF
SET FEEDBACK OFF
SET HEADING OFF
SPOOL file_name

원하는 Query문 수행 후에는 다음과 같이 다시 setting 하시기 바랍니다.

SPOOL OFF
SET TERMOUT ON

SQL*plus 버젼 3.0.x와 3.1.x에서는 컬럼 사이의 간격을 조정하기 위해 column
분리자를 명시해 주는 SET COMMAND가 지원되지 않습니다.

2> SQL*plus 3.2 이상의 버젼에서는 COLSEP command를 사용하시면 됩니다.

Query 결과를 comma delimited flat file에 보내기 전에 다음과 같이 SET COMMAND
를 수행하시기 바랍니다.

SET TERMOUT OFF
SET NEWPAGE 0
SET SPACE 0
SET LINESIZE 80
SET PAGESIZE 0
SET ECHO OFF
SET FEEDBACK OFF
SET HEADING OFF
SET COLSEP `,`
SPOOL file_name

원하는 Query 문 수행 후에는 다음과 같이 다시 setting하시기 바랍니다.

SPOOL OFF
SET TERMOUT ON


7. Q) PUPBLD.SQL 스크립트를 찾지 못하여 public synonym을 drop할 수 없습니다.
해결 방법은 무엇이며, Product_User_Profile에 관하여 알고 싶습니다.

   A) Product_User_Profile은 product-level security를 제공하기 위해 DBA가
수정할 수 있는 테이블입니다.
    대부분의 오라클 product들은 SQL GRANT와 REVOKE command에 의해 제공되는
user-level security와 user role들을 추가한 product-level security를 제공하는
이 테이블을 사용합니다.  
    이 테이블을 생성하기 위해서는 SYSTEM으로 connect하여 PUPBLD.SQL이나
V7PUP.SQL을 돌려주어야 합니다.
   PUPBLD.SQL 스크립트를 실행하면 SYSTEM 계정 내에 product_profile과
user_profile 테이블을 생성해 줍니다. 여기에는 두 개의 view가 있는데,
product_privs와 user_privs가 그것입니다.
    사용자들은 product_profile과 user_profile이라는 이름으로 조회할 수 있습
니다.
이 view를 조회하면 해당 계정에 관한 privileges와 profile들을 알 수 있습니다.
    그런데, 현재 사용 중인 일부 product나 user profile structure는 제거하지
않기 때문에 manual하게 table, synonym, view들을 drop해 주어야 합니다.
    만약, delete해야 할 내재하는 structure가 있다면, 다음의 SQL문을 SQL*plus
에서 수행해 주시기 바랍니다.

    drop synonym product_user_profile;
    drop table product_profile;
    drop table product_user_profile;
    drop view product_privs;
    revoke select on product_privs from public;
    drop public synonym product_profile;
    drop synonym product_user_profile;
    drop public synonym product_user_profile;
    drop table user_profile;
    revoke select on user_profile from public;
    drop view user_privs;
    revoke select, update, insert, delete on user_privs from public;
    drop public synonym user_profile;
PURPOSE
---------

특정 범위를 설정하고 그 범위 사이에 있는 salary를 가진 사람의 count를
구하려면 다음과 같이 한다.


Explanation
-----------

    직원의 급여 테이블에서 특정 범위의 급여를 받는 사람이 몇 명인지
    나타내주는 SQL을 DECODE, COUNT 함수를 이용하여 구현하기로 한다.


Example
--------

SQL> SELECT count(decode(sign(sal-4999), 1, sal)) "5000 - ",
             count(decode(sign(sal-5000), -1,
                      decode(sign(sal-3999), 1, sal))) "4000-4999",
             count(decode(sign(sal-4000), -1,
                      decode(sign(sal-2999), 1, sal))) "3000-3999",
             count(decode(sign(sal-3000),-1,
                      decode(sign(sal-1999),1,sal))) "2000-2999",
             count(decode(sign(sal-2000),-1,
                      decode(sign(sal- 999),1,sal))) "1000-1999",
             count(decode(sign(sal-1000),-1,sal)) "- 1000"
      FROM   emp;


    5000 -   4000-4999  3000-3999   2000-2999   1000-1999     - 1000
   --------  ---------  ---------   ---------   ---------    --------
        1           0          2           3           6           2