- 论坛徽章:
- 0
|
在运行程序时输入
select :a,:b from emp where empno=:c
输入 name,salary, 1 ,输出的时候并没有显示列的值,而是把name作为值输出了,形式如下,并没有取出实际的值
name,salary
相关代码如下:
void sql12da4()
{
EXEC SQL ALLOCATE DESCRIPTOR 'input_descriptor';
EXEC SQL ALLOCATE DESCRIPTOR 'output_descriptor';
for(;
{
printf("please enter sql statement(exit:quit):" ;
fflush(stdin);
gets(sql_stat);
if((strncmp(sql_stat,"exit",4)==0)||(strncmp(sql_stat,"EXIT",4)==0))
break;
EXEC SQL PREPARE S FROM :sql_stat;
EXEC SQL DECLARE C CURSOR FOR S;
process_input();
EXEC SQL OPEN C USING DESCRIPTOR 'input_descriptor';
if((strncmp(sql_stat,"select",6)==0)||(strncmp(sql_stat,"SELECT",6)==0))
process_output();
EXEC SQL CLOSE C;
}
EXEC SQL DEALLOCATE DESCRIPTOR 'input_descriptor';
EXEC SQL DEALLOCATE DESCRIPTOR 'output_descriptor';
puts("\n thank you for using ANSI DYNAMIC SQL 4 " ;
}
void process_input()
{
int i;
EXEC SQL BEGIN DECLARE SECTION;
char name[31];
int input_count,input_len,occurs,ansi_varchar_type;
char input_buf[200];
EXEC SQL END DECLARE SECTION;
EXEC SQL DESCRIBE INPUT S USING DESCRIPTOR 'input_descriptor';
EXEC SQL GET DESCRIPTOR 'input_descriptor' :input_count=COUNT;
ansi_varchar_type=12;
for(i=0;i<input_count;i++)
{
occurs=i+1;
EXEC SQL GET DESCRIPTOR 'input_descriptor' VALUE ccurs :name =NAME;
printf("\nplease input %s\'s value",name);
fflush(stdin);
gets(input_buf);
input_len=strlen(input_buf);
input_buf[input_len]='\0';
EXEC SQL SET DESCRIPTOR 'input_descriptor'
VALUE ccurs TYPE =:ansi_varchar_type,LENGTH =:input_len,DATA=:input_buf;
}
}
void process_output()
{
int i;
EXEC SQL BEGIN DECLARE SECTION;
int output_count,occurs,type,len;short indi;
char data[200],name[31];
EXEC SQL END DECLARE SECTION;
EXEC SQL DESCRIBE OUTPUT S USING DESCRIPTOR 'output_descriptor';
EXEC SQL GET DESCRIPTOR 'output_descriptor' utput_count =COUNT;
printf("\n" ;
type=12;
len=MAX_VAR_LEN;
for(i=0;i<output_count;i++)
{
occurs=i+1;
EXEC SQL SET DESCRIPTOR 'output_descriptor' VALUE ccurs TYPE=:type,LENGTH=:len;
EXEC SQL GET DESCRIPTOR 'output_descriptor' VALUE ccurs :name =NAME;
printf("\t%s",name);
}
printf("\n\n" ;
EXEC SQL WHENEVER NOT FOUND DO break;
for(;
{
EXEC SQL FETCH C INTO DESCRIPTOR 'output_descriptor';
for(i=0;i<output_count;i++)
{
occurs=i+1;
EXEC SQL GET DESCRIPTOR 'output_descriptor' VALUE ccurs :data =DATA,:indi = INDICATOR;
if(indi==-1)
printf("\t%s"," " ;
else
printf("\t%s",data);
}
printf("\n" ;
}
} |
|