oracle存储包中包含多个存储过程以及参数的传入和传出
oracle存储过程
oracle存储过程Oracle是一种关系型数据库管理系统,支持使用存储过程来实现复杂的数据处理逻辑。
存储过程是一组预编译的SQL语句和控制语句,它们被组织在一个可重复使用的、具有独立调用接口的程序单元中。
在Oracle中,存储过程可以通过PL/SQL语言编写,PL/SQL是Oracle专用的过程化编程语言。
存储过程的优势之一是它们可以提高数据库的性能。
通过将常用的数据处理逻辑移至数据库服务器层,存储过程可以减少网络传输开销和应用程序的处理时延。
此外,存储过程还可以通过优化数据库操作的方式来提高查询性能。
例如,可以将多个单独的SQL查询合并为一个存储过程,以减少数据库操作的次数。
另一个优势是存储过程的安全性。
通过存储过程,可以限制用户对数据的直接访问,只允许通过存储过程来操作数据。
这样可以提高数据的安全性,并防止不合法的数据访问。
此外,存储过程还可以对输入的数据进行验证,以确保数据的正确性。
存储过程还提供了事务处理的能力。
在Oracle中,可以在存储过程内部使用事务控制语句,如COMMIT和ROLLBACK,来确保数据的一致性和完整性。
通过将多个数据库操作包装在一个事务中,可以确保这些操作要么全部执行成功,要么全部回滚,避免了数据不一致的情况。
除了以上的一些基本优势,存储过程还具有以下几个特点:1.可重用性:存储过程可以在多个地方调用,实现功能的复用。
这样可以节省开发时间和维护成本。
2.封装性:存储过程将逻辑处理封装在数据库层,避免了逻辑分散在多个应用程序中的情况。
这样可以简化应用程序的解耦,使系统更加模块化和可维护。
3.参数传递:存储过程支持接收输入参数和返回输出参数,可以根据具体的需求进行灵活的参数传递。
4.错误处理:存储过程可以使用异常处理机制来捕获和处理错误,提高系统的容错能力。
5.注释和文档化:存储过程可以添加注释和文档,提高代码的可读性和可维护性。
在实际应用中,存储过程可以用于各种不同的场景,如数据的导入导出、数据的清洗和转换、复杂业务逻辑的处理等。
ORACLE存储过程
ORACLE提供了四种类型的可存储的程序:函数, 过程. 包,触发器一.声明部分(Declarationsection)(1)声明部分包含了变量和常量的数据类型和初始值(2)这个部分是由关键字DECLARE开始(3)如果不需要声明变量或常量,那么可以忽略这一部分;二.执行部分(Executablesection)(1)执行部分是PL/SQL块中的指令部分,(2)由关键字BEGIN开始,所有的可执行语句都放在这一部分,其他的PL/SQL块也可以放在这一部分。
三.异常处理部分(Exceptionsection)这一部分是可选的,在这一部分中处理异常或错误。
过程存储过程是一个PL/SQL程序块,接受零个或多个参数作为输入(INPUT)或输出(OUTPUT)、或既作输入又作输出(INOUT),与函数不同,存储过程没有返回值,存储过程不能由SQL语句直接使用,只能通过EXECUT命令或PL/SQL程序块内部调用。
1.创建存储过程CREATE[ORREPLACE]PROCEDURE过程名(参数1{IN/OUT/INOUT}类型,参数2{IN/OUT/INOUT}类型,…….参数N{IN/OUT/INOUT}类型,)IS/AS过程体BEGINEND存储过程名字说明:(1)ORREPLACE关键字可选,但一般会使用,功能为如果同名的过程已存在,则删除同名过程,然后重建,以此来实现修改过程的目的。
(2)过程可以包括多个参数,参数模式有IN/OUT/INOUT三种,默认为IN,也可以没参数。
(3)IS/AS键字也等价(4)过程体为该过程的代码部分,是一个含有声明部分,执行部分和异常处理部分的PL/SQL块。
但需要注意的是,在过程的声明体中不能使用DECLARE关键字,由IS或AS来代替。
注意事项:1,存储过程参数不带取值范围,in表示传入,out表示输出类型可以使用任意Oracle中的合法类型。
2,变量带取值范围,后面接分号3,在判断语句前最好先用count(*)函数判断是否存在该条操作记录4,用select。
Oracle的存储过程
Oracle的存储过程 ⼀、什么是存储过程? 存储过程就是⼀组为了完成特定功能的SQL语句集,存储在数据库中;这样经过第⼀次编译后再次调⽤不需要再次编译,直接调⽤或者通过java掉⽤(就是个SQL语句集) 在Oracle中存储过程是procedure 优势: 1. 相⽐普通的sql语句,每次都要先编译在执⾏,相对⽽⾔存储过程效率更⾼ 2. 降低⽹络流量(存储过程编译好后直接存在数据库中,远程调⽤时,不会传输⼤量的字符串类型的sql语句) 3. 复⽤性⾼:⼀次编译后,以后直接调⽤ 4. 可维护性更⾼:修改⽐较容易 5. 安全性⾼:可以指定⽤户进⾏存储过程的调⽤ ⼆、存储过程的创建⽅式: 2.1 ⽆参CREATE OR REPLACE PROCEDURE 存储过程名称AS/IS变量2 DATE;变量3 NUMBER;BEGIN--要处理的业务逻辑EXCEPTION --存储过程异常(可写可不写)END 2.2 有参 2.2.1 带参数的存储过程(输⼊参数:id ;输出参数:name)1 CREATE OR REPLACE PROCEDURE 存储过程名称(param1 student.id%TYPE)2 AS/IS3 name %TYPE;4 age number :=20;5 BEGIN6 --业务处理.....7 END上⾯脚本中,第1⾏:param1 是参数,类型和student表id字段的类型⼀样。
第3⾏:声明变量name,类型是student表name字段的类型(同上)。
第4⾏:声明变量age,类型数数字,初始化为20 2.2.2 带参数的存储过程并且进⾏赋值1 CREATE OR REPLACE PROCEDURE 存储过程名称(2 s_no in varchar,3 s_name out varchar,4 s_age number) AS5 total NUMBER := 0;6 BEGIN7 SELECT COUNT(1) INTO total FROM student s WHERE s.age=s_age;8 dbms_output.put_line('符合该年龄的学⽣有'||total||'⼈');9 EXCEPTION10 WHEN too_many_rows THEN11 DBMS_OUTPUT.PUT_LINE('返回值多于1⾏');12 END上⾯脚本中:其中参数IN表⽰输⼊参数,是参数的默认模式。
oracle中带参存储过程的使用
oracle中带参存储过程的使⽤Oracle中存储过程带参分为:输⼊参数(in)和输出参数(out)例如:1create or replace procedure out_test(v_user in er_name%type,2 v_salary out emp.salary%type,3 v_deptno out emp.emp_deptno%type) as4begin5select salary, emp_deptno6into v_salary, v_deptno7from emp8where user_name= v_user;9 exception10when NO_DATA_FOUND then11 dbms_output.put_line('No data found');12when TOO_MANY_ROWS then13 dbms_output.put_line('Too many rows found');14end out_test;在命令⾏中调⽤该存储过程,利⽤绑定变量1 SQL>var v_user varchar2(20);2 SQL>var v_salary number;3 SQL>var v_deptno number;4 SQL>exec :v_user :='Lisi';56 PL/SQL procedure successfully completed7 v_user8---------9 Lisi1011 SQL>exec out_test(:v_user, :v_salary, :v_deptno);1213 PL/SQL procedure successfully completed14 v_user15---------16 Lisi17 v_salary18---------19 v_deptno20---------在plsql developer中执⾏带的存储过程,⽆参可以直接执⾏,带in类型的参数要输⼊变量值,带out类型的不⽤输⼊,会在plsql下⾯输出结果在hibernate的 EJB()调⽤存储过程中执⾏存储过程EJB调⽤存储过程要调⽤存储过程,我们可以通过EntityManager 对象的createNativeQuery()⽅法执⾏SQL 语句(注意:这⾥说的是SQL 语句,不是EJB3 QL), 调⽤存储过程的SQL 格式如下:{call 存储过程名称(参数1, 参数2, … )}在EJB3 中你可以调⽤的存储过程有两种1.⽆返回值的存储过程。
oracle 存储过程输出参数的使用
oracle 存储过程输出参数的使用在Oracle中,存储过程可以有输入参数、输出参数和输入输出参数。
输出参数允许存储过程返回一个或多个值给调用者。
以下是使用输出参数的步骤:1. 声明输出参数:在创建存储过程时,需要声明输出参数。
这可以通过在参数列表中指定参数名和数据类型,并添加`OUT`关键字来完成。
2. 在存储过程中设置输出参数的值:可以使用`:=`操作符将值赋给输出参数。
3. 在调用存储过程时,必须为输出参数提供一个变量来接收返回的值。
以下是一个使用输出参数的存储过程的例子:```sqlCREATE OR REPLACE PROCEDURE get_employee_salary (p_emp_id IN employees.employee_id%TYPE,p_salary OUT employees.salary%TYPE) ISBEGINSELECT salary INTO p_salary FROM employees WHERE employee_id = p_emp_id;END;/```在这个例子中,`p_salary`是一个输出参数。
当调用这个存储过程时,需要提供一个变量来接收返回的薪水值。
调用这个存储过程的代码可能如下所示:```sqlDECLAREv_salary employees.salary%TYPE;BEGINget_employee_salary(100, v_salary);DBMS_OUTPUT.PUT_LINE('Salary is ' || v_salary);END;/```在这个例子中,我们声明了一个变量`v_salary`来接收存储过程返回的薪水值,然后使用`DBMS_OUTPUT.PUT_LINE`来打印这个值。
oracle_11gR2_10 存储过程PROCEDURE(介绍,输入,输出参数,使用,维护)
==================================================
只带一个输入参数 ,把查询的结果显示出来
SQL> CREATE OR REPLACE PROCEDURE xs_proc(temp_id IN integer)
2 IS
3 name varchar2(25);
1、查看过程状态
SELECT object_name,status FROM USER_OBJECTS WHERE object_type='PROCEDURE';
2、重新编译过程
ALTER PROCEDURE xs_proc COMPILE;
3、查看过程的源代码
BEGIN
select yu_wen,shu_xue into num_1,num_2 from xue_sheng where xing_ming=temp_name;
DBMS_OUTPUT.PUT_LINE(num_1 + num_2);
END;
/
SQL> EXECUTE xs_proc('ZhanSan');
CREATE TABLE xue_sheng( id integer, xing_ming varchar(25), yu_wen number,shu_xue number);
INSERT INTO xue_sheng VALUES(1,'ZhanSan',80,90);
INSERT INTO xue_sheng VALUES(2,'LiSi',85,87);
这是有声音的视频, 请检查耳机或者音箱 声音输出设备
oracle数据库存储过程
oracle数据库存储过程存储过程的参数分为输入参数和输出参数两种。
输入参数是存储过程执行的条件参数。
输出参数类似于返回值,但是输出参数具有两个重要的优势:可以使用输出参数从存储过程传递出VarChar,Int,Money或任何其他数据类型的值,而返回值则只能返回整数。
一个存储过程可以包含多个参数(其中包括输入和输出参数),但是只能包含一个返回值。
第一步:构建数据库定义存储过程存储过程写法:CREATE OR REPLACE PACKAGE TYPES ASTYPE RQ_REF_CURSOR IS REF CURSOR;-- procedure getData( V_TEMP OUT TYPES.RQ_REF_CURSOR);END;CREATE OR REPLACE PROCEDURE RQ_TEST_CUR(V_TEMP OUT TYPES.RQ_REF_CURSOR,PID IN VARCHAR)ASBEGINOPEN V_TEMP FOR SELECT NAME FROM TEST WHERE ID = PID;END RQ_TEST_CUR;-- Create tablecreate table TEST(ID VARCHAR2(10) not null,NAME VARCHAR2(10))tablespace USERSpctfree 10initrans 1maxtrans 255storage(initial 64Kminextents 1maxextents unlimited);-- Create/Recreate primary, unique and foreign key constraints alter table TESTadd constraint TEST_PK unique (ID)using indextablespace USERSpctfree 10initrans 2maxtrans 255storage(initial 64Kminextents 1maxextents unlimited);第二步:建立报表在报表中数据集的设置,如图一图一数据集中参数的设置:如图二图二报表参数的设置:如图三图三第三步:预览报表,正常展示。
Oracle 存储过程参数
Oracle存储过程参数在创建存储过程时,需要考虑的一件重要事情就是过程的灵活性,以方便随后可以重新使用。
通过使用“参数”可以使程序单元变得很灵活,参数是一种向程序单元输入和输出数据的机制,存储过程可以接受和返回0到多个参数。
Oracle有三种参数模式:IN、OUT和IN OUT。
1.IN参数该类型的参数值由调用者传入,并且只能够被存储过程读取。
这种模式的参数是最常用的,也是默认的参数模式。
例如,下面以SCOTT用户连接到数据库,并建立一个简单的存储过程ADD_EMPLOYEE。
顾名思义,该过程将接受一系列参数,并且将它们添加到SCOTT.EMP 表中:SQL> create or replace procedure add_employee(2 id_param in number,3 name_param in varchar2,4 job_param in varchar2,5 hire_param in date,6 salary_param in number) is7 begin8 insert into scott.emp(empno,ename,job,hiredate,sal)9 values(id_param,name_param,job_param,hire_param,salary_param);10 end add_employee;11 /过程已创建。
在为存储过程定义参数时,参数的数据类型不能包括大小和精度信息。
在调用该存储过程时,用户需要传递一系列参数,以便过程的执行部使用这些参数向SCOTT.EMP表添加一条记录。
在调用存储过程时有三种向其传递参数的方法:名称表示法、位置表示法和混合表示法。
名称表示法名称表示法是指为各个参数传递参数值时,指定传入数值的参数名。
使用名称表示法传递参数的语法形式如下:prcedure_name(param_name=>value[,param_name=>value]);例如,在下面的示例中使有名称表示法传递参数,以调用存储过程ADD_EMPLOYEE:SQL> alter session set nls_date_format = 'yyyy-mm-dd';会话已更改。
oracle存储过程
oracle存储过程1、存储框架存储过程分为包和包体,包和包体都能独⽴存在包的概念:包就是将N个过程封装起来、包只提供封装的作⽤。
包体:包体也就是实实在在的存储过程、是由参数、变量、循环、语句块等组成的处理数据的流程。
包体中不能为空,⾄少有⼀个语句块。
⼤家都知道创建存储过程使⽤create or replace ,顾名思义create 就是创建、replace是替换,需要注意的是replace,建议在创建的时候只⽤create 如果⽤户下存在这个存储会有提⽰1.1、存储过程体---创建⼀个后缀是as存储过程createorreplaceprocedure test_is_as_01asv_num number;beginselect1into v_num from dual;end;---创建⼀个is的存储过程createorreplaceprocedure test_is_as_02isv_num number;beginselect1into v_num from dual;end;如上所⽰:创建存储的时候可以⽤两种⽅式as和is,准确的说两者是没有区别的在创建存储过程的时候是等价的,只是在创建存储过程的时候是等价的!现在我们为了⽅便管理想将两个存储封装起来、便于管理,那么我们就需要引进存储过程包,如下所⽰简单的分析⼀下⼀上代码可以发现:存储过程可分为两个⼤的模块、声明变量、类型、游标、数组等,和执⾏语句的模块。
简单的说就是声明体和语句块体As 和 begin之间是声明体;Begin 和end之间是语句块体;这两个模块到底是⽤来⼲什么的、通过之后的联系⾃然就明⽩了、这⾥不做过多的阐述,但是要记住这个问题1.2、存储过程包⾸先声明:过程是可以脱离包存在的如下is:createorreplacepackage test_is_as isprocedure test_is_as_01;procedure test_is_as_02;如下as:createorreplacepackage test_is_as asprocedure test_is_as_01;procedure test_is_as_02;end test_is_as;--详解第⼀⾏和最后⼀⾏:顾名思义就是创建了⼀个存储过程包叫test_is_as,end结束这个包第⼆⾏:procedure test_is_as_01; procedure是程序,也就是我们所属的存储过程,意思是需要调⽤存储过程test_is_as_01第三⾏:same to procedure test_is_as_01;存储过程包执⾏顺便:从上到下、从左到右,oracle中是以分号来表⽰结束那么怎么将,存储过程放在⼀个包中呢,上了两种体系是⽆法解决这个问题的,如下1.3、存储过程包与包体1、⾸先要创建⼀个空包createorreplacepackage test_is_as isend test_is_as;2、创建空包体,也就是包与过程的关联createorreplacepackagebody test_is_as isend;通过以上代码发现:1>、包与包体的名称需要⼀直,使⽤的后缀需要⼀致如is那么都是is,as都是as2>、包与包体end的时候可以加包名称也可以不加23>、包和包体创建命令⼀样、只是包体多了个body 关键字4>、我们创建的是⼀个⽆实体的存储过程包与包体,在包中可以声明需要调⽤的存储过程,包体中创建存储过程具体的操作流1、含实体的包createorreplacepackage test_is_as isprocedure test_is_as_01;procedure test_is_as_02;end test_is_as;2、含实体的包体createorreplacepackagebody test_is_as is---1procedure test_is_as_01 isv_num number;select1into v_num from dual;end;----2procedure test_is_as_02 isv_num number;beginselect1into v_num from dual;end;end;注意事项:1>、包体中procedure⽆顺序可以跌倒2>、中体重的procedure名称不能重复3>、包名称与存储过程名称建议不要相同2、变量Oracle存储的变量、变量对于⼀个存储过程⽽⾔必不可少的,很多数据都是要通过变量的传送来实现的,⾸先要使⽤⼀个变量必须要声明⼀个变量,说到声明是否会联想到存储架构中提到的声明模块,变量就是在这⾥声明的,在语句块体中是不允许声明变量的,只能引⽤变量,那么到底怎么申明⼀个变量呢?2.1、变量的声明1、⾃定义声明变量,就是⼈为的给⼀个变量定义⼀个指定类型Eg:定义⼀个变量给予number类型语法:v_nums number;2、引⽤表字段类型EG:定义⼀个变量这个变量的类型要和table表中id的类型⼀样语法:V_numtable.id%type;3、定义表变量(意思就是定义⼀个变量这个变量包含这个表中所有的字段及其表字段类型)Eg:如果有个表table有id number,name varchar2(100)这两个字段,现在定义⼀个表字段类型,v_tables那么相当于v_tables 这个表变量也有id number,name varchar2(100)这两个字段⼀⼀对应语法:v_tablstable%rowtype;2.2、变量的初始化个⼈认为变量初始化不初始化都应,⼀般情况都不会有什么影响,但是初始化是⼀个很好的习惯,可以避免出现⽤于变量不当出现乱码报错等显现,变量的初始化,也有这么两种⽅式1、声明变量的时候初始化语法:v_nums number:=0;2、先声明后初始化这种情况下需要注意声明变量当然是在声明体中,但是初始化的时候应该放在声明体中还是语句块体中呢?必须放到语句块中,因为变量的初始化也相当于变量的引⽤V_num number;BeginV_num :=0;End;在这⾥简单的提⼀下oracle中 := 与=的区别 := 相当于赋值,⽽=相当于是左右相等⼀般做判断才⽤,知识点少就不单独讲解了2.2、变量的应⽤变量的作⽤其实就是传值所⽤:如下的范例概况了⼀上的变量所有知识点createorreplaceprocedure ceshi_variate1 is--定义变量类型v_number number;--⾃定义变量v_/doc/2f11756313.html%type;--引⽤表字段类型变量v_tablsceshi%rowtype;--引⽤表类型表变量--变量且初始化v_variate1number:=0;4begin--初始化变量v_number := 0;--引⽤变量select1into v_number from dual;select'A'into v_char from dual;v_/doc/2f11756313.html:= v_char;dbms_output.put_line(v_/doc/2f11756313.html);end;3、参数存储既然是⼀段完整的代码、那么就少不了参数(parameter)存储过程的参数分为两种:1、⼊参:⼊参是指外部提供的数据需要通过参数介质传送到过程中使⽤2、出参:出参是指代码执⾏到⼀定程度需要返回给外部⼀个信息出⼊参的定义⽅式:⼊参和出参、只能在procedure处定义、不可以给包传送⼀个参数、只能是给⼀个包体传送⼀个参数,⼊参使⽤in关键字、出参使⽤out关键字使⽤参数的时候需要注意的是出参:出参也是⼀个返回值、容易想到⽤return,但是存储过程中不能直接使⽤return,需要通过oracle包dbma_output.put_line返回参数createorreplaceprocedure ceshi_parameter(nums innumber,chars invarchar2,returnnum outnumber) is/*参数:本存储有两个⼊参IN(nums,chars),⼀个出参OUT(returnnum),参数中只能定义参数类型不能定义参数的长度*/v_num number := 0; ---定义变量v_num类型number,初始化值 0v_char varchar2(100) := 'A'; ---定义变量v_char类型varchar2(100) ,初始化值 A begin--参数的引⽤--直接引⽤(但是cursor游标中不能直接引⽤,之后讲解)select nums into v_num from dual;select chars into v_char from dual;dbms_output.put_line(v_num || ',' || v_char);---简介引⽤(就是将参数赋值给⼀个变量,再应⽤这个变量)v_num := 0;v_char := 'A';v_num := nums;v_char := chars;--IF 语句之后讲解if v_num = 3thendbms_output.put_line('3');endif;if v_char = 'S'thendbms_output.put_line('S');endif;--现在我们想返回参数returnnumreturnnum := 1;--错误写法、存储中不能直接使⽤return,如果要返回使⽤dbms包--return returnnum;dbms_output.put_line(returnnum);end;4、GOTO&EXITGOTO也被俗称为断点(point)断点语法goto point; 注意:goto中间没有空格,point就是跳转的⽬的点名称是⾃定义的,⽬的点也是必不可缺少的且⽤书名号引起来,详见代码类似于断点的关键字:exit exit是指跳出当前循环、执⾏循环体之后的代码使⽤goto语法:跳转太灵活不建议使⽤,使⽤的时候应避免造成死循环、好在goto造成死循环时会有执⾏会报错、编译不报错,for loop 死循环编译执⾏均不报错!Goto和exit的区别:A)goto需要制定⽬标点,exit 不需要默认执⾏当前循环体之后的第⼀条语句B)goto可以出现在执⾏体(也就是begin~end)任何⼀个地⽅,提别灵活⽽exit只能出现在⼀个循环体内C)goto⽬标点时⽬标点之后必须要有可执⾏的语句,⽬标值不能直接在end之上EG:createorreplaceprocedure ceshi_point is---断点的使⽤⽅式v_num number := 1;beginif1 = 1thengoto point;endif;dbms_output.put_line('overds1');<>dbms_output.put_line('overds2');<>dbms_output.put_line('overds3');goto point3;<>6dbms_output.put_line('overds');goto point2;<>dbms_output.put_line('overdss');loopv_num := v_num + 1;if v_num = 10thendbms_output.put_line('GOTO NEXT' || v_num);gotonext;endif;endloop;<>--EXITloopv_num := v_num + 1;if v_num = 10thendbms_output.put_line('GOTO NEXT' || v_num);exit;endif;endloop;goto ends;<>Dbms_Output.put_line('END LOOP');end;5、事务如果要写⼀个严谨、优秀的存储过程必须对事物要有⼀定的⽐较深刻的理解,⾸先任何代码都是有BUG的、存储过程也是⼀样,⼀个编译通过执⾏了很久的代码,不代表不会某天爆出⼀个错误:⽽存储过程只要作⽤是对数据的处理,也就是把数据从某个地⽅提取到内从中在内存中⾼效的完成⼀系列操作后再将数据写到磁盘中,⽽在整个操作流中任何⼀个操作都是⼀个事物,⽐如⼀个insert/update/delete等都是⼀个事物,队伍事物的处理关键字最长⽤到的是commit和rollback,很多存储中很少看到rollback、是因为oracle有⾃动回滚机制,但是作为⼀个程序员必须明⽩和熟练的使⽤commit和rollbackCommit提交; rollback回滚;5.1、commit和rollback的关系1、⼀个已经提交 (commit)的事物是不可以回滚(rollback)的,数据不会回退,也许你会迷糊那么delete的数据在⼀定时间内是怎么找回来的,这个使⽤闪回技术,和这个不挂钩别瞎扯。
oracle 存储过程内容
oracle 存储过程内容Oracle存储过程是一种在数据库中存储的一段预编译的PL/SQL代码,可以在需要的时候被调用执行。
它可以完成复杂的数据库操作,提高数据库的性能和可维护性。
本文将介绍Oracle存储过程的基本概念、语法规则和应用场景,以帮助读者深入了解和使用这一功能。
一、Oracle存储过程的基本概念Oracle存储过程是由一系列的SQL语句、控制结构和变量组成的,它可以接受输入参数、返回输出结果,并且可以在数据库中被存储和重复使用。
存储过程可以在应用程序、触发器或其他存储过程中被调用执行,以实现特定的业务逻辑。
二、Oracle存储过程的语法规则Oracle存储过程的语法规则如下:1. 存储过程以CREATE PROCEDURE语句开始,后面跟着存储过程的名称和参数列表。
2. 存储过程的主体部分由BEGIN和END关键字包围,其中包含一系列的SQL语句和控制结构。
3. 存储过程可以定义输入参数、输出参数和局部变量,以及用于返回结果的游标。
4. 存储过程中可以使用IF、CASE、LOOP等控制结构来实现条件判断、循环等逻辑。
5. 存储过程可以使用异常处理模块来处理错误和异常情况。
6. 存储过程可以使用COMMIT和ROLLBACK语句来控制数据库事务。
7. 存储过程可以使用EXECUTE IMMEDIATE语句执行动态SQL语句。
8. 存储过程可以使用DBMS_OUTPUT包来输出调试信息。
三、Oracle存储过程的应用场景1. 数据库管理:可以使用存储过程来创建、修改和删除数据库对象,如表、视图、索引等。
2. 数据导入导出:可以使用存储过程来实现数据的批量导入和导出,提高数据的处理效率。
3. 数据转换和清洗:可以使用存储过程来实现数据的转换、清洗和校验,保证数据的质量和一致性。
4. 业务逻辑处理:可以使用存储过程来实现复杂的业务逻辑,如订单处理、库存管理等。
5. 数据报表生成:可以使用存储过程来生成各种类型的报表,如销售报表、财务报表等。
Oracle数据库的函数,存储过程,程序包,游标,触发器
Oracle数据库的函数,存储过程,程序包,游标,触发器Oracle⾃定义函数函数的主要特性是它必须返回⼀个值。
创建函数时通过 RETURN ⼦句指定函数返回值的数据类型。
函数的⼀些限制:●函数只能带有 IN 参数,不能带有 IN OUT 或 OUT 参数。
●形式参数必须只使⽤数据库类型,不能使⽤ PL/SQL 类型。
●函数的返回类型必须是数据库类型Create function 函数名称 return 返回值类型 asBegin····End 函数名称;--创建不带参数函数,返回t_book中书的数量create function getBookCount return number asbegindeclare book_count number;beginselect count(*) into book_count from t_book;return book_count;end;end getBookCount;--函数调⽤set serveroutput on;begindbms_output.put_line('表t_book中有'||getBookCount()||'本书');end;--创建带参数函数,查找某个表的记录数create function getTableCount(table_name varchar2) return number asbegindeclare recore_count number;query_sql varchar2(300);--定义sql语句beginquery_sql:='select count(*) from '||table_name;--execute immediate:⽴即执⾏该SQL语句execute immediate query_sql into recore_count;return recore_count;end;end getTableCount;--函数调⽤set serveroutput on;begindbms_output.put_line('表中有'||getTableCount('t_book_log')||'条数据');end;CREATE OR REPLACE FUNCTION item_price_rage (price NUMBER)/* 参数、指定返回类型 */RETURN varchar2AS/* 定义局部变量 */min_price NUMBER;max_price NUMBER;BEGINSELECT MAX(ITEMRATE), MIN(ITEMRATE) INTO max_price, min_priceFROM itemfile;IF price >= min_price AND price <= max_price THENRETURN '输⼊的单价介于最低价与最⾼价之间';ELSERETURN '超出范围';END IF;END;匿名块执⾏函数p NUMBER := 300;MSG varchar2(200);BEGINMSG := item_price_range(p);DBMS_OUTPUT.PUT_LINE(MSG);END;SELECT查询调⽤(因为函数必须有返回值)SELECT myfunction FROM dual;Oracle存储过程存储过程(Stored Procedure),就是⼀组⽤于完成特定功能的SQL语句集,该SQL语句集经过编译后存储在数据库中。
Oracle带输入输出参数的存储过程
Oracle带输⼊输出参数的存储过程(⼀)使⽤输⼊参数需求:在emp_copy中添加⼀条记录,empno为已有empno的最⼤值+1,ename不能为空且长度必须⼤于0,deptno为60。
创建存储过程:create or replace procedure insert_emp(emp_name in varchar2, dept_no in number) asbegindeclare max_empno number;beginif(emp_name is null or length(emp_name) =0) thenreturn;end if;if(dept_no !=60) thenreturn;end if;select max(empno) into max_empno from emp_copy;insert into emp_copy(empno, ename, deptno) values(max_empno +1, emp_name, dept_no);end;end insert_emp;/调⽤存储过程并验证:(1)SQL>execute insert_emp('Li Si', 60);PL/SQL procedure successfully completed.SQL>col empno format 99999;col ename format a15;col deptno format 99999;select empno, ename, deptno from emp_copy where deptno =60;EMPNO ENAME DEPTNO------ --------------- ------7981 Li Si 60(2)SQL>execute insert_emp('', 6);PL/SQL procedure successfully completed.SQL>select empno, ename, deptno from emp_copy where deptno =6;SQL>(⼆)使⽤输出参数需求:在上个需求的基础上,要分别统计表emp_copy插⼊数据前后的记录数。
oracle创建,删除存储过程,参数传递,创建,删除存储函数,存储过程和函数的查看,包,系统包
oracle创建,删除存储过程,参数传递,创建,删除存储函数,存储过程和函数的查看,包 ,系统包认识存储过程和函数存储过程和函数也是一种PL/SQL 块,是存入数据库的PL/SQL 块。
但存储过程和函数不同于已经介绍过的 PL/SQL 程序,我们通常把 PL/SQL 程序称为无名块,而存储过程和函数是以命名的方式存储于数据库中的。
和PL/SQL 程序相比,存储过程有很多优点,具体归纳如下:*存储过程和函数以命名的数据库对象形式存储于数据库当中。
存储在数据库中的优点是很明显的,因为代码不保存在本地,用户可以在任何客户机上登录到数据库,并调用或修改代码。
*存储过程和函数可由数据库提供安全保证,要想使用存储过程和函数,需要有存储过程和函数的所有者的授权,只有被授权的用户或创建者本身才能执行存储过程或调用函数。
*存储过程和函数的信息是写入数据字典的,所以存储过程可以看作是一个公用模块,用户编写的 PL/SQL 程序或其他存储过程都可以调用它 (但存储过程和函数不能调用PL/SQL 程序 ) 。
一个重复使用的功能,可以设计成为存储过程,比如:显示一张工资统计表,可以设计成为存储过程;一个经常调用的计算,可以设计成为存储函数;根据雇员编号返回雇员的姓名,可以设计成存储函数。
*像其他高级语言的过程和函数一样,可以传递参数给存储过程或函数,参数的传递也有多种方式。
存储过程可以有返回值,也可以没有返回值,存储过程的返回值必须通过参数带回;函数有一定的数据类型,像其他的标准函数一样,我们可以通过对函数名的调用返回函数值。
存储过程和函数需要进行编译,以排除语法错误,只有编译通过才能调用。
创建和删除存储过程创建存储过程,需要有 CREATE PROCEDURE或CREATE ANY PROCEDURE的系统权限。
该权限可由系统管理员授予。
创建一个存储过程的基本语句如下:CREATE [OR REPLACE] PROCEDURE 存储过程名 [(参数[IN|OUT|IN OUT] 数据类型 ...)]{AS|IS}[说明部分 ]BEGIN可执行部分[EXCEPTION错误处理部分 ]END [ 过程名 ];其中:可选关键字OR REPLACE表示如果存储过程已经存在,则用新的存储过程覆盖,通常用于存储过程的重建。
ORACLE存储过程详解
ORACLE存储过程详解1、定义所谓存储过程(Stored Procedure),就是⼀组⽤于完成特定功能的SQL语句集,该SQL语句集经过编译后存储在数据库中。
在使⽤时候,⽤户通过指定已经定义的存储过程名字并给出相应的存储过程参数来调⽤并执⾏它,从⽽完成⼀个或⼀系列的数据库操作。
2、存储过程的创建存储过程包含三部分:过程声明,执⾏过程部分,存储过程异常。
(1)⽆参存储过程语法create or replace procedure NoParProas //声明;begin // 执⾏;exception//存储过程异常;end;(2)带参存储过程实例create or replace procedure queryempname(sfindno emp.empno%type)assName emp.ename%type;sjob emp.job%type;begin....exception....end;(3)带参数存储过程含赋值⽅式create or replace procedure runbyparmeters(isal in emp.sal%type,sname out varchar,sjob in out varchar)asicount number;beginselect count(*) into icount from emp where sal>isal and job=sjob;if icount=1 then....else....end if;exceptionwhen too_many_rows thenDBMS_OUTPUT.PUT_LINE('返回值多于1⾏');when others thenDBMS_OUTPUT.PUT_LINE('在RUNBYPARMETERS过程中出错!');end;其中参数IN表⽰输⼊参数,是参数的默认模式。
oracle存储过程(无参一个参数两个参数输入输出参数)
oracle存储过程(⽆参⼀个参数两个参数输⼊输出参数)DROP TABLE DEMOA;CREATE TABLE DEMOA("DID" NVARCHAR2(100),"AGE" NUMBER,"TYPE" NVARCHAR2(2000))SELECT * FROM DEMOA;--⽰例1 ⽆参数CREATE OR REPLACE procedure demo002aserror_msg nvarchar2(1000);begindbms_output.put_line('The input string is:肖昌建' );error_msg := '没有错误!';end ;--⽅式⼀:begindemo002();end;--⽅式⼆:begindemo002;end;--⽰例2 ⼀个参数CREATE OR REPLACE procedure demo002(P_DID IN NVARCHAR2)aserror_msg nvarchar2(1000);begindbms_output.put_line('The input string is:' || P_DID);end ;--⽅式1declare n NVARCHAR2(200);beginn:='肖建';demo002(P_DID=>n);end;--⽅式2begindemo002(P_DID=>'肖建');end;-------------------------------------------------------------------------------------⽰例3 两个参数CREATE OR REPLACE PROCEDURE PRO_INSERT_DEMOA01(P_DID IN NVARCHAR2,P_AGE IN NUMBER)asbeginINSERT INTO DEMOA(DID,AGE,TYPE) VALUES(P_DID,P_AGE,'成年⼈');commit;END PRO_INSERT_DEMOA01;declare pid NVARCHAR2(100);page NUMBER;beginpid := 'gggg';page := 2;PRO_INSERT_DEMOA01(P_DID =>pid,P_AGE => page);end;--⽰例4 输⼊参数,输出参数CREATE OR REPLACE PROCEDURE PRO_INSERT_DEMOA(P_DID IN NVARCHAR2,P_AGE IN NUMBER,P_RESULT OUT NUMBER,P_REMARK OUT NVARCHAR2)asV_ERROR NVARCHAR2(2000);beginP_RESULT:=0;P_REMARK:='start';if P_AGE >18 thenINSERT INTO DEMOA(DID,AGE,TYPE) VALUES(P_DID,P_AGE,'成年⼈');commit;P_RESULT:=1;P_REMARK:='one';elsif P_AGE >= 6 and P_AGE <= 18 thenINSERT INTO DEMOA(DID,AGE,TYPE) VALUES(P_DID,P_AGE,'青少年');commit;P_RESULT:=1;P_REMARK:='two';elsedbms_output.put_line('other');end if;exceptionwhen no_data_foundthenP_RESULT := 2;when dup_val_on_indexthenP_RESULT := 3;when othersthenP_RESULT := -1;END PRO_INSERT_DEMOA;--调⽤DECLARE pid NVARCHAR2(100);page NUMBER;presult NUMBER;premark NVARCHAR2(2000);BEGINpid := 'gggg';page := 22;PRO_INSERT_DEMOA(P_DID=>pid,P_AGE=>page, P_RESULT=>presult, P_REMARK=>premark); dbms_output.put_line(presult);dbms_output.put_line(premark);END;。
Oracle存储过程、包、方法使用总结(推荐)
Oracle存储过程、包、⽅法使⽤总结(推荐)Oracle存储过程、包、⽅法使⽤总结,具体代码如⽰:/***@author:zhengwei*@date:2017-04-28*@desc:存储过程⽤法总结*/CREATE OR REPLACE PROCEDURE MYPROCEDURE(P_ID IN VARCHAR,P_STATUS OUT VARCHAR) --P_ID为输⼊参数 ,P_STATUS为输出参数AS---变量声明T_STATUS VARCHAR2(20);T_ID NUMBER;V_POSTYPE VARCHAR2(20);V_DESCRIPTION VARCHAR2(20);---对象变量定义和声明TYPE XRECORD IS RECORD(FUND VARCHAR2(50),BATCH_NO VARCHAR2(50),TRAN_AMT NUMBER,END_BAL NUMBER,TRAN_DATE VARCHAR2(50),TRAN_TIME VARCHAR2(50),SUB_WATER NUMBER);XWATER XRECORD;---游标声明,并填充数据CURSOR MY_CUR ISSELECT POS_TYPE, DESCRIPTION FROM VOTEMASTER;BEGIN---变量赋值(注意:in类型的参数不能直接赋值)T_STATUS := '1';P_STATUS := T_STATUS;DBMS_OUTPUT.put_line('P_STATUS:' || P_STATUS);BEGIN---循环游标,使⽤游标FOR V_ROW IN MY_CUR LOOPBEGINV_POSTYPE := V_ROW.POS_TYPE;V_DESCRIPTION := V_ROW.DESCRIPTION;DBMS_OUTPUT.put_line('POSTYPE:' || V_POSTYPE || ',description:' ||V_DESCRIPTION);END;END LOOP;END;---WHILE循环⽤法BEGINWHILE i < 10 LOOPBEGINi := i + 1;END;END LOOP;END;--将select查询的结果存⼊到变量中,可以同时将多个列存储多个变量中,必须有⼀条记录,否则抛出异常(如果没有记录抛出NO_DATA_FOUND) BEGINSELECT col1, col2 INTO 变量1, 变量2 FROM typestruct WHERE xxx;EXCEPTIONWHEN NO_DATA_FOUND THENxxxx;END;---IF判断语句⽤法BEGINSELECT VOTETITLE, VATESUMINTO T_NAME, T_COUNTFROM VOTEMASTERWHERE ID = P_ID;IF T_COUNT <= 0 THENP_STATUS := T_NAME || ':差';ELSIF T_COUNT > 0 AND T_COUNT < 3 THENP_STATUS := T_NAME || ':良好';ELSEP_STATUS := T_NAME || ':优秀';END IF;END;---对象变量赋值BEGINSELECT FUND,BATCH_NO,TRAN_AMT,END_BAL,TRAN_DATE,TRAN_TIME,SUB_WATERINTO XRECORDFROM ACCT_WATERWHERE FUND = P_ID;--对象变量的使⽤DBMS_OUTPUT.put_line(XRECORD.BATCH_NO || XRECORD.FUND);END;---索引表---我们在使⽤存储过程的时候经常需要处理记录集,也就是多条数据记录。
Oracle中存储过程的作用和用法
Oracle中存储过程的作⽤和⽤法 存储过程是Oracle开发者在数据转换或查询报表时经常使⽤的⽅式之⼀。
它就是想编程语⾔⼀样⼀旦运⾏成功,就可以被⽤户随时调⽤,这种⽅式极⼤的节省了⽤户的时间,也提⾼了程序的执⾏效率。
存储过程在数据库开发中使⽤⽐较频繁,它有着普通SQL语句不可替代的作⽤。
所谓存储过程,就是⼀段存储在数据库中执⾏某种功能的程序。
其中包含⼀条或多条SQL语句,但是它的定义⽅式和PL/SQL中的块、包等有所区别。
存储过程可以通俗地理解为是存储在数据库服务器中的封装了⼀段或多段SQL语句的PL/SQL代码块。
在数据库中有⼀些是系统默认的存储过程,那么可以直接通过存储过程的名称进⾏调⽤。
另外,存储过程还可以在编程语⾔中调⽤,如Java、C#等。
存储过程的作⽤(优点):1. 简化复杂的操作。
存储过程可以把需要执⾏的多条SQL语句封装到⼀个独⽴单元中,⽤户只需调⽤这个单元就能达到⽬的。
这样就实现了⼀⼈编写多⼈调⽤。
2. 增加数据独⽴性。
与视图的效果相似,利⽤存储过程可以把数据库基础数据和程序(或⽤户)隔离开来,当基础数据的结构发⽣变化时,可以修改存储过程,这样对程序来说基础数据的变化是不可见的,也就不需要修改程序代码了。
3. 提⾼安全性。
使⽤存储过程有效降低了错误出现的⼏率。
如果不使⽤存储过程要实现某项操作可能需要执⾏多条单独的SQL语句,⽽过多的执⾏步骤很可能造成更⾼的出现错误⼏率。
4. 提⾼性能。
完成⼀项复杂的功能可能需要多条SQL语句,同时SQL每次执⾏都需要编译,⽽存储过程可以包含多条SQL语句,⽽且创建后只需要编译⼀次,以后就可以直接调⽤。
存储过程语法:1. 创建语句:create or replace procedure 存储过程名。
如果没有or replace语句,则仅仅是新建⼀个存储过程。
如果系统存在该存储过程,则会报错。
Create or replace procedure 如果系统中没有此存储过程就新建⼀个,如果系统中有此存储过程则把原来删除掉,重新创建⼀个存储过程。
oracle存储过程详细介绍(创建,删除存储过程,参数传递等)
oracle存储过程详细介绍(创建,删除存储过程,参数传递等)oracle 创建,删除存储过程,参数传递,创建,删除存储函数,存储过程和函数的查看,包,系统包存储过程和函数也是⼀种PL/SQL块,是存⼊数据库的PL/SQL块。
但存储过程和函数不同于已经介绍过的PL/SQL程序,我们通常把PL/SQL程序称为⽆名块,⽽存储过程和函数是以命名的⽅式存储于数据库中的。
和PL/SQL程序相⽐,存储过程有很多优点,具体归纳如下:* 存储过程和函数以命名的数据库对象形式存储于数据库当中。
存储在数据库中的优点是很明显的,因为代码不保存在本地,⽤户可以在任何客户机上登录到数据库,并调⽤或修改代码。
* 存储过程和函数可由数据库提供安全保证,要想使⽤存储过程和函数,需要有存储过程和函数的所有者的授权,只有被授权的⽤户或创建者本⾝才能执⾏存储过程或调⽤函数。
* 存储过程和函数的信息是写⼊数据字典的,所以存储过程可以看作是⼀个公⽤模块,⽤户编写的PL/SQL程序或其他存储过程都可以调⽤它(但存储过程和函数不能调⽤PL/SQL程序)。
⼀个重复使⽤的功能,可以设计成为存储过程,⽐如:显⽰⼀张⼯资统计表,可以设计成为存储过程;⼀个经常调⽤的计算,可以设计成为存储函数;根据雇员编号返回雇员的姓名,可以设计成存储函数。
* 像其他⾼级语⾔的过程和函数⼀样,可以传递参数给存储过程或函数,参数的传递也有多种⽅式。
存储过程可以有返回值,也可以没有返回值,存储过程的返回值必须通过参数带回;函数有⼀定的数据类型,像其他的标准函数⼀样,我们可以通过对函数名的调⽤返回函数值。
存储过程和函数需要进⾏编译,以排除语法错误,只有编译通过才能调⽤。
创建和删除存储过程创建存储过程,需要有CREATE PROCEDURE或CREATE ANY PROCEDURE的系统权限。
该权限可由系统管理员授予。
创建⼀个存储过程的基本语句如下:CREATE [OR REPLACE] PROCEDURE 存储过程名[(参数[IN|OUT|IN OUT] 数据类型...)]{AS|IS}[说明部分]BEGIN可执⾏部分[EXCEPTION错误处理部分]END [过程名];其中:可选关键字OR REPLACE 表⽰如果存储过程已经存在,则⽤新的存储过程覆盖,通常⽤于存储过程的重建。
oracle数据库存储过程
DECLARE v_uuid1 varchar2(50);--护理记录ID v_uuid2 VARCHAR2(50);--护理记录体征ID v_uuid3 VARCHAR2(50);--护理记录辅助分页ID v_xingming VARCHAR2(50);--患者姓名 v_chuanghao VARCHAR2(50);--患者床号 v_shijian VARCHAR2(50);--测量具体时间 v_riqi VARCHAR2(20);--测量日期 v_shidian VARCHAR2(10);--测量时间点
一、什么是存储过程 二、为什么要写存储过程 三、存储过程结构d Procedure)是在大型数据库系统中,一组为了完成特定功能的 SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需 要再次编译,用户通过指定存储过程的名字并给出参数(如果该 存储过程带有参数)来调用存储过程。 简单的说就是专门干一件事一段sql语句。 可以由数据库自己去调用,也可以由java程序去调用。 在oracle数据库中存储过程是procedure。
(V_UUID1, :NEW.HIS_PATIENT_ID, :NEW.INPATIENT_NO, V_XINGMING, :NEW.WARDNO, V_CHUANGHAO, V_RIQI, V_SHIDIAN, :NEW.OPERATORID, :NEW.OPERATORNAM
E, V_SHIJIAN, '074064', 'jiaoyanma', :NEW.OPERATORID, :NEW.OPERATORNAM
E, '0004', V_SHIJIAN, '0','0','0','0');
Oracle——传入和传出参数
Oracle——传⼊和传出参数三种参数模式:in,out,in out1.in参数(只读参数)▪当过程被调⽤时,实参的值将传⼊该过程▪形参的值不能被修改,只能被存储过程读取,也就是说形参不能作为赋值⽬标▪默认的参数模式使In参数▪当过程结束时,实参的值不会改变2.out参数(只写参数)▪当过程被调⽤时,实参的值将忽略不计,不能传给形参▪形参的作⽤相当于没有被初始化的PL/SQL变量,其值为NULL,形参的值可以在过程中被修改▪实参必须是变量▪当过程结束时将形参的内容赋给实参SQL>create procedure count_emp2 (v_deptno dept.deptno%type,v_count out number)3as4begin5select count(*) into v_count from emp group by deptno having deptno=v_deptno;6 dbms_output.put_line('部门'||v_deptno||'有'||v_count||'个雇员');7end count_emp;8/过程已创建。
调⽤⽅式:⽅法1:SQL> variable v_count number;SQL>exec count_emp(10,:v_count);部门10有3个雇员PL/SQL 过程已成功完成。
⽅法2:SQL>declare2 v_count number;3begin4 count_emp(10,v_count);5end;6/部门10有3个雇员PL/SQL 过程已成功完成。
3.in out参数(可读写参数)▪形参可以读取,也可以写⼊,过程调⽤时,将实参的值传⼊给形参,过程结束后,⼜将形参的值赋给实参▪形参和实参都必须是变量4.形参不需要对数据类型进⾏约束,约束来⾃于实参5.形参的默认值,只有In参数有默认值SQL>create or replace procedure p_emp2 (v_id in number default4)3as4begin5insert into emp(ename,empno) values('林慧',v_id);6end;7/过程已创建。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
type mod_cur is ref cursor;
procedure proc_login_check(u_name in varchar2,u_pwd in varchar2,limit_id out number);
procedure proc_get_fuction(signs in number,vm_id in number,vm_name in varchar2,vm_link in varchar2,vm_remark in varchar2,re_singn out number,mod_result out mod_cur);
vo_price in number,voi_status in varchar2,voi_remark in varchar2,vol_id in number,vad_name in varchar2,
vol_time in varchar2,vol_deal in varchar2,vol_status in varchar2,vol_remark in varchar2,
begin
--取记录总数
execute immediate sql_Count into v_count;
total_record := v_count;
if mod(total_record,maxNum)=0 then
total_page:=total_record/maxNum;
else
create or replace package body hotel_package
is
--------------- 登录验证的存储过程
procedure proc_login_check(u_name in varchar2,u_pwd in varchar2,limit_id out number)
re_singn:=1;
elsif signs=3 then
update hotel_module set m_name=vm_name , m_link=vm_link ,m_remark=vm_remark where m_id=vm_id;
re_singn:=1;
open mod_result for
select * from hotel_module where m_id=vm_id;
end if;
end if;
end proc_get_fuction;
-----获取酒店信息的存储过程
procedure proc_hotel_info(signs in number,vi_id in number,vi_title in varchar2,vi_detail in varchar2,vi_remark in varchar2,re_singn out number,mod_result out mod_cur)
delete from hotel_introduce where i_id=vi_id;
re_singn:=1;
elsif signs=3 then
update hotel_introduce set i_title=vi_title , i_detail=vi_detail ,i_remark=vi_remark where i_id=vi_id;
is
ad_pwd varchar2(20);
begin
select ad_pwd into ad_pwd from hotel_adinfo where ad_name=u_name;
if ad_pwd=u_pwd then
select limit_id into limit_id from hotel_adinfo where ad_name=u_name;
where rownum <= ' || v_heiRowNum ||') b
where rn >=' || v_lowRowNum;
open emp_result for v_sql;
end fenye;
----留言信息处理的存储过程
procedure proc_assess(signs in number,va_id in number,vad_name in varchar2,vreply in varchar2,vdetail in varchar2,re_singn out number,mod_result out mod_cur)
procedure proc_hotel_info(signs in number,vi_id in number,vi_title in varchar2,vi_detail in varchar2,vi_remark in varchar2,re_singn out number,mod_result out mod_cur);
else
limit_id:=0;
end if;
end proc_login_check;
-----获取功能模块的存储过程
procedure proc_get_fuction(signs in number,vm_id in number,vm_name in varchar2,vm_link in varchar2,vm_remark in varchar2,re_singn out number,mod_result out mod_cur)
re_singn:=1;
elsif signs=3 then
update hotel_assess set reply=vreply where a_id=va_idf signs=4 then
if va_id=0
total_record out number,total_page out number,emp_result out mod_cur)
is
v_count number;
v_heiRowNum number;
v_lowRowNum number;
v_sql varchar2(200);
-----建包
---用singn 1,2,3,4分别标记为增删改查
drop package body hotel_package
drop package hotel_package
create or replace package hotel_package
procedure fenye(pageNo in number, maxNum in number,sql_Count in varchar2,exec_sql in varchar2,total_record out number,total_page out number,emp_result out mod_cur);
total_page:= trunc(total_record/maxNum)+1;
end if;
v_lowRowNum:=(pageNo-1)*maxNum+1;
v_heiRowNum:=pageNo*maxNum;
--分页查询语句
v_sql := 'select * from (select a.*,rownum rn from (' || exec_sql ||') a
is
begin
if signs=1 then
insert into hotel_module values(hotel_module_id.nextval,vm_name,vm_link,vm_remark);
re_singn:=1;
elsif signs=2 then
delete from hotel_module where m_id=vm_id;
procedure proc_userinfo(signs in number,signs2 in number,vu_id in number,vu_name in varchar2,vtelNum in varchar2,vrealName in varchar2,vgender in varchar2,
elsif signs=4 then
if vm_id=0 then
open mod_result for
select * from hotel_module order by m_id;
else
-- re_singn:=vm_id;
re_singn:=1;
elsif signs=4 then
if vi_id=0 then
open mod_result for
select * from hotel_introduce order by i_id;
else
open mod_result for
select * from hotel_introduce where i_id=vi_id;
re_signs out number,mod_result out mod_cur );*/
procedure proc_assess(signs in number,va_id in number,vad_name in varchar2,vreply in varchar2,vdetail in varchar2,re_singn out number,mod_result out mod_cur);
/*--signs2判断操作的是哪张表
procedure proc_hotel_indent(signs in number,signs2 in number,voi_id in number,vr_id in number,vf_time in varchar2,ve_time in varchar2,