Listing 4. Error-Handling Example
1 #!/usr/bin/perl
2 use Sybase::CTlib;
3 ct_callback(CS_CLIENTMSG_CB, \&msg_cb);
4 ct_callback(CS_SERVERMSG_CB, "srv_cb");
5 $uid = 'sa'; $pwd = 'password'; $srv = 'linux_dev';
6 $X = Sybase::CTlib->ct_connect($uid, $pwd, $srv);
7 $X->ct_execute("select * from sysusers");
8 while(($rc = $X->ct_results($restype)) == CS_SUCCEED) {
9 next if($restype == CS_CMD_DONE || $restype == CS_CMD_FAIL ||
10 $restype == CS_CMD_SUCCEED);
11 if(@names = $X->ct_col_names()) {
12 print "@names\n";
13 }
14 if(@types = $X->ct_col_types()) {
15 print "@types\n";
16 }
17 while(@dat = $X->ct_fetch) {
18 print "@dat\n";
19 }
20 }
21 print "End of Results Sets\n" if($rc == CS_END_RESULTS);
22 print "Error!\n" if($rc == CS_FAIL);
23 sub msg_cb {
24 my($layer, $origin, $severity, $number, $msg, $osmsg) = @_;
25 printf STDERR "\nOpen Client Message: (In msg_cb)\n";
26 printf STDERR "Message number: LAYER = (%ld) ORIGIN = (%ld) ",
27 $layer, $origin;
28 printf STDERR "SEVERITY = (%ld) NUMBER = (%ld)\n",
29 $severity, $number;
30 printf STDERR "Message String: %s\n", $msg;
31 if (defined($osmsg)) {
32 printf STDERR "Operating System Error: %s\n", $osmsg;
33 }
34 CS_SUCCEED;
35 }
36 sub srv_cb {
37 my($cmd, $number, $severity, $state, $line, $server,
38 $proc, $msg) = @_;
39 printf STDERR "\nServer message: (In srv_cb)\n";
40 printf STDERR "Message number: %ld, Severity %ld, ",
41 $number, $severity;
42 printf STDERR "State %ld, Line %ld\n", $state, $line;
43 if (defined($server)) {
44 printf STDERR "Server '%s'\n", $server;
45 }
46 if (defined($proc)) {
47 printf STDERR " Procedure '%s'\n", $proc;
48 }
49 printf STDERR "Message String: %s\n", $msg; CS_SUCCEED;
50 }