oracle实例名、数据库名与服务名的理解
实例名(instance_name),一个用于数据库和操作系统之间通信的标志,数据库和操作系统之间要进行交互用的就是实例名,实例名可以和数据库名相同,一会再说数据库名,一般一个数据库名对应一个实例名,一对一关系,但在oracle的集群应用中,数据库名和实例名就是一对多的关系了。
查看实例名:select instance_name from v$instance;
oracle_sid与instance_name的关系:同样都是实例名,instance_name是oracle数据库参数,而oracle_sid是操作系统环境变量,操作系统所访问的实例名,必须是oracle_sid,oracle_sid必须与instance_name一致。
数据库(db_name)名就是数据库的唯一标识,相当于人的身份证一样,数据库名在创建时应该就要考虑好,后面尽量不要修改,因涉及修改的地方比较多,容易出错,在创建数据库create database时,其中的参数必须是DB_name,否则会出错,修改数据库时同理。注,这边的创建数据库其实是创建数据库文件,也就是俗称的用户。
查看当前数据库名:select name from v$database;
服务名(service_name),一般来讲,数据库服务名与数据库名相同。
查看服务名:select value from v$parameter where name = 'service_name';
上述均为个人观点,如有不对请多多指正,共同进步!
相关文档:
Oracle中的存储过程和游标:
select myFunc(参数1,参数2..) to dual; --可以执行一些业务逻辑
一:Oracle中的函数与存储过程的区别:
A:函数必须有返回值,而过程没有.
B:函数可以单独执行.而过程必须通过execute执行.
C:函数可以嵌入到SQL语句中执行.而过程不行.
其实我们可以将比较复杂的查询写成函数.然后到存储过程 ......
从游标提取数据
从游标得到一行数据使用FETCH命令。每一次提取数据后,游标都指向结果集的下一行。语法如下:
FETCH cursor_name INTO variable[,variable,...]
对于SELECT定义的游标的每一列,FETCH变量列表都应该有一个变量与之相对应,变量的类型也要相同。
例:
SET SERVERIUTPUT ON
DECLARE
......
对于rownum来说它是oracle系统顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是2,依此类推,这个伪字段可以用于限制查询返回的总行数,而且rownum不能以任何表的名称作为前缀。
举例说明:
例如表:student(学生)表,表结构为:
ID char(6) --学号
name ......
当我们获取数据时,可能会有这样的需求,即每次从表中获取数据时,是随机获取一定的记录,而不是每次都获取一样的数据,这时我们可以采取Oracle内部一些函数,来达到这样的目的.
1) select * from (select * from tablename order  ......
把数据从一个表复制到另一个表,插入新数据或替换掉老数据是每一个ORACLE DBA都会经常碰到的问题。在ORACLE9i以前的年代,我们要先查找是否存在老数据,如果有用UPDATE替换,否则用INSERT语句插入,其间少不了还有一些标记变量等等,繁琐的很。现在ORACLE9i专为这种情况提供了MERGE语句,使这一工作变得异常轻松,
MERGE语 ......