Oracle PL/SQL编程详解

Oracle PL/SQL编程详解

  1. PL/SQL 程序设计简介

SQL语言只是访问、操作数据库的语言,并不是一种具有流程控制的程序设计语言,而只有程序设计语言才能用于应用软件的开发。PL /SQL是一种高级数据库程序设计语言,该语言专门用于在各种环境下对ORACLE数据库进行访问。由于该语言集成于数据库服务器中,所以PL/SQL代码可以对数据进行快速高效的处理。除此之外,可以在ORACLE数据库的某些客户端工具中,使用PL/SQL语言也是该语言的一个特点。本章的主要内容是讨论引入PL/SQL语言的必要性和该语言的主要特点,以及了解PL/SQL语言的重要性和数据库版本问题。还要介绍一些贯穿全书的更详细的高级概念,并在本章的最后就我们在本书案例中使用的数据库表的若干约定做一说明。
继续阅读Oracle PL/SQL编程详解

oracle静默方式建库

有时候,真的不愿意用xmanager连服务器,再用GUI界面去创建、删除数据库,所以摸索了一下静默方式。以下内容是以oracle11gR2为参照版本的。

1、静默方式建库

oracle用户的主目录touch一个db_create.rsp文件,编辑该文件,内容如下:

[GENERAL]
RESPONSEFILE_VERSION = "11.2.0.1.0"  
OPERATION_TYPE = "createDatabase"  
[CREATEDATABASE]
GDBNAME = "tasdb"  
TEMPLATENAME = "General_Purpose.dbc"  
CHARACTERSET = "ZHS16GBK"  
oracle.install.db.InstallEdition = EE  
SYSPASSWORD = oracle  
SYSTEMPASSWORD = oracle  
MEMORYPERCENTAGE = "15"  

responsefile_version 响应文件版本,其实就是数据库版本

operation_type 静默操作类型

余下的内容请看稍后的响应文件例子。之后,执行这个命令开始建库:

dbca -silent -responseFile ./db_create.rsp

继续阅读oracle静默方式建库

RHEL 5: How to install Oracle10g

该文档适用于RHEL 5系列操作系统下面安装Oracle10G。

一、安装前的准备工作

安装oracle前,内核参数调整,添加到/etc/sysctl.conf

# oracle kernel settings
fs.suid_dumpable = 1
fs.aio-max-nr = 1048576
fs.file-max = 6553600
kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 1024 65535
net.core.rmem_default = 4194304
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 262144

继续阅读RHEL 5: How to install Oracle10g

存储过程的教程

什么是存储过程呢?

定义:

将常用的或很复杂的工作,预先用SQL语句写好并用一个指定的名称存储起来, 那么以后要叫数据库提供与已定义好的存储过程的功能相同的服务时,只需调用execute,即可自动完成命令。

讲到这里,可能有人要问:这么说存储过程就是一堆SQL语句而已啊?

Microsoft公司为什么还要添加这个技术呢?

那么存储过程与一般的SQL语句有什么区别呢?

存储过程的优点:

  1. 存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。
  2. 当对数据库进行复杂操作时(如对多个表进行Update,Insert,Query,Delete时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。
  3. 存储过程可以重复使用,可减少数据库开发人员的工作量
  4. 安全性高,可设定只有某此用户才具有对指定存储过程的使用权

存储过程的种类:

1.系统存储过程:以sp_开头,用来进行系统的各项设定.取得信息.相关管理工作,

如 sp_help就是取得指定对象的相关信息

2.扩展存储过程 以XP_开头,用来调用操作系统提供的功能

exec master..xp_cmdshell ‘ping 10.8.16.1’

3.用户自定义的存储过程,这是我们所指的存储过程

常用格式

Create procedure procedue_name

[@parameter data_type][output]

[with]{recompile|encryption}

as

sql_statement

解释:

output:表示此参数是可传回的

with {recompile encryption}

recompile:表示每次执行此存储过程时都重新编译一次

encryption:所创建的存储过程的内容会被加密

如:

表book的内容如下

编号 书名 价格

001 C语言入门 $30

002 PowerBuilder报表开发 $52

实例1:查询表Book的内容的存储过程

create proc query_book

as

select * from book

go

exec query_book

实例2:加入一笔记录到表book,并查询此表中所有书籍的总金额

Create proc insert_book

@param1 char(10),@param2 varchar(20),@param3 money,@param4 money output

with encryption ———加密

as

insert book(编号,书名,价格) Values(@param1,@param2,@param3)

select @param4=sum(价格) from book

go

执行例子:

declare @total_price money

exec insert_book ‘003’,’Delphi 控件开发指南’,$100,@total_price

print ‘总金额为’+convert(varchar,@total_price)

go

存储过程的3种传回值:

  1. 以Return传回整数
  2. 以output格式传回参数
  3. Recordset

传回值的区别:

output和return都可在批次程式中用变量接收,而recordset则传回到执行批次的客户端中

实例3:设有两个表为Product,Order,其表内容如下:

Product

产品编号 产品名称 客户订数
001 钢笔 30
002 毛笔 50
003 铅笔 100

order

产品编号 客户名 客户订金
001 南山区 $30
002 罗湖区 $50
003 宝安区 $4

请实现按编号为连接条件,将两个表连接成一个临时表,该表只含编号.产品名.客户名.订金.总金额,

总金额=订金*订数,临时表放在存储过程中

代码如下:

Create proc temp_sale

as

select a.产品编号,a.产品名称,b.客户名,b.客户订金,a.客户订数* b.客户订金 as总金额

into #temptable from Product a inner join order b on a.产品编号=b.产品编号

if @@error=0

print ‘Good’

else

print ‘Fail’

go

Oracle 9.2 Client的麻烦

昨天通宵整了一夜的服务器,服务器重新做了操作系统,一切都是病毒惹的祸。装完操作系统,装补丁,.net框架,装完了oracle客户端,以为可以回家睡觉了。哪知道,网站抛出数据驱动未注册的错误信息,前几天在接口服务器上装oracle也是这个问题,后来没有解决,扔下来了,今天又碰到了,看来是祸躲不过啊。

刘工他们找了一晚上的方法,这样试,那样试,始终没有成功,后来从一篇文章上发现,得将c:/oracle/ora92这个目录的安全性对everyone权限,不点“完全控制”,然后将“读取及运行”不选,再选上“读取及运行”,确定,重启。网站就可以连接oracle数据库了,据说这是ORACLE 9.2的一个BUG。我就晕了。回头给甲骨文公司发一封抗议信,为什么不打补丁!哈哈哈。

今天我是精神和肉体双重劳累啊,盼望赶紧休年假。呵呵。

—–