免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 8565 | 回复: 22
打印 上一主题 下一主题

[C] Proc和Makefile问题,谢谢 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-09-01 16:15 |只看该作者 |倒序浏览
12可用积分
#include <sqlca.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sqlda.h>
#include <sqlcpr.h>

exec sql include sqlca;
exec sql include oraca;
exec oracle option (oraca=yes);

EXEC SQL BEGIN DECLARE SECTION ;
VARCHAR username[20];
varchar password[40];
varchar dbName[20];
EXEC SQL END DECLARE SECTION ;

void sql_error(char *msg)
{
    char err_msg[512];
    size_t buf_len, msg_len;
    EXEC SQL WHENEVER SQLERROR CONTINUE;
    printf("\n%s\n", msg);

    buf_len = sizeof (err_msg);
    sqlglm(err_msg, &buf_len, &msg_len);
    printf("%.*s\n", msg_len, err_msg);

    EXEC SQL ROLLBACK RELEASE;
    exit(EXIT_FAILURE);
}

void main()
{
                strncpy((char *) username.arr, "kf", 20);
               
                username.len =
                (unsigned short) strlen((char *) username.arr);
                       
                strncpy((char *) password.arr, "kf123", 40);
                password.len =
                (unsigned short) strlen((char *) password.arr);
               
                strcpy(dbName .arr,"KF20");
                dbName .len = strlen(dbName .arr);
               
                EXEC SQL WHENEVER SQLERROR DO sql_error("ORACLE error--\n");
                               
                EXEC SQL CONNECT :username IDENTIFIED BY :password USING :dbName;
                printf("\nConnected to ORACLE as user: %s\n", username.arr);
                               
                EXEC SQL ROLLBACK WORK RELEASE;
                exit(EXIT_SUCCESS);
}
编译时出现错误:
"alarm.c", line 708: Error: Too many arguments in call to "sqlorat()".
"alarm.c", line 719: Error: Too many arguments in call to "sqlcxt()".
对应的alarm.c部分为:
   693  void sql_error(char *msg)
   694  {
   695      char err_msg[512];
   696      size_t buf_len, msg_len;
   697      /* EXEC SQL WHENEVER SQLERROR CONTINUE; */
   698
   699      printf("\n%s\n", msg);
   700
   701      buf_len = sizeof (err_msg);
   702      sqlglm(err_msg, &buf_len, &msg_len);
   703      printf("%.*s\n", msg_len, err_msg);
   704
   705      /* EXEC SQL ROLLBACK RELEASE; */
   706
   707  {
   708      struct sqlexd sqlstm;
   709      sqlorat((void **)0, &sqlctx, &oraca);
   710      sqlstm.sqlvsn = 12;
   711      sqlstm.arrsiz = 0;
   712      sqlstm.sqladtp = &sqladt;
   713      sqlstm.sqltdsp = &sqltds;
   714      sqlstm.iters = (unsigned int  )1;
   715      sqlstm.offset = (unsigned int  )5;
   716      sqlstm.cud = sqlcud0;
   717      sqlstm.sqlest = (unsigned char  *)&sqlca;
   718      sqlstm.sqlety = (unsigned short)256;
   719      sqlstm.occurs = (unsigned int  )0;
   720      sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
   721  }
   722
   723
   724      exit(EXIT_FAILURE);
   725  }
二楼我贴上Makefile代码

论坛徽章:
0
2 [报告]
发表于 2008-09-01 16:17 |只看该作者
Makefile内容为:
ORACLE_HOME=/oracle/app/oracle/product/9.2.0
CC=CC
CXX=c++
PROC=proc
LD=ld
CCFLAGS=-g -DUNIX -I.
CXXFLAGS=-g -DUNIX -I.
PROCINCL1=$(ORACLE_HOME)/oci/include
PROCINCL2=$(ORACLE_HOME)/precomp/public
PROCINCL3=-D_REENTRANT -DSS_64BIT_SERVER -DBIT64 -DMACHINE64 -DPRECOMP -I. -I$(ORACLE_HOME)/precomp/public -I$(ORACLE_HOME)/rdbms/public -I$(ORACLE_HOME)/rdbms/demo -I$(ORACLE_HOME)/plsql/public -I$(ORACLE_HOME)/network/public -DSLMXMX_ENABLE -DSLTS_ENABLE -D_SVID_GETTOD -D_REENTRANT
PROCLIB=-L$(ORACLE_HOME)/lib/ -lclntsh -lnbeq9 -lnhost9 -lnus9 -lnldap9 -lldapclnt9  -lnsslb9 -lnnis9   -lnoname9 -lntcp9 -lntcps9 -lnsslb9 -lntcp9 -lntns9  -lnsl -lsocket -lgen -ldl -R$(ORACLE_HOME)/lib -laio -lposix4 -lm -lthread
LDFLAGS=-g


all:alarm
alarm:alarm.o
        $(CC) $(LDFLAGS) -o alarm alarm.o $(PROCLIB) -m64
alarm.o:alarm.c
        $(CC) $(PROCINCL3) -c alarm.c -m64
alarm.c:alarm.pc
        $(PROC) CLOSE_ON_COMMIT?NO iname=alarm.pc include=$(PROCINCL1) include=$(PROCINCL2)




教教我有什么办法解决吧,谢谢大家

论坛徽章:
0
3 [报告]
发表于 2008-09-01 16:18 |只看该作者
先不看代码了,LZ是自己写的还是改例子的?如果自己写的,为啥不改一下例子

论坛徽章:
0
4 [报告]
发表于 2008-09-01 16:26 |只看该作者
忘了说了OS是SunOS 5.10 ,Oracle是9.2

论坛徽章:
4
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:11IT运维版块每日发帖之星
日期:2016-08-11 06:20:00IT运维版块每日发帖之星
日期:2016-08-15 06:20:00
5 [报告]
发表于 2008-09-01 16:27 |只看该作者

回复 #1 sea_soft 的帖子

只有这一个文件alarm.c吧?
EXEC SQL WHENEVER SQLERROR DO sql_error("ORACLE error--\n");

sql_error中传递了一个参数(字符串)的缘故引起的问题吗?你试试:
EXEC SQL WHENEVER SQLERROR DO sql_error();

论坛徽章:
0
6 [报告]
发表于 2008-09-01 16:30 |只看该作者
原帖由 贺兰云天 于 2008-9-1 16:18 发表
先不看代码了,LZ是自己写的还是改例子的?如果自己写的,为啥不改一下例子

用的这位仁兄的Makefile
http://bbs.chinaunix.net/viewthr ... ;highlight=Makefile
Oracle自带的Makefile没找到,谢谢

论坛徽章:
1
申猴
日期:2014-02-11 14:50:31
7 [报告]
发表于 2008-09-01 16:31 |只看该作者
EXEC SQL ROLLBACK RELEASE;

应该改为:
EXEC SQL ROLLBACK;
或者
EXEC SQL ROLLBACK WORK RELEASE;

试试看

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
8 [报告]
发表于 2008-09-01 16:31 |只看该作者

EXEC SQL ROLLBACK RELEASE;
改成
EXEC SQL ROLLBACK;
试试。

论坛徽章:
0
9 [报告]
发表于 2008-09-01 16:34 |只看该作者
原帖由 happy_fish100 于 2008-9-1 16:27 发表
只有这一个文件alarm.c吧?
EXEC SQL WHENEVER SQLERROR DO sql_error("ORACLE error--\n");

sql_error中传递了一个参数(字符串)的缘故引起的问题吗?你试试:
EXEC SQL WHENEVER SQLERROR DO sql_error();

多谢,不过还是出那个错误,问题依旧,谢谢

论坛徽章:
0
10 [报告]
发表于 2008-09-01 16:36 |只看该作者
原帖由 chenzhanyiczy 于 2008-9-1 16:31 发表
EXEC SQL ROLLBACK RELEASE;

应该改为:
EXEC SQL ROLLBACK;
或者
EXEC SQL ROLLBACK WORK RELEASE;

试试看

多谢,还是报告那个错误
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP