?? script_86_proc.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;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -