ANSI動態SQL方法4

ANSI動態SQL方法4 :用於處理任何動態SQL語句和PL/SQL塊


處理SQL語句步驟:

1、分配輸入描述區和輸出描述區

EXEC SQL ALLOCATE DESCRIPTROR 'input_des';

EXEC SQL ALLOCATE DESCRIPTROR 'output_des';


2、準備SQL語句和定義遊標

gets(sql_stat);

EXEC SQL PREPARE S FROM :sql_stat;

EXEC SQL DECLARE C CURSOR FOR S;


3、處理綁定變量

EXEC SQL DESCRIBE INPUT S USING DESCRIPTOR 'input_des';

EXEC SQL GET DESCRIPTOR 'input_des' :input_count = COUNT;

ANSI_varchar_type = 12;

for(i=0;i < input_count;i++)

{

occurs = i+1;

EXEC SQL GET DESCRIPTOR 'input_des' VALUE :occurs :name = NAME;

gets(input_buf);

input_len = strlen(input_buf);

input_buf[input_len] = '\0';

EXEC SQL SET DESCRIPTOR 'input_des' VALUE :occurs TYPE = :ANSI_varchar_type,

LENGTH = :input_len,DATA = :input_buf;

}


4、打開遊標

EXEC SQL OPEN C USING DESCRIPTOR 'input_des';



5、處理查詢結果

EXEC SQL DESCRIBE OUTPUT S USING DESCRIPTOR 'output_des';

EXEC SQL GET DESCRIPTOR 'output_des' :output_count = COUNT;

type = 12;

len = 2000;

for(i=0;i < output_count;i++)

{

occurs = i+1;

EXEC SQL SET DESCRIPTOR 'output_des' VALUE :occurs TYPE=:type LENGTH=:len;

EXEC SQL GET DESCRIPTOR 'output_des' VALUE :occurs :name = NAME;

}

for(;;)

{

EXEC SQL FETCH C INTO DESCRIPTOR 'output_des';

for(i=0;i < output_count;i++)

{

occurs = i +1;

EXEC SQL GET  DESCRIPTOR 'output_des'

VALUE:occurs :data = DATA,:indi = INDICATOR;

}

}


6、關閉遊標和釋放描述區

EXEC SQL CLOSE C;

EXEC SQL DEALLOCATE DESCRIPTOR 'input_des';

EXEC SQL DEALLOCATE DESCRIPTOR 'output_des';


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章