日期:2014-05-17  浏览次数:20943 次

Oracle存储过程的几个问题,望指教
SQL code


--假如这里举个例如果有sql2005里面写一个存储过程可以用Return返回值,
CREATE procedure PROC_INSERT
(    
    @Name_cn VARCHAR(100)   
)
AS
 
BEGIN
 INSERT INTO TabelName (NAME_CN) 
 VALUES (@Name_cn)
 
 RETURN '执行成功'
END

--如果换了Oracle数据的存储过程是否可以同样实现呢?
--Oracle是不是要想得到返回结果必须使用OUT参数返回一个结果.请指教


--还有个实例例如sql2005可以写一个没有参数的存储过程
--Oracle有没有同样的方式呢? 
CREATE procedure PROC_INSERT 
AS 
BEGIN 
 --要执行的语句  
END


--还有一个问题Oracle是否可以在一个存储过程执行多个Select语句
--例如Sql2005可以这样写,Oracle是否可以获取到这个查询结果呢,是三个Select的查询结果集
CREATE procedure PROC_INSERT 
 
AS
 
BEGIN
 
 SELECT * FROM Tabel_1  
 SELECT * FROM Tabel_2  
 SELECT * FROM Tabel_3
END




------解决方案--------------------
1.CREATE procedure PROC_INSERT(Name_cn varchar,result varchar)

AS
 
BEGIN
 INSERT INTO TabelName (NAME_CN) 
 VALUES (Name_cn)
 
 result :='执行成功';
END
2.oracle存储过程不能只执行select语句。

------解决方案--------------------
问题1:
Oracle中的存储子程序分为存储过程和存储函数,二者的区别就是后者可以有返回值。示例请参考:


问题2:Oracle存储过程可以没有参数。

问题3:Oracle存储过程中可以写不限数理的查询语句,但查询语句必须带有into子句。
你举的例子的实现,得使用光标,来保存查询结果集。
当然需要定义3个光标了,因为每个查询语句都是一个结果集(因为会返回多条记录)
------解决方案--------------------
1、如果有insert,delete,update等事务处理,使用过程
2、使用过程,可以通过out argument的方式返回
3、如果仅select,返回内容,更多时候使用function

create or replace procedure pro1 is
begin
insert into a1 values(100,100);
end pro1;

4、oracle支持自定义类型,你可以范围任何形式,包括一个组合的dataset
------解决方案--------------------
4、oracle支持自定义类型,你可以范围任何形式,包括一个组合的dataset

你可以自定义任何形式
------解决方案--------------------
探讨
引用:

1、如果有insert,delete,update等事务处理,使用过程
2、使用过程,可以通过out argument的方式返回
3、如果仅select,返回内容,更多时候使用function

create or replace procedure pro1 is
begin
insert into a1 values(100,100);……