@@ -7,60 +7,100 @@ EXEC SQL typedef short mmSmallInt;
7
7
8
8
EXEC SQL BEGIN DECLARE SECTION;
9
9
struct TBempl
10
- {
11
- mmInteger idnum;
12
- mmChar name[21];
13
- mmSmallInt accs;
14
- };
10
+ {
11
+ mmInteger idnum;
12
+ mmChar name[21];
13
+ mmSmallInt accs;
14
+ mmChar byte[20];
15
+ };
15
16
EXEC SQL END DECLARE SECTION;
16
17
17
- int main(void)
18
+ int
19
+ main (void)
18
20
{
19
- EXEC SQL BEGIN DECLARE SECTION;
20
- struct TBempl empl;
21
- EXEC SQL END DECLARE SECTION;
22
- FILE *dbgs;
21
+ EXEC SQL BEGIN DECLARE SECTION;
22
+ struct TBempl empl;
23
+ char *data = "\\001\\155\\000\\212";
24
+ union
25
+ {
26
+ mmSmallInt accs;
27
+ char t[2];
28
+ } a;
29
+ EXEC SQL END DECLARE SECTION;
30
+ FILE *dbgs;
31
+ int i;
32
+
33
+ if ((dbgs = fopen ("log", "w")) != NULL)
34
+ ECPGdebug (1, dbgs);
35
+
36
+ empl.idnum = 1;
37
+ EXEC SQL connect to mm;
38
+ if (sqlca.sqlcode)
39
+ {
40
+ printf ("connect error = %ld\n", sqlca.sqlcode);
41
+ exit (sqlca.sqlcode);
42
+ }
43
+
44
+ EXEC SQL create table empl
45
+ (idnum integer, name char (20), accs smallint, byte bytea);
46
+ if (sqlca.sqlcode)
47
+ {
48
+ printf ("create error = %ld\n", sqlca.sqlcode);
49
+ exit (sqlca.sqlcode);
50
+ }
51
+
52
+ EXEC SQL insert into empl values (1, 'first user', 320,:data);
53
+ if (sqlca.sqlcode)
54
+ {
55
+ printf ("insert error = %ld\n", sqlca.sqlcode);
56
+ exit (sqlca.sqlcode);
57
+ }
58
+
59
+ EXEC SQL select name, accs, byte into:empl.name,:empl.accs,:empl.byte from empl where idnum =:empl.idnum;
60
+ if (sqlca.sqlcode)
61
+ {
62
+ printf ("select error = %ld\n", sqlca.sqlcode);
63
+ exit (sqlca.sqlcode);
64
+ }
65
+ printf ("name=%s, accs=%d byte=%s\n", empl.name, empl.accs, empl.byte);
66
+
67
+ EXEC SQL DECLARE C CURSOR FOR select name, accs, byte from empl where idnum =:empl.idnum;
68
+ EXEC SQL OPEN C;
69
+ EXEC SQL FETCH C INTO:empl.name,:empl.accs,:empl.byte;
70
+ if (sqlca.sqlcode)
71
+ {
72
+ printf ("fetch error = %ld\n", sqlca.sqlcode);
73
+ exit (sqlca.sqlcode);
74
+ }
23
75
24
- if ((dbgs = fopen("log", "w")) != NULL)
25
- ECPGdebug(1, dbgs);
26
-
27
- empl.idnum = 1;
28
- EXEC SQL connect to mm;
29
- if (sqlca.sqlcode)
30
- {
31
- printf("connect error = %ld\n", sqlca.sqlcode);
32
- exit(sqlca.sqlcode);
33
- }
76
+ printf ("name=%s, accs=%d byte=%s\n", empl.name, empl.accs, empl.byte);
34
77
35
- EXEC SQL create table empl
36
- (
37
- idnum integer,
38
- name char(20),
39
- accs smallint
40
- );
41
- if (sqlca.sqlcode)
42
- {
43
- printf("select error = %ld\n", sqlca.sqlcode);
44
- exit(sqlca.sqlcode);
45
- }
78
+ memset(empl.name, 0, 21L);
79
+ memset(empl.byte, '#', 20L);
80
+ EXEC SQL DECLARE B BINARY CURSOR FOR select name, accs, byte from empl where idnum =:empl.idnum;
81
+ EXEC SQL OPEN B;
82
+ EXEC SQL FETCH B INTO :empl.name,:a.accs,:empl.byte;
83
+ if (sqlca.sqlcode)
84
+ {
85
+ printf ("fetch error = %ld\n", sqlca.sqlcode);
86
+ exit (sqlca.sqlcode);
87
+ }
46
88
47
- EXEC SQL insert into empl values (1, 'first user', 20);
48
- if (sqlca.sqlcode)
49
- {
50
- printf("select error = %ld\n", sqlca.sqlcode);
51
- exit(sqlca.sqlcode);
52
- }
89
+ EXEC SQL CLOSE B;
53
90
54
- EXEC SQL select name, accs
55
- into :empl.name, :empl.accs
56
- from empl where idnum = :empl.idnum;
57
- if (sqlca.sqlcode)
58
- {
59
- printf("select error = %ld\n", sqlca.sqlcode);
60
- exit(sqlca.sqlcode);
61
- }
62
- printf("name=%s, accs=%d\n", empl.name, empl.accs);
63
- EXEC SQL disconnect;
64
- fclose(dbgs);
65
- exit(0);
91
+ i=a.t[0];
92
+ a.t[0]=a.t[1];
93
+ a.t[1]=i;
94
+
95
+ printf ("name=%s, accs=%d byte=", empl.name, a.accs);
96
+ for (i=0; i<20; i++)
97
+ {
98
+ if (empl.byte[i] == '#')
99
+ break;
100
+ printf("(%o)", (unsigned char)empl.byte[i]);
101
+ }
102
+ printf("\n");
103
+ EXEC SQL disconnect;
104
+ fclose (dbgs);
105
+ exit (0);
66
106
}
0 commit comments