akiraray 发表于 2013-2-5 01:06:49

Pro*C 基础教程-简化版_Vol4 登录

前言

任何操作数据库的动作,都需要登录数据库,而本次的内容主要介绍怎么让代码与ORACLE数据库连接。
 
一、通讯中的几个概念

节点

网络中的通讯点叫做节点,一般而言都是将数据从一个节点传输到另外一个节点
 
协议

网络上存储的一组规则。
 
SQL*Net连接语法

SQL*Net通过DECnet(协议)的默认数据库连接语法为
d:node
默认数据库连接

每个节点都有一个默认数据库。如果在CONNECT语句中,指定节点而不指定数据库,则默认连接到节点的默认数据库上。
CONNECT没有AT子句,就是使用默认连接;同样的,如果纯在AT子句,就是有相关操作。
 
二、登录节点默认数据库

使用IDENTIFIED BY子句

EXEC SQL CONNECT :username IDENTIFIED BY :password
 
没有IDENTIFIED BY子句

EXEC SQL CONNECT :user_pwd;
:user_pwd的格式为 username/password
 
自动登录

使用 OPS $username ,其中username为当前登录到操作系统上的用户的名称或者人物名,且是有效的ORACLE用户名,只需要将 '/’传递给预编译程序
EXEC SQL DECLARE BEGIN SECTION ;
char oracleid=’/’;
EXEC SQL DECLARE END SECTION ;
EXEC SQL CONNECT :oracleid
 
三、单显示登录

 
显示登录就是使用AT子句的登录

VARCHAR username;
VARCHAR password;
VARCHAR  db_name;
char db_link_name;
 
strcpy(username.attr,”USERNAME);
username.len=strlen(username.attr);
……
EXEC SQL DECLARE db_link_name DATABASE;
EXEC SQL CONNECT :username IDENTIFIED BY :password
AT db_link_name USING :db_name;
 
在非默认的连接上执行SQL语句

EXEC SQL AT db_link_name SELECT …
EXEC SQL AT db_link_name INSERT
EXEC SQL AT db_link_name UPDATE
EXEC SQL AT db_link_name DELETE
 
游标控制

不能在游标控制语句中使用AT。需要在DECLARE CURSOR语句中使用AT子句。
EXEC SQL AT:db_link_name DECLARE temp_cursor CURSOR FOR …
EXEC SQL OPEN temp_cursor;
EXEC SQL FETCH temp_cursor;
EXEC SQL CLOSE temp_cursor;
 
在光标打开过程中,无法修改db_link_name
 
动态SQL

动态方法1:子句中使用AT子句
EXEC SQL AT db_link_name EXECUTE IMMDEIATE :sql_statement
动态方法2,3和4:
在DECLARE STATEMENT的时候使用AT子句
动态方法2:
EXECSQL AT db_link_name DECLARE sql_stmt STATEMEMT
EXECSQL PREPARE sql_stmt FROM :sql_string
EXECSQL EXECUTE sql_statement;
 
动态方法3:
EXECSQL AT db_link_name DECLARE sql_stmt STATEMEMT;
EXECSQlL PREPARE sql_stmt FROM :sql_string;
EXECSQL DECLARE temp_cursor CURSOR FOR sql_stmt;
EXECSQL OPEN temp_cursor;
EXECSQL FETCH temp_cursor INTO…
EXECSQL CLOSE emp_cursor;
 
四、并行登录

多显示登录

使用AT子句用于显示登录。
EXEC SQL BEGIN DECLARE SECTION;
char username;
char password;
char db_name1;
char db_name2;
EXEC SQL END DECLARE SECTION;
 
strcpy(db_name1,”d:newyork_nondef1”);
strcpy(db_name1,”d:newyork_nondef2”);
/* 给每个数据库命名一个连接名*/
EXEC SQL DECLARE db_link_name1 DATABASE;
EXEC SQL DECLARE db_link_name2 DATABASE;
/*连接到两个数据库上*/
EXEC SQL CONNECT :username IDENDIFIED BY:password
AT db_link_name1 USING :db_name1;
EXEC SQL CONNECT :username IDENDIFIED BY:password
AT db_link_name2 USING :db_name2;
 

隐式登录

EXEC SQL CREATE DATABASE LINK db_link
USING ‘d:newyork_nondef’;
 
EXEC SQL SELECT * INTO:xxx FROM emp@db_link WHERE DEPTNO=:dept_number;
页: [1]
查看完整版本: Pro*C 基础教程-简化版_Vol4 登录