⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 script_86_proc_witherrorprocess.txt

📁 orale培训教材包括了所有的sql说明和实例
💻 TXT
字号:

---------- .txt ----------
/*
范例名称:使用demo_proc.mk编译连接PRO*C程序
文件名称:
*/


make  -f  demo_proc.mk   .pc文件名

--注意:本部分练习使用sm_emp,scott用户内置emp表

---------- create_table_sm.txt ----------
--sm_emp建表语句
create table sm_emp
(EmpID char(10) primary key,
Name   varchar2(10),
salary number(8,2),
TelNo  char(8));

insert into sm_emp values('0000000007','007',77,'77777777');
insert into sm_emp values('0000000009','009',99,'99999999');



---------- connect.pc ----------
/*
 * name:pro*c c程序,使用scott完成数据库连接,并取回sysdate显示
 * file name :connect.pc
 */

/*必须首先包含相应头文件*/
#include <stdlib.h>
#include <stdio.h>

/*宿主变量声明区*/
EXEC SQL BEGIN DECLARE SECTION;

/*VARCHAR型必须指定长度*/
/*如果不指定长度,编译报错*/
/*VARCHAR v_date*/
VARCHAR v_date[20]; 

/*用户USERNAME,PASSWORD*/
char* userid;
EXEC SQL END DECLARE SECTION;


/*需包含SQLCA.H,使用以下两种方法都可以*/
/*EXEC SQL INCLUDE SQLCA.H;*/
#include <sqlca.h>


int main(int argc, char *argv[])
{
	
    /*用户USERNAME和PASSWORD*/
    userid="scott/tiger";

    /*使用用户名,口令连接本地服务器*/
    EXEC SQL CONNECT :userid;
    printf("user scott connected to oracle\n");
    
    /*嵌入式SQL语句取得sysdate*/
    EXEC SQL SELECT SYSDATE INTO :v_date FROM DUAL;

    
    /*在c语言中引用varchar变量的成员:v_date.arr*/
    /*须指定printf的显示格式为%s,字符串*/
    printf("get sysdate :%s",v_date.arr);

    /*在c语言中引用varchar变量的成员:v_date.len*/
    printf("\nget sysdate lenth:%d",v_date.len);

    /*结束数据库连接,commit*/
    EXEC SQL COMMIT  WORK RELEASE;
	printf ("\nEnd of the Pro*C Sample example program.\n");
	return 0;
}




---------- dml.pc ----------
/*
 * name:pro*c c程序,使用scott完成数据库连接,向sm_emp插入
 * file name :dml.pc
 */

/*必须首先包含相应头文件,stdlib.h中包括了string.h*/
#include <stdlib.h>
#include <stdio.h>

/*宿主变量声明区*/
EXEC SQL BEGIN DECLARE SECTION;

/*VARCHAR型必须指定长度*/
/*如果不指定长度,编译报错*/
/*VARCHAR v_id*/
VARCHAR v_id[10]; 
VARCHAR v_name[10];
VARCHAR v_telno[8];
float f_sal;

/*用户USERNAME,PASSWORD*/
char* userid;


EXEC SQL END DECLARE SECTION;


/*需包含SQLCA.H,使用以下两种方法都可以*/
/*EXEC SQL INCLUDE SQLCA.H;*/
#include <sqlca.h>


int main(int argc, char *argv[])
{
	
    /*用户USERNAME和PASSWORD*/
    userid="scott/tiger";
    server = "ora8";

    /*使用用户名,口令连接本地服务器*/
    EXEC SQL CONNECT :userid;

   
    printf("user scott connected to oracle\n");

    
    /*方法1:嵌入式SQL语句插入纪录 empid='0000000008'
    EXEC SQL INSERT INTO SM_EMP (empid,name,salary,telno)  VALUES('0000000008','008',888,'88888888');
    printf("\ninsert ok");
    */


    /*方法2:使用宿主变量,插入数据*/
    /*v_id.arr="0000000008";编译出错!*/
    /*strcpy完成对varchar赋字符串*/
    strcpy((char *)v_id.arr,"0000000008");
    /*strlen完成对varchar.len赋值,如果未赋值varchar.len,只赋值varchar.arr插入可能不成功*/
    v_id.len = (short) strlen((char *)v_id.arr);


    strcpy((char *)v_name.arr,"008");
    v_name.len = (short) strlen((char *)v_name.arr);

    strcpy((char *)v_telno.arr,"88888888");
    v_telno.len = (short) strlen((char *)v_telno.arr);
    
    f_sal = 888;

    /*即使是varchar宿主变量,在嵌入式sql中也只用:宿主变量名引用(如:v_id),不必指明其.arr*/
    EXEC SQL INSERT INTO SM_EMP (empid,name,salary,telno)  VALUES(:v_id,:v_name,:f_sal,:v_telno);
    /*EXEC SQL INSERT INTO SM_EMP (empid,name,salary,telno)  VALUES(:v_id,'008',888,'88888888');*/

    printf("\ninsert ok");

    EXEC SQL DELETE FROM sm_emp WHERE empid='0000000007';
    /*delete record*/
    printf("\ndelete ok");

    /*结束数据库连接,commit*/
    EXEC SQL COMMIT  WORK RELEASE;
	printf ("\nEnd of the Pro*C Sample example program.\n");
	return 0;
}




---------- error_process_r.pc ----------
/*
 * name:pro*c c程序,使用scott完成数据库连接,向sm_emp插入
 * file name :error_process_r.pc
 */

/*必须首先包含相应头文件,stdlib.h中包括了string.h*/
#include <stdlib.h>
#include <stdio.h>

/*宿主变量声明区*/
EXEC SQL BEGIN DECLARE SECTION;

/*VARCHAR型必须指定长度*/
/*如果不指定长度,编译报错*/
/*VARCHAR v_id*/
VARCHAR v_id[10]; 
VARCHAR v_name[10];
VARCHAR v_telno[8];
float f_sal;

/*用户USERNAME,PASSWORD*/
char* userid;
/*字符指针存储service名*/
char* server;

EXEC SQL END DECLARE SECTION;


/*需包含SQLCA.H,使用以下两种方法都可以*/
/*EXEC SQL INCLUDE SQLCA.H;*/
#include <sqlca.h>


int main(int argc, char *argv[])
{
	
    /*用户USERNAME和PASSWORD*/
    userid="scott/tiger";
    server = "ora8";

   /*运行时错误处理语句,出现sql错误跳到标号errexit,处理错误*/
   EXEC SQL WHENEVER SQLERROR GOTO errexit;

    /*使用用户名,口令连接本地服务器
    EXEC SQL CONNECT :userid;*/

    /*使用service名连接远端服务器*/
    EXEC SQL CONNECT :userid USING :server;
    printf("user scott connected to oracle\n");

    
    /*方法1:嵌入式SQL语句插入纪录 empid='0000000008'
    EXEC SQL INSERT INTO SM_EMP (empid,name,salary,telno)  VALUES('0000000008','008',888,'88888888');
    printf("\ninsert ok");
    */


    /*方法2:使用宿主变量,插入数据*/
    /*v_id.arr="0000000008";编译出错!*/
    /*strcpy完成对varchar赋字符串*/
    strcpy((char *)v_id.arr,"0000000008");
    /*strlen完成对varchar.len赋值,如果未赋值varchar.len,只赋值varchar.arr插入可能不成功*/
    v_id.len = (short) strlen((char *)v_id.arr);


    strcpy((char *)v_name.arr,"008");
    v_name.len = (short) strlen((char *)v_name.arr);

    strcpy((char *)v_telno.arr,"88888888");
    v_telno.len = (short) strlen((char *)v_telno.arr);
    
    f_sal = 888;

    /*即使是varchar宿主变量,在嵌入式sql中也只用:宿主变量名引用(如:v_id),不必指明其.arr*/
    EXEC SQL INSERT INTO SM_EMP (empid,name,salary,telno)  VALUES(:v_id,:v_name,:f_sal,:v_telno);
    /*EXEC SQL INSERT INTO SM_EMP (empid,name,salary,telno)  VALUES(:v_id,'008',888,'88888888');*/

    printf("\ninsert ok");

    EXEC SQL DELETE FROM sm_emp WHERE empid='0000000007';
    /*delete record*/
    printf("\ndelete ok");

    /*结束数据库连接,commit*/
    EXEC SQL COMMIT  WORK RELEASE;
	printf ("\nEnd of the Pro*C Sample example program.\n");
	return 0;

errexit:
   /*错误处理语句,显示sqlca.sqlerrm.sqlerrmc中的信息*/
   printf("%.70s \n", sqlca.sqlerrm.sqlerrmc);
   printf("%d\n",  -sqlca.sqlcode);
   /*截断WHENEVER SQLERROR GOTO errexit的作用范围,变为WHENEVER SQLERROR CONTINUE*/
   EXEC SQL WHENEVER SQLERROR CONTINUE;
   /*ROLLBACK,并断开连接*/
   EXEC SQL ROLLBACK WORK RELEASE;
   return;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -