概述
Oracle脚本案例
-- 01 创建表空间
-- 注意表空间的路径 根据实际安装环境进行调整
CREATE TABLESPACE ts_myscott01
LOGGING
DATAFILE '/home/oracle/ts_myscott01.dbf' SIZE 10M
EXTENT MANAGEMENT LOCAL;
CREATE TABLESPACE ts_myscott02
LOGGING
DATAFILE '/home/oracle/ts_myscott02.dbf' SIZE 20M
EXTENT MANAGEMENT LOCAL;
ALTER DATABASE DATAFILE '/home/oracle/ts_myscott01.dbf' AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED;
ALTER DATABASE DATAFILE '/home/oracle/ts_myscott02.dbf' AUTOEXTEND ON NEXT 20M MAXSIZE UNLIMITED;
commit;
-- 02 创建方案 (创建用户)
CREATE USER MYSCOTT PROFILE DEFAULT
IDENTIFIED BY MYSCOTT DEFAULT TABLESPACE USERS
ACCOUNT UNLOCK;
-- 资源和登录权限
GRANT RESOURCE TO MYSCOTT;
GRANT create session TO MYSCOTT;
-- 03 创建表
-- 创建部门表 并赋值
CREATE TABLE MYSCOTT.DEPT(
DEPTNO NUMBER(2) PRIMARY KEY,
DNAME VARCHAR2(14) NOT NULL,
LOC VARCHAR2(13)
)TABLESPACE ts_myscott01;
INSERT INTO MYSCOTT.dept VALUES(10, 'ACCOUNTING', 'NEW YORK');
INSERT INTO MYSCOTT.dept VALUES(20, 'RESEARCH', 'DALLAS');
INSERT INTO MYSCOTT.dept VALUES(30, 'SALES', 'CHICAGO');
INSERT INTO MYSCOTT.dept VALUES(40, 'OPERATIONS', 'BOSTON');
commit;
-- 创建员工表 并赋值
CREATE TABLE MYSCOTT.EMP(
EMPNO NUMBER(4) constraint emp_empno_pk PRIMARY KEY,
ENAME VARCHAR2(10) constraint emp_ename_notnull NOT NULL,
JOB VARCHAR2(9),
MGR NUMBER(4),
HIREDATE DATE,
SAL NUMBER(7,2) constraint emp_sal_check check (SAL>0),
COMM NUMBER(7,2),
DEPTNO NUMBER(2) constraint emp_deptno_fk references MYSCOTT.dept(deptno)
)TABLESPACE ts_myscott01;
--创建索引 在新的表空间上
CREATE INDEX MYSCOTT.IX_CAtbAuditOperInfo_OT ON MYSCOTT.EMP(ENAME) TABLESPACE ts_myscott02;
INSERT INTO MYSCOTT.EMP VALUES(7369, 'SMITH', 'CLERK', 7902, '17-12月-80', 800, NULL, 20);
INSERT INTO MYSCOTT.EMP VALUES(7499, 'ALLEN', 'SALESMAN', 7698, '20-2月 -81', 1600, 300, 30);
INSERT INTO MYSCOTT.EMP VALUES(7521, 'WARD', 'SALESMAN', 7698, '22-2月 -81', 1250, 500, 30);
INSERT INTO MYSCOTT.EMP VALUES(7566, 'JONES', 'MANAGER', 7839, '02-4月 -81', 2975, NULL, 20);
INSERT INTO MYSCOTT.EMP VALUES(7654, 'MARTIN', 'SALESMAN', 7698, '28-9月 -81', 1250, 1400, 30);
INSERT INTO MYSCOTT.EMP VALUES(7698, 'BLAKE', 'MANAGER', 7839, '01-5月 -81', 2850, NULL, 30);
INSERT INTO MYSCOTT.EMP VALUES(7782, 'CLARK', 'MANAGER', 7839, '09-6月 -81', 2450, NULL, 10);
INSERT INTO MYSCOTT.EMP VALUES(7788, 'SCOTT', 'ANALYST', 7566, '19-4月 -87', 3000, NULL, 20);
INSERT INTO MYSCOTT.EMP VALUES(7839, 'KING', 'PRESIDENT', NULL, '17-11月-81', 5000, NULL, 10);
INSERT INTO MYSCOTT.EMP VALUES(7844, 'TURNER', 'SALESMAN', 7698, '08-9月 -81', 1500, 0, 30);
INSERT INTO MYSCOTT.EMP VALUES(7876, 'ADAMS', 'CLERK', 7788, '23-5月 -87', 1100, NULL, 20);
INSERT INTO MYSCOTT.EMP VALUES(7900, 'JAMES', 'CLERK', 7698, '03-12月-81', 950, NULL, 30);
INSERT INTO MYSCOTT.EMP VALUES(7902, 'FORD', 'ANALYST', 7566, '03-12月-81', 3000, NULL, 20);
INSERT INTO MYSCOTT.EMP VALUES(7934, 'MILLER', 'CLERK', 7782, '23-1月 -82', 1300, NULL, 10);
commit;
-- 创建工资级别表 并赋值
CREATE TABLE MYSCOTT.SALGRADE(
GRADE NUMBER,
LOSAL NUMBER,
HISAL NUMBER
)TABLESPACE ts_myscott01;
INSERT INTO MYSCOTT.SALGRADE VALUES(1, 700, 1200);
INSERT INTO MYSCOTT.SALGRADE VALUES(2, 1201, 1400);
INSERT INTO MYSCOTT.SALGRADE VALUES(3, 1401, 2000);
INSERT INTO MYSCOTT.SALGRADE VALUES(4, 2001, 3000);
INSERT INTO MYSCOTT.SALGRADE VALUES(5, 3001, 9999);
commit;
--创建奖金表
CREATE TABLE MYSCOTT.BONUS(
ENAME VARCHAR2(10),
JOB VARCHAR2(9),
SAL NUMBER,
COMM NUMBER
)TABLESPACE ts_myscott01;
------停止-----
-- 04创建新用户方案 通过MYSCOTTUSER1来访问数据库, 权限配置演示
CREATE USER "MYSCOTTUSER1" PROFILE "DEFAULT" IDENTIFIED BY "123456" DEFAULT TABLESPACE "USERS" ACCOUNT UNLOCK;
GRANT "CONNECT" TO "MYSCOTTUSER1";
GRANT SELECT ANY TABLE TO "MYSCOTTUSER1";
GRANT DELETE ON MYSCOTT.DEPT TO "MYSCOTTUSER1";
GRANT INSERT ON MYSCOTT.DEPT TO "MYSCOTTUSER1";
GRANT UPDATE ON MYSCOTT.DEPT TO "MYSCOTTUSER1";
GRANT DELETE ON MYSCOTT.EMP TO "MYSCOTTUSER1";
GRANT INSERT ON MYSCOTT.EMP TO "MYSCOTTUSER1";
GRANT UPDATE ON MYSCOTT.EMP TO "MYSCOTTUSER1";
commit;
Oracle实现命令行工具
/* 包含C头文件 */
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <setjmp.h>
#include <sqlcpr.h>
/* 包含SQLDA和SQLCA结构 */
#include <sqlda.h>
#include <sqlca.h>
/* 定义绑定变量和选择列表项的最大个数 */
#define MAX_ITEMS 40
/* 定义绑定变量和选择列表项名称的最大长度 */
#define MAX_VNAME_LEN 30
/* 定义指示变量名称的最大长度 */
#define MAX_INAME_LEN 30
void connect();
void sql_error();
void alloc_descriptors(int , int , int);
void dealloc_descriptors();
void set_bind_variables();
void process_select_list();
/* 定义绑定描述区和选择描述区 */
SQLDA* bind_dp;
SQLDA* select_dp;
/* 定义输入宿主变量:存放动态SQL语句 */
char sql_stat[100];
char current_date[20];
int main()
{
/* 安装错误处理句柄 */
exec sql whenever sqlerror do sql_error();
/* 连接到数据库 */
connect2();
/* 分配绑定描述区和选择描述区 */
alloc_descriptors(MAX_ITEMS , MAX_VNAME_LEN , MAX_INAME_LEN);
for( ; ; )
{
printf("请输入动态SQL语句(exit:退出):");
gets(sql_stat);
/* EXIT(exit):退出 */
if(0 == strncmp(sql_stat , "exit" , 4) || 0 == strncmp(sql_stat , "EXIT" , 4))
break;
/* 准备动态SQL语句 */
exec sql prepare s from :sql_stat;
/* 定义游标 */
exec sql declare c cursor for s;
/* 出错,继续下一循环 */
if(0 != sqlca.sqlcode)
continue;
/* 设置绑定变量 */
set_bind_variables();
/*
* 打开游标
* select语句:生成结果集
* 其他SQL语句:执行语句
*/
exec sql open c using descriptor bind_dp;
/*
* select语句
*/
if(0 == strncmp(sql_stat , "select" , 6) || 0 == strncmp(sql_stat , "SELECT" , 6))
{
process_select_list();
}
/* 关闭游标 */
exec sql close c;
}
/* 释放选择描述区和选择描述区 */
dealloc_descriptors();
/* 提交事务,断开连接 */
exec sql commit work release;
puts("谢谢使用Oracle动态SQL方法四!n");
return 0;
}
void connect2()
{
/* 定义宿主变量 */
char username[20] , password[20] , server[20];
/* 输入用户名、口令和网络服务名 */
printf("输入用户名:");
gets(username);
printf("输入口令:");
gets(password);
printf("输入网络服务名:");
gets(server);
/* 连接到数据库 */
EXEC SQL CONNECT :username identified by :password using :server;
}
void sql_error()
{
/* 显示SQL错误信息 */
printf("%.*sn" , sqlca.sqlerrm.sqlerrml , sqlca.sqlerrm.sqlerrmc);
}
void alloc_descriptors(int size , int max_vname_len , int max_iname_len)
{
int i;
/* 分配绑定描述区和选择描述区 */
bind_dp = SQLSQLDAAlloc(0 , size , MAX_VNAME_LEN , MAX_INAME_LEN);
select_dp = SQLSQLDAAlloc(0 , size , MAX_VNAME_LEN , MAX_INAME_LEN);
/* 为指示变量、绑定变量和选择列表项分配内存 */
for(i = 0 ; i != MAX_ITEMS ; ++i)
{
bind_dp->I[i] = (short*)malloc(sizeof(short));
select_dp->I[i] = (short*)malloc(sizeof(short));
bind_dp->V[i] = (char*)malloc(1);
select_dp->V[i] = (char*)malloc(1);
}
}
void dealloc_descriptors()
{
int i;
/* 释放指示变量、绑定变量和选择列表项占用的内存 */
for(i = 0 ; i != MAX_ITEMS ; ++i)
{
if(bind_dp->V[i] != (char*)0)
free(bind_dp->V[i]);
free(bind_dp->I[i]);
if(select_dp->V[i] != (char*)0)
free(select_dp->V[i]);
free(select_dp->I[i]);
}
/* 释放绑定描述区和选择描述区 */
SQLSQLDAFree(0 , bind_dp);
SQLSQLDAFree(0 , select_dp);
}
void set_bind_variables()
{
int i;
char bind_var[64];
/* 设置绑定变量最大个数 */
bind_dp->N = MAX_ITEMS;
/* 绑定变量名称: 绑定描述区 */
exec sql describe bind variables for s into bind_dp;
/* 设置绑定变量实际个数 */
bind_dp->N = bind_dp->F;
/* 循环处理绑定变量 */
for(i = 0 ; i != bind_dp->F ; ++i)
{
/* 显示绑定变量名 */
printf("请输入绑定变量%.*s的值:" , (int)bind_dp->C[i] , bind_dp->S[i]);
/* 输入绑定变量的值 */
gets(bind_var);
/* 设置绑定变量的长度成员 */
bind_dp->L[i] = strlen(bind_var);
/* 为绑定变量数据缓冲区重新分配内存(多一位,留给'