29.6. ʹ����������

�� Section 29.4 ���㿴������δ�Ƕ��� SQL ������ִ�� SQL ��䡣 ��Щ�����Щֻʹ���˹̶�����ֵ����û���ṩһ�������û��ṩ����ֵ������еķ����� Ҳû���ṩ�ó�����ʲ�ѯ���ص���ֵ�ķ������������͵������������Ӧ���в����Ǻ����á� ������ϸ������������ C �����Ƕ��� SQL ���֮��ʹ��һ�ֱ��������������Ļ��ƴ������ݡ�

29.6.1. ����

�� C ����� SQL ���֮�䴫��������Ƕ��� SQL ���ر�򵥡����Dz��ð�������������У� ������Ȼ���и��ָ���������Ҫ����������ȷ����ֵ�����ŵȵȣ�����ֻ��Ҫ�� SQL �����д�� C ���������֣�ǰ׺һ��ð�ż��ɡ� ���磺

EXEC SQL INSERT INTO sometable VALUES (:v1, 'foo', :v2);

���������������� C ������һ���� v1����һ���� v2�� ����Ҳʹ��һ����ͨ�� SQL �ִ��ı������������㲢��������ֻʹ��ijһ�����ݡ�

������ SQL �������� C �����ķ�ʽ�� SQL ������κ���Ҫ���ʽ�ĵط��������á� �� SQL �������ǰ����õ� C �������� ����������

29.6.2. ������

Ҫ�ӳ����������ݿ⴫�����ݣ����磬��ѯ�еIJ��������ߴ����ݿ�������򴫻ص����ݣ� ������������ݵ� C ����������һ������ı�Ƕ���������������Ƕ��� SQL Ԥ�������ͻ�����Ҫ��ʲô��

�����������Ĵ��뿪ͷ

EXEC SQL BEGIN DECLARE SECTION;

������Ĵ������

EXEC SQL END DECLARE SECTION;

��������֮�䣬����ͨ�� C ��������������

int   x;
char  foo[16], bar[16];

�ڳ�����������������������Ρ�

��Щ����Ҳͬʱ����ͨ C ��������ʽ���Ե�����ļ��У� ��ˣ����Dz����ٴ��������ǡ���Щ��׼���� SQL ������ʹ�õı���������ͨ��һ������Щ����Ķ�����������

�ṹ�������ϵĶ���Ҳ������ DECLARE �����г��� ����Ԥ���������޷�������Щ���ͣ���Ϊ����֪�����塣

��������� varchar ��ÿ��������ת����һ���� struct �����֡�������������������

varchar var[180];

ת����

struct varchar_var { int len; char arr[180]; } var;

����ṹ�ʺ��ں� SQL �������� varchar �����ݽ�����

29.6.3. SELECT INTO �� FETCH INTO

������Ӧ���ܰ���ij������ɵ����ݴ��ݵ� SQL ��������ȥ�ˡ���������μ���һ����ѯ�Ľ���أ� Ϊ�����Ŀ�ģ�Ƕ��� SQL �ṩ�˳������� SELECT �� FETCH ��������塣 ��Щ������������� INTO �Ӿ䣬����������������ֵ�洢���ĸ����������

������һЩ���ӣ�

/*
 * ������������
 * CREATE TABLE test1 (a int, b varchar(50));
 */

EXEC SQL BEGIN DECLARE SECTION;
int v1;
VARCHAR v2;
EXEC SQL END DECLARE SECTION;

 ...

EXEC SQL SELECT a, b INTO :v1, :v2 FROM test;

���ԣ�INTO �Ӿ������ѡ���б�� FROM �Ӿ�֮�䡣ѡ���б�� INTO ������б��Ԫ�أ�Ҳ��Ŀ���б�����������ͬ��

������ʹ�� FETCH ��������ӣ�

EXEC SQL BEGIN DECLARE SECTION;
int v1;
VARCHAR v2;
EXEC SQL END DECLARE SECTION;

 ...

EXEC SQL DECLARE foo CURSOR FOR SELECT a, b FROM test;

 ...

do {
    ...
    EXEC SQL FETCH NEXT FROM foo INTO :v1, :v2;
    ...
} while (...);

����� INTO �Ӿ�����������������Ӿ���档

��Щ����ֻ��һ�μ���һ�С��������Ҫ������ܶ���һ�еĽ������ ��ô����Ҫʹ���α꣬�������ǵڶ���������ʾ��������

29.6.4. ָʾ��

��������Ӳ��ܴ����ֵ��ʵ���ϣ���������ݿ���ץ��һ����ֵ����ô����ļ������ӻ��׳�һ������ Ҫ�ܹ������ݿ��д��ݿ�ֵ�����ߴ����ݿ��м�����ֵ������Ҫ��ÿ���������ݵ������������渽��һ����������������� ��ڶ�������������ָʾ�����������һ����־�� �������������Ƿ�Ϊ�գ����Ϊ�գ���ô������������������ֵ�Ϳ��Ժ��ԡ� ������һ������ȷ������ֵ�����ӣ�

EXEC SQL BEGIN DECLARE SECTION;
VARCHAR val;
int val_ind;
EXEC SQL END DECLARE SECTION:

 ...

EXEC SQL SELECT b INTO :val :val_ind FROM test1;

�����ֵ���ǿգ���ôָʾ������ val_ind �����㣬 ���ֵ�ǿգ���ô�����Ǹ�����

ָʾ����������һ����;�����������������ô����ʶ��ֵ���ǿգ� ��������ֵ�洢�������������ʱ�򱻽ض��ˡ�