Oracle实验总结

这篇博客总结了Oracle数据库的配置,包括TNSNAMES.ORA文件的设置;展示了Oracle查询语句的使用,如层次查询和DECODE函数;并详细介绍了如何通过C程序连接Oracle服务器,读取数据库记录并写入文件,最后提供了程序编译与运行的步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(一) 网络配置文件
# TNSNAMES.ORA Network Configuration File: E:/Oracle/NETWORK/ADMIN/tnsnames.ora
# Generated by Oracle configuration tools.

  ELEMENT1 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.181)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = Element.com)
    )
  )
#其中HOST = 192.168.0.181 (此处为目标主机的IP地址或计算机名)
#SERVICE_NAME为目标主机的服务名,引处为Element.com.

(二) Oracle的查询
      select level empno,ename,mgr from emp connect by
      prior empno=mgr start with empno=7839
     
     select ename,sal,
         decode(sign(sal-3000),1,'A',
         decode(sign(sal-2000),1,'B','C'))
         grade from emp

(三) 编程实现从Oracle数据库中读出记录到文件
/*****Exam.pc*********/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sqlca.h>

#define SQLNOTFOUND  1403
EXEC SQL INCLUDE SQLCA;

FILE * fp_log;

void connect()
{
 EXEC SQL BEGIN DECLARE SECTION;
  VARCHAR username[10], password[10], server[10];
 EXEC SQL END DECLARE SECTION;

 /* 输入用户名、口令以及服务器名 */
 printf("/n输入用户名:");
 gets(username.arr);
 username.len=(unsigned short)strlen((char *)username.arr);
 printf("/n输入口令:");
 gets(password.arr);
 password.len=(unsigned short)strlen((char *)password.arr);
 printf("/n输入服务器名:");
 gets(server.arr);
 server.len=(unsigned short)strlen((char *)server.arr);
 /* 连接到Oracle服务器上 */
 EXEC SQL CONNECT :username IDENTIFIED BY :password USING :server;
 printf("/n以用户%s成功地连接到了服务器%s上!/n", username.arr, server.arr);
}


void disconnect()
{
 char temp;
 printf("/n是否在断开连接前提交所有事务? (Y/N)");
 scanf("%c", &temp);
 fflush(stdin);
 if(temp !='Y' && temp != 'y')
 {
  /* 回退事务,断开连接。 */
  EXEC SQL ROLLBACK WORK RELEASE;
  printf("/n回退事务,断开连接,退出程序!/n/n");
 }
 else
 {
  /* 提交事务,断开连接。 */
  EXEC SQL COMMIT WORK RELEASE;
  printf("/n提交事务,断开连接,退出程序!/n/n");
  exit(1);
 }
}

void delspace(char *sstr)
{
 while(strlen(sstr)>1 && sstr[strlen(sstr)-1]==' ' )
 {
  sstr[strlen(sstr)-1]='/0';
 }
}

void main(int argc,char**argv)
{
EXEC SQL BEGIN DECLARE SECTION;
 VARCHAR sql_text[256];
 char ename[12];
 char job[10];
 char sal[10];
EXEC SQL END DECLARE SECTION;

 FILE * fp;

    char fdataname[64];   /*数据文件名*/
   
  connect();/*连接到数据库*/

   memset( fdataname, '/0', 64 );
   strcpy( fdataname, "D://oracle//proc//emp.txt");
   if ((fp = fopen(fdataname,"a+")) == NULL)
    {
        printf("Error opening %s/n",fdataname);
        return;
    }

strcpy(sql_text.arr,"select ename, job, sal from emp ");
sql_text.len=(unsigned short)strlen((char *)sql_text.arr);

EXEC SQL PREPARE pre_sql1 FROM :sql_text;

EXEC SQL DECLARE c1 CURSOR FOR pre_sql1;

   EXEC SQL open c1;
   while(1)
   {
 printf("DEBUG_1:sqlcode=%d",sqlca.sqlcode);
 EXEC SQL fetch c1 into :ename, :job, :sal;
 printf("DEBUG_2:sqlcode=%d",sqlca.sqlcode);
 if( (sqlca.sqlcode == SQLNOTFOUND) || (sqlca.sqlcode <0) ) break;
                printf("DEBUG01:ename=%s",ename);
         delspace(ename);
  delspace(job);
  delspace(sal);
        fprintf(fp,"%s,%s,%s/n",
   ename, job, sal);
   }
   EXEC SQL close c1;
fclose(fp);
/*---------------------------------------------*/
  disconnect();
}

proc sqlcheck=full userid=scott/tiger@ora9205 iname=Exam.pc

生成程序:Exam.c

设置环境变量如下:(安装VC++)
set LIB=D:/Program Files/Microsoft Visual Studio/VC98/Lib
set INCLUDE=D:/Program Files/Microsoft Visual Studio/VC98/Include;D:/oracle/ora92/precomp/public

CL Exam.c /link D:/oracle/ora92/precomp/lib/msvc/oraSQL9.LI

生成:Exam.exe

运行Exam即可把数据导入到emp.txt中.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值