存储过程创建调用

创建时的基本定义与调用
注:
CREATE OR REPLACE
没有就创建,有的话就更新。
SQL> CREATE OR REPLACE PROCEDURE HelloWorld AS
2 BEGIN
3 dbms_output.put_line(‘Hello World‘);
4 END HelloWorld;
5 /
Procedure created.

SQL> set serveroutput on
SQL>
SQL> BEGIN
2 HelloWorld();
3 END;
4 /
Hello World
PL/SQL procedure successfully completed.
修改存储过程
SQL> CREATE OR REPLACE PROCEDURE HelloWorld AS
2 BEGIN
3 dbms_output.put_line(‘Hello World V2.0‘);
4 END HelloWorld;
5 /
Procedure created.
SQL>
SQL> set serveroutput on
SQL>
SQL> BEGIN
2 HelloWorld();
3 END;
4 /
Hello World V2.0
PL/SQL procedure successfully completed.
参数定义
单个参数
SQL> CREATE OR REPLACE PROCEDURE HelloWorld1 (
2 p_user_name VARCHAR2
3 ) AS
4 BEGIN
5 dbms_output.put_line(‘Hello ‘ || p_user_name || ‘!‘);
6 END HelloWorld1;
7 /
Procedure created.
SQL>
SQL>
SQL> BEGIN
2 HelloWorld1(‘Edward‘);
3 END;
4 /
Hello Edward!
PL/SQL procedure successfully completed.
IN、OUT、IN OUT
SQL> CREATE OR REPLACE PROCEDURE HelloWorld2 (
2 p_user_name IN VARCHAR2,
3 p_out_val OUT VARCHAR2,
4 p_inout_val IN OUT VARCHAR2
5 ) AS
6 BEGIN
7 dbms_output.put_line(‘Hello ‘ || p_user_name || p_inout_val || ‘!‘);
8 p_out_val := ‘A‘;
9 p_inout_val := ‘B‘;
10 END HelloWorld2;
11 /
Procedure created.
SQL> DECLARE
2 p_outval VARCHAR2(10);
3 p_inoutval VARCHAR2(10) := ‘~Hi~‘;
4 BEGIN
5 HelloWorld2(‘Edward‘, p_outval, p_inoutval);
6
7 dbms_output.put_line(‘p_outval=‘ || p_outval);
8 dbms_output.put_line(‘p_inoutval=‘ || p_inoutval);
9 END;
10 /
Hello Edward~Hi~!
p_outval=A
p_inoutval=B
PL/SQL procedure successfully completed.
SQL>
参数的默认值
SQL> CREATE OR REPLACE PROCEDURE HelloWorld3 (
2 p_user_name VARCHAR2,
3 p_val1 VARCHAR2 DEFAULT ‘ Good Moning,‘,
4 p_val2 VARCHAR2 DEFAULT ‘ Nice to Meet you‘
5 ) AS
6 BEGIN
7 dbms_output.put_line(‘Hello ‘ || p_user_name || p_val1 || p_val2 || ‘!‘
);
8 END HelloWorld3;
9 /
Procedure created.
SQL> BEGIN
2 HelloWorld3(‘Edward‘);
3 HelloWorld3(‘Edward‘, ‘ Good Night,‘);
4 HelloWorld3(‘Edward‘, ‘ Good Night,‘, ‘Bye‘);
5 END;
6 /
Hello Edward Good Moning, Nice to Meet you!
Hello Edward Good Night, Nice to Meet you!
Hello Edward Good Night,Bye!
PL/SQL procedure successfully completed.

指定参数名称调用
此部分使用 “参数默认值”那一小节的存储过程。
用于说明当最后2个参数是有默认的时候,如何跳过中间那个。
SQL> BEGIN
2 HelloWorld3(‘Edward‘);
3 HelloWorld3(‘Edward‘, p_val1 => ‘ Good Night,‘);
4 HelloWorld3(‘Edward‘, p_val1 => ‘ Good Night,‘, p_val2 => ‘Bye‘);
5 HelloWorld3(‘Edward‘, p_val2 => ‘ HeiHei ‘);
6 END;
7 /
Hello Edward Good Moning, Nice to Meet you!
Hello Edward Good Night, Nice to Meet you!
Hello Edward Good Night,Bye!
Hello Edward Good Moning, HeiHei !
PL/SQL procedure successfully completed.

存储过程返回结果集
有些人原先是在SQL Server下的存储过程的。
SQL Server的存储过程,可以在里面写一段SQL语句,然后其它的开发语言比如C#,可以在调用存储过程的后,获取到存储过程执行所返回的结果集。
此方法在 SQL Server 中可用,在 Oracle 中不可用。
首先举一个 SQL Server 的成功的例子:
CREATEPROCEDURE testProc
AS
BEGIN
SELECT‘Hello 1‘AS A,‘World 1‘AS B UNIONALL
SELECT‘Hello 2‘AS A,‘World 2‘AS B;
END

BEGIN
DECLARE @RC int;
EXECUTE @RC = testProc;
PRINT @RC;
END

A B
------- -------
Hello 1 World 1
Hello 2 World 2
(2 行受影响)
0

然后 照着写一个 Oracle 的。
SQL> CREATE OR REPLACE PROCEDURE testProc
2 AS
3 BEGIN
4 SELECT ‘Hello 1‘ AS A, ‘World 1‘ AS B FROM DUAL UNION ALL
5 SELECT ‘Hello 2‘ AS A, ‘World 2‘ AS B FROM DUAL ;
6 END;
7 /

警告:创建的过程带有编译错误。

SQL> show err;
PROCEDURE TESTPROC出现错误:

LINE/COL ERROR
-------- -----------------------------------------------------------------
4/3 PLS-00428: 在此 SELECT 语句中缺少 INTO 子句

假如要实现 存储过程返回结果集,以便让 C# 之类的代码调用的话,请参考 Oracle 函数 当中的 返回结果集的函数的部分。

时间: 2024-10-12 03:39:19

存储过程创建调用的相关文章

oracle创建函数和调用存储过程和调用函数的例子(区别)

创建函数: 格式:create or replace function func(参数 参数类型) Return number Is Begin --------业务逻辑--------- End; --创建函数 create or replace function func (dno number) return number is t_max number; begin select max(sal) into t_max from emp t where deptno = dno; ret

MySQL之存储过程创建和调用

一.MySQL存储过程_创建-调用 1.1存储过程:SQL中的"脚本"1.创建存储过程2.调用存储过程3.存储过程体4.语句标签块 二.MySQL存储过程简单介绍: 存储过程(Stored Procedure):提示:#SQL语句:先编译后执行 一组可编程的函数,是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行. 优点(为什么要用存储过程?): ①将重复性很高的一些操作,封装到一个存储过程中,简化了对这些SQL的调

MySQL-进阶18 存储过程- 创建语句-参数模式(in/out/inout-对应三个例子) -调用语法-delimiter 结束标记'$'

/* MySQL-进阶18 存储过程 和 函数 存储过程和函数:类似于java中的方法 好处: 1.提高代码的重用性 2.简化操作 */ #存储过程 /* 含义: 一组已经预见编译好的SQL语句的集合, 理解成批处理语句; 好处: 减少操作次数,减少了编译次数,减少了和服务器的连接次数,提高了效率 */ /* #一: 创建语句 create procedure 存储过程名(参数列表) begin 存储过程体(一组合法的SQL语法) end 注意: 1.参数列表包含三个部分 : 参数模式 参数名

Oracle 10g实现存储过程异步调用

DBMS_JOB是什么?DBMS_JOB是Oracle数据库提供的专家程序包的一个.主要用来在后台运行程序,是数据库中一个极好的工具. 可用于自动调整调度例程任务,例如分析数据表,执行一些归档操作,清理草稿表等等.使用语法说明.使用DBMS_JOB主例程是SUBMIT例程, 对SUBMIT例程中的各变量含义说明:JOB: 一个作业标识符,由系统来分配(OUT参数).WHAT: 将要运行的SQL文本,必须是有效的PL/SQL语句或一段代码. 例如: 运行存储过程P,可以传递字符串P;(包括分号)给

JAVA对存储过程的调用方法

博客分类: java java存储过程sql 一:Java如何实现对存储过程的调用:   A:不带输出参数的   ---------------不带输出参数的----------------------------------create procedure getsum@n int =0<--此处为参数-->asdeclare @sum int<--定义变量-->declare @i intset @sum=0set @i=0while @i<[email protecte

JDBC对MySQL数据库存储过程的调用

一.MySQL数据库存储过程: 1.什么是存储过程 存储过程(英文:Stored Procedure)是在大型数据库系统中,为了完毕特定功能而编写的一组的SQL语句集.存储过程经编译存储在数据库中.用户通过指定存储过程的名字并给出參数(假设该存储过程带有參数)来运行它. 2.与一般SQL语句相比.使用存储过程有哪些长处.有哪些缺点 长处: 1).降低了脚本的运行环节,缩短了获取数据的时间.存储过程仅仅在创建的时进行编译,在调用使用的时候直接运行.不需再次编译:而一般SQL语句每次运行前都须要编译

JDBC存储过程的调用

一. JDBC存储过程的调用 (1)存储过程是用SQL语句和控制流语句等编写的一段程序代码,在创建时已被编译成机器代码并存储在数据库中供客户端调用. 存储过程有以下优点: 1.所生成的机器代码被永久存储在数据库中,客户端调用时不需要重新编译,执行起来效率要高一些. 2.存储过程的网络使用效率比等效的SQL 语句要高. (2)JDBC通过java.sql.CallableStatement接口调用数据库服务器中的存储过程: (3)CallableStatement接口继承了PreparedStat

在 SQL Server 的存储过程中调用 Web 服务

介绍 一个老朋友计划开发一个应用,基于 .NET 和 Socket,但需要在存储过程中调用 Web 服务. 在这篇文章中我们将分享这个应用的经验,讲述如何在存储过程中调用 Web 服务,并传递参数. Step 1 首先我们在 Visual Studio 中创建一个 Web 服务项目: Step 2 接下来在服务中添加我们需要的方法,在这里我们创建 6 个方法,分别是 Greet (string Param1) ,HelloWord() , Add, subtract, 和 Divide (Num

ADO.NET之存储过程的调用

要执行存储过程就必须连接到数据库 代码如下: string source = "server=(local) \\SQLEXPRESS;integrated security=SSPI;database=Student"; SqlConnection con = new SqlConnection(source);//建立一个连接 con.Open();//打开数据库 if (con.State == ConnectionState.Open)//ConnectionState为枚举值