정보과학 IT

(PROC) DATABASE CONNECTION

물곰탱이 2013. 11. 21. 00:37

(PROC) DATABASE CONNECTION

 

1. Explicit Connection

EXEC SQL DECLARE database_name DATABASE;
EXEC SQL CONNECT :username IDENTIFIED BY :password
AT database_name USING :database_string;

. database_name : Precompiler에서의 identifier
. database_string : remote node에 접속하는 SQL*Net syntax

1) SQL Operation

EXEC SQL AT database_name SELECT ...
EXEC SQL AT database_name INSERT ...
EXEC SQL AT database_name UPDATE ...
EXEC SQL AT database_name COMMIT ...

2) PL/SQL Block

EXEC SQL AT database_name EXECUTE
begin
/* PL/SQL block here */
end;
END-EXEC;

3) Cursor Control

EXEC SQL AT database_name DECLARE cursor_name CURSOR FOR ...
EXEC SQL OPEN cursor_name ...

DECALRE문장에만 AT database_name이 들어가며 OPEN, FETCH,
CLOSE문에서는 AT 문을 사용하지 않는다.

4) Dynamic SQL

Dynamic Method 1에서는 execute시점에 At문을 사용한다.
EXEC SQL AT database_name EXECUTE IMMEDIATE :sql_stmt;

Dynamic Method 2,3,4에서는 DECLARE STATEMENT에서만 AT문을
사용한다.
EXEC SQL AT database_name DECLARE sql_stmt STATEMENT;
EXEC SQL PREPARE sql_stmt FROM :sql_string;
...

* host variable로 선언하여 사용할 수도 있다.

char username[10] = "scott";
char password[10] = "tiger";
char db_name[10] = "oracle1";
char db_string[20] = "NYNON";

EXEC SQL CONNECT :username IDENTIFIED BY :password
AT :db_name USING :db_string;

EXEC SQL AT :db_name DELETE ...

- DECLARE DATABASE 문이 필요하지 않으나 SQL Operation시에
사용되는 table들에 대해서 DECLARE TABLE 문을 사용해야
precompile시에 warning을 발생시키지 않는다.

2. Implicit Connection

database link를 사용하여 non-default database를 access한다.

EXEC SQL SELECT ENAME,JOB INTO :emp_name, :job_title
FROM emp@db_link
.....

(database link는 미리 create 되어 있어야 한다.
CREATE DATABASE LINK db_link
CONNECT TO scott IDENTIFIED BY tiger
USING 'T:krhost:SID'; )
이것은 v1 방법이고 , v2 에서는 tnsnames.ora file 의 alias 를 ' ' 안에 써준다.