2.pc

来自「写一个Proc*程序,执行查询: Select * from scott.e」· PC 代码 · 共 59 行

PC
59
字号
#include <stdlib.h>
#include <stdio.h>
#include <string.h> 
EXEC ORACLE OPTION (RELEASE_CURSOR = YES); 
EXEC SQL BEGIN DECLARE SECTION; 
varchar fieldName[20];
Varchar fieldType[20];
varchar vc_user[20]; 
int empno;
VARCHAR ename[15];
VARCHAR job[15];
int mar;
VARCHAR hiredate[20];
float sal;
float comm;
int deptno;
EXEC SQL END DECLARE SECTION; 

EXEC SQL INCLUDE "SQLCA.H";
/*错误处理函数*/ 
void sql_error(char *msg) 
{ 
printf("\n%s,%ld,%s\n", msg,sqlca.sqlcode,(char *)sqlca.sqlerrm.sqlerrmc); 
EXEC SQL ROLLBACK RELEASE; 
exit(-1); 
} 
main() 
{ 
EXEC SQL WHENEVER SQLERROR DO sql_error("ORACLE ERROR: "); 
/*连接数据库*/ 
strcpy(vc_user.arr,"scott/ljh@orcl"); 
vc_user.len=16; 
exec sql connect :vc_user; 
EXEC SQL DECLARE EMP_CURSOR CURSOR FOR
SELECT COLUMN_NAME,DATA_TYPE FROM USER_TAB_COLUMNS WHERE TABLE_NAME='EMP';
EXEC SQL DECLARE cur_emp CURSOR FOR
	SELECT EMPNO,ENAME,JOB, MGR,TO_CHAR(HIREDATE), SAL,NVL(COMM,0), DEPTNO FROM EMP;
//输出表EMP的字段名和类型
EXEC SQL OPEN EMP_CURSOR;
EXEC SQL FETCH EMP_CURSOR INTO :fieldName, :fieldType; 
while(sqlca.sqlcode==0) {		fieldName.arr[fieldName.len]='\0';
		fieldType.arr[fieldType.len]='\0';
		printf("%s-%s\n",fieldName.arr,fieldType.arr);		EXEC SQL FETCH EMP_CURSOR INTO :fieldName, :fieldType;	}
	EXEC SQL CLOSE EMP_CURSOR;
//输出表的查询结果
EXEC SQL OPEN cur_emp; 
while(1) 
{ 
EXEC SQL FETCH cur_emp INTO :empno, :ename, :job,:mar,:hiredate,:sal,:comm,:deptno;
if( sqlca.sqlcode == 1403) 
{ 
break; 
} 
printf("%d %-10s %-10s %5d %-15s %10f %10f %5d\n",empno,ename.arr,job.arr,mar,hiredate.arr,sal,comm,deptno); 
} 
EXEC SQL CLOSE cur_emp; 
EXEC SQL ROLLBACK WORK RELEASE; 
} 

⌨️ 快捷键说明

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