Oracle实践--PL/SQL基础之存储过程

PL/SQL基础之存储过程

存储过程:过程是用于完成特定任务的子程序(代码的集合)

/*

子程序的优点:1.模块化,将程序分解为逻辑模块;

2.可重用性,可以被任意数目的程序调用;

3,可维护性,简化维护操作;

4.安全性:通过设置权限,使数据更安全

*/

--存储过程1,打印HelloWorld

create or replace procedure my_pro
is   --用于声明一些变量
 v_string varchar2(20) :=‘helloworld!‘;
begin
 dbms_output.put_line(v_string);
end;

调用方式有三种:

begin
 my_pro;--这种方式调用无参的存储过程,括号可以省略
 my_pro();
end;
call my_pro();--无参的也必须带括号
在command中输入 set serveroutput on  execute my_pro();

--存储过程2,带参数的,默认是输入参数

create or replace procedure my_pro2(v_sal  number)--参数,要制定类型,varchar不能指定长度
is
  v_sql varchar2(200);
  v_emp emp%rowtype;
begin
 v_sql :=‘select * from emp where sal =: s‘;
 execute immediate v_sql into v_emp
 using v_sal;
 dbms_output.put_line(v_emp.ename);
 exception
   when no_data_found then
     dbms_output.put_line(‘没有找到!‘);
end;

select *from emp;
call my_pro2(820);

--存储过程3,带参数,输入(in)和输出(out)参数,关键字:in
out,不写默认是in

create or replace procedure my_pro3(v_sal number, v_name out emp.ename%type)--out
is
 v_sql varchar2(200);
begin
 v_sql :=‘select ename from emp where sal =: s‘;
 execute immediate v_sql into v_name
 using v_sal;
end;

--存储过程4,输入输出类型,in
out,交换两个数

create or replace procedure swap(v_num1 in out number, v_num2 in out number)-- in out 顺序不能颠倒
as
 v_temp number;
begin
 v_temp := v_num1;
 v_num1 := v_num2;
 v_num2 := v_temp;
end;

--调用存储过程4

declare
 v_num1 number :=‘&num1‘;
 v_num2 number :=‘&num2‘;
begin
 dbms_output.put_line(‘交换前:num1 = ‘||v_num1||‘-----num2 = ‘||v_num2);
 swap(v_num1,v_num2);
 dbms_output.put_line(‘交换后:num1 = ‘||v_num1||‘-----num2 = ‘||v_num2);
end;

--存储过程5,计算总页数和总记录数

create or replace procedure countPageAndRecords
      (tableName varchar2, pageSize number,totalRecord out number,totalPage out number)
as
 v_sql varchar2(200);
begin
 v_sql :=‘select count(*) from ‘||tableName;
 execute immediate v_sql into totalRecord;
 totalPage :=ceil(totalRecord/pageSize);
  --计算方式二
 if mod(totalRecord,pageSize) =0 then
   totalPage := totalRecord/pageSize;
 else
   totalPage :=floor(totalRecord/pageSize)+1;
 end if;
end;

--测试储过程5

declare
 tableName varchar2(50) :=‘&表名:‘;
 pageSize number :=‘&分页单位:‘;
 totalRecord number;
 totalPage number;
begin
 countPageAndRecords(tableName,pageSize,totalRecord,totalPage);
 dbms_output.put_line(‘总数为:‘||totalRecord);
 dbms_output.put_line(‘总页数为:‘||totalPage);
end;

文章来源:http://blog.csdn.net/ysjian_pingcx/article/details/25742459

Oracle实践--PL/SQL基础之存储过程

时间: 2024-10-04 02:58:42

Oracle实践--PL/SQL基础之存储过程的相关文章

Oracle实践--PL/SQL基础之同义词和序列

PL/SQL基础入门之同义词和序列             PL/SQL:过程语言(Procedure  Language)和结构化语言(Structured Query Language)结合而成的编程语言,是对SQL的扩展,支持多种数据类型,如大对象和集合类型,可使用条件和循环等控制语句,可创建存储过程,程序包和触发器等,给sql语句的执行添加程序逻辑,与Oracle服务器和Oracle工具紧密集成,具有可移植性,灵活性和安全性. 同义词: /*     同义词:现有对象的一个别名:    

Oracle实践--PL/SQL基础之表分区

PL/SQL基础入门之表分区 PL/SQL:过程语言(Procedure  Language)和结构化语言(Structured Query Language)结合而成的编程语言,是对SQL的扩展,支持多种数据类型,如大对象和集合类型,可使用条件和循环等控制语句,可创建存储过程,程序包和触发器等,给sql语句的执行添加程序逻辑,与Oracle服务器和Oracle工具紧密集成,具有可移植性,灵活性和安全性. ---------------------------------------------

Oracle实践--PL/SQL基础之代码块

PL/SQL基础入门之代码块 PL/SQL:过程语言(Procedure  Language)和结构化语言(Structured Query Language)结合而成的编程语言,是对SQL的扩展,支持多种数据类型,如大对象和集合类型,可使用条件和循环等控制语句,可创建存储过程,程序包和触发器等,给sql语句的执行添加程序逻辑,与Oracle服务器和Oracle工具紧密集成,具有可移植性,灵活性和安全性. 优点: 1.       支持SQL,可以使用:DML,DCL,游标控制和SQL运算符 2

Oracle实践--PL/SQL基础之游标

PL/SQL基础入门之游标 PL/SQL:过程语言(Procedure  Language)和结构化语言(Structured Query Language)结合而成的编程语言,是对SQL的扩展,支持多种数据类型,如大对象和集合类型,可使用条件和循环等控制语句,可创建存储过程,程序包和触发器等,给sql语句的执行添加程序逻辑,与Oracle服务器和Oracle工具紧密集成,具有可移植性,灵活性和安全性. ----------------------------------------------

Oracle实践--PL/SQL基础之视图和索引

PL/SQL基础入门之视图和索引         PL/SQL:过程语言(Procedure  Language)和结构化语言(Structured Query Language)结合而成的编程语言,是对SQL的扩展,支持多种数据类型,如大对象和集合类型,可使用条件和循环等控制语句,可创建存储过程,程序包和触发器等,给sql语句的执行添加程序逻辑,与Oracle服务器和Oracle工具紧密集成,具有可移植性,灵活性和安全性. -----------------------------------

Oracle实践--PL/SQL基础之触发器和程序包

PL/SQL基础之触发器和程序包  程序包 /* 程序包:对相关存储过程,函数,变量,游标和异常等对象的封装 有声明和主体组成 优点:1.模块化:2.更轻松的应用程序设计;3.信息隐藏;4.性能更佳 */ --程序包的声明:关键字:package is end create or replace package my_pack as procedure packageTest(v_num number); end my_pack;--也可以是 end; --程序包的主体 create or re

Oracle实践--PL/SQL基础之函数

PL/SQL基础之函数 /* 函数:可以有返回值得命名的PL/SQL子程序,必须有返回值 关键字:function return */ --函数1 create or replace function helloworld return varchar2--指定返回类型,不能给定长度 as v_hello varchar2(50); begin v_hello :='helloworld!'; return v_hello;--不可少的return end; --函数调用方式: select h

Oracle实践--PL/SQL综合之分页存储过程

当我们查看JDK API的时候,总会发现一些类说明写着,线程安全或者线程不安全,比如说StringBuilder中,有这么一句,"将StringBuilder 的实例用于多个线程是不安全的.如果需要这样的同步,则建议使用StringBuffer. ",那么下面手动创建一个线程不安全的类,然后在多线程中使用这个类,看看有什么效果. Count.java: [java] view plaincopy public class Count { private int num; public 

Oracle数据库—— PL/SQL基础编程

一.涉及内容 1. 掌握PL/SQL程序块的结构,理解并熟悉各种变量的应用. 二.具体操作 (一)使用system用户登录SQL*PLUS,使用SQL语句创建用户:u_你的姓名首字母(例如:u_zs),密码为: t_你的学号后三位(例如:t_165).并授予新用户连接数据库的权限,然后以新用户连接数据库. 1. 创建用户u_sxl 2. 授予新用户u_sxl连接数据库的权限 3. 以新用户u_sxl连接数据库 (二)使用scott用户连接数据库,使用SQL语句创建表dep_你的学号后三位(例如: