[Pro*c]동적 SQL 문장 만들기

Fe.head의 이미지

나중에 제가 잊어 버릴까봐 여기에 써놓습니다.^^

SELECT

select 는 단일 문장이 안되는듯합니다.
그래서 cursor 를 썼습니다.


// SQL문 만들기
char select_sql[512];
char * kind_of_tel = "home_tel";
char * kind_of_tel_flag = "home_tel_flag";

sprintf(select_sql,"SELECT name, %s, %s FROM member_tbl where regn_no = :regn_no AND rownum <= :n",
            kind_of_tel, kind_of_telflag);

...
// SELECT 
char    tel_no[20];
char    old_tel_flag[2];
char    name[20];
char *  regn_no = "7709090000000";
long     count = 1;

EXEC SQL PREPARE S FROM :select_sql; // 전방 선언(?)

EXEC SQL DECLARE memb_cursor CURSOR FOR S; // 커서 선언

EXEC SQL OPEN memb_cursor USING :name, :regn_no, :count;    // 커서 열기
/* select_sql에 있는 문자 ":regn_no" 와 변수 :regn_no는 거의 관계가 없으며 단지 변수가 들어갈 자리라는것만 나타낸다. 고로 변수명과 꼭 일치시킬 필요 없다.
   여기 예제에서는 ":n" 과 :count 과 대칭을 이루나 명칭은 서로 틀리다.
*/

EXEC SQL FETCH memb_cursor INTO :tel_no, :old_tel_flag;

// 에러처리및 데이터 처리
....

EXEC SQL CLOSE memb_cursor;

UPDATE, DELETE, INSERT... 등등.


char update_sql[512];
char *kind_of_telflag = "home_tel_flag";

// SQL문 만들기
sprintf(update_sql,
            "UPDATE member_tbl "
            "SET %s = 'N', CHG_DATE  = SYSDATE"
            "WHERE REGN_NO = :regn_no",
            kind_of_telflag);

....

char *regn_no = "7709090000000";

EXEC SQL PREPARE S FROM :update_sql; // 전방 선언(?)

EXEC SQL EXECUTE S USING :regn_no;    // SQL문 실행 
/* update_sql에 있는 문자 ":regn_no" 와 변수 :regn_no는 거의 관계가 없으며 단지 변수가 들어갈 자리라는것만 나타낸다. 고로 변수명과 꼭 일치시킬 필요 없다.
*/

// 에러처리및 데이터 처리
....

Forums: