博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Pro*C 基础教程-简化版_Vol4 登录
阅读量:4176 次
发布时间:2019-05-26

本文共 2622 字,大约阅读时间需要 8 分钟。

前言

任何操作数据库的动作,都需要登录数据库,而本次的内容主要介绍怎么让代码与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[10];

VARCHAR password[10];

VARCHAR  db_name[20];

char db_link_name[10];

 

strcpy(username.attr,"SCOTT");

username.len=strlen(username.attr);

strcpy(password.attr,"TIGER");

password.len=strlen(password.attr);

strcpy(db_name.attr,"ORCL");

db_name.len=strlen(db_name.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[10];

char password[10];

char db_name1[20];

char db_name2[20];

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;

 

FROM: http://akiraray.javaeye.com/blog/660767

转载地址:http://uutai.baihongyu.com/

你可能感兴趣的文章
Can not deserialize instance of java.lang.String out of START_OBJECT token
查看>>
JTF的Unable to invoke request异常或Unable to find a MessageBodyReader of content-type application..异常详解
查看>>
JavaNCSS概述及JavaNCSS got an error while parsing the java file详解
查看>>
openssh-client amd64 1:7.2p2-4ubuntu2.4 404 Not Found
查看>>
Rapidoid及其容器化的Web平台
查看>>
JavaEE的JSON API规范JSON-P/JSON-B
查看>>
Kubernetes及其Master/Node节点
查看>>
OpenStack Heat简介
查看>>
Kubernetes集群内外的网络连通性
查看>>
TestNG中的@Factory与@DataProvider的执行比较
查看>>
TestNG中在一个test标签中的多个测试类之间共享中间数据的方法
查看>>
TestNG中在一个suite标签中的多个test标签之间共享中间数据的方法
查看>>
Docker容器实例的网络与通信
查看>>
OpenStack的Telemetry Data Collection服务概述
查看>>
iptables及其过滤规则
查看>>
基于iptables的Docker网络隔离与通信详解
查看>>
Linux内核的网络命名空间的概念及常用命令
查看>>
虚拟网络设备及其在Linux网络命名空间中的应用
查看>>
NAT及跨网络命名空间的网络地址转换
查看>>
Docker容器实例通过非默认的网络命名空间访问外部网络
查看>>