当前位置:首页 » 存储配置 » oracle存储过程使用

oracle存储过程使用

发布时间: 2022-07-25 13:28:36

A. oracle 数据库 怎么执行存储过程

一。 概述Oracle存储过程开发的要点是:
1; 使用Notepad文本编辑器,用Oracle PL/sql编程语言写一个存储过程;
2; 在Oracle数据库中创建一个存储过程;
3; 在Oracle数据库中使用SQL*Plus工具运行存储过程;
4; 在Oracle数据库中修改存储过程;
5; 通过编译错误调试存储过程;
6; 删除存储过程;二。环境配置
包括以下内容:
1; 一个文本编辑器Notepad;
2; Oracle SQL*Plus工具,提交Oracle SQL和PL/SQL 语句到Oracle database。
3; Oracle 10g express数据库,它是免费使用的版本;
需要的技巧:
4; SQL基础知识,包括插入、修改、删除等
5; 使用Oracle's SQL*Plus工具的基本技巧;
6; 使用Oracle's PL/SQL 编程语言的基本技巧;三。写一个存储过程
在Notepad, 写下:
CREATE OR REPLACE PROCEDURE skeletonISBEGINNULL;END;把文件存为skeleton.sql.
让我们一行行遍历这个存储过程:
1 CREATE OR REPLACE PROCEDURE skeleton2 IS3 BEGIN
4 NULL;5 END;行1:CREATE OR REPLACE PROCEDURE 是一个SQL语句通知Oracle数据库去创建一个叫做skeleton存储过程, 如果存在就覆盖它;行2:IS关键词表明后面将跟随一个PL/SQL体。
行3:BEGIN关键词表明PL/SQL 体的开始。
四。创建一个存储过程
SQL语句CREATE OR REPLACE PROCEDURE在Oracle数据库中创建、编译和保存一个存储过程。
从Window打开SQL*Plus并且从SQL*Plus 登录到你的数据库;打开skeleton.sql文件。
在SQL命令提示符下输入以下命令:
SQL@skeletonSQL/SQL*Plus装载skeleton.sql文件的内容到 SQL*Plus缓冲区并且执行SQL*Plus语句;SQL*Plus 会通知你存储过程已经被成功地创建。

B. oracle 存储过程使用

使用存储过程返回Oracle的结果集比较麻烦,必须要建包,并且声明游标类型,Java中的ResultSet实际上就是数据库的游标
例子
sql:
create or replace package pkg_1 as

type cursorType is ref cursor;

procere getDept(
rs out cursorType) ;

end pkg_1;

create or replace package body pkg_1 as

procere getDept(
rs out cursorType)
as
begin
open rs for
select * FROM dept ;
end getDept;
end pkg_1;

连接类
public class DBHelper {
private static String driver = "oracle.jdbc.driver.OracleDriver";

private static String url = "jdbc:oracle:thin:@localhost:1521:SVSE";

private static String user = "scott";

private static String password = "tiger";

public static Connection getConnection() {
try {
Class.forName(driver);
} catch (ClassNotFoundException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}

Connection conn = null;
try {
conn = DriverManager.getConnection(url, user, password);
} catch (SQLException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
return conn;
}

}

访问存储过程的代码

String sql = "{call pkg_1.getDept(?)}";
Connection conn = DBHelper.getConnection();
try {
CallableStatement cstmt = conn.prepareCall(sql);
cstmt.registerOutParameter(1, OracleTypes.CURSOR);
cstmt.execute();
ResultSet rs = (ResultSet) cstmt.getObject(1);
while (rs.next()) {
System.out.print(rs.getString(1));
System.out.print("\t");
System.out.print(rs.getString(2));
System.out.print("\t");
System.out.println(rs.getString(3));
}
} catch (SQLException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}

C. oracle存储过程的怎么用

导出dmp需要用exp程序(一般是命令行调用,可用exp help=y查看相关参数),其他的东西可以在存储过程中实现
Create Or Replace Procere SP_Shujuzhuanyi Is
Begin
Insert Into NewTable
Select * From OldTable Where dt < Trunc(SysDate) - 20;

Delete From OldTable Where dt < Trunc(SysDate) - 20;
End;
执行完存储过程导出数据成dmp文件,再清空新的表,应该就是这样了

D. 请问oracle怎么执行存储过程

我试验过了,就是exec 存储过程名或者execute 存储过程名(参数),请你在仔细确认一下,你的存储过程名写没写对呀,或者你没有进入sqlplus中?

----
以上,希望对你能有帮助。

E. 如何在oracle中使用存储过程!

举例说明吧:
例如:把scott用户下emp表的雇员薪水sal小于1500的,统一上调30% 。相应的存储过程是:
create or replace procere emp_sal is
type emp_cursor is ref cursor;
test_cursor emp_cursor;
v_empno number(10);
v_sal emp.sal%type;
begin
open test_cursor for select empno,sal from emp;
loop
fetch test_cursor into v_empno,v_sal;
exit when test_cursor%notfound;
if v_sal<1500 then
update emp set sal=sal*1.3 where empno=v_empno;
end if;
end loop;
end;

操作步骤:
1. 在“运行”中输入cmd或command
2. sqlplus /nolog
3. conn / as sysdba
4. 将上述存储过程粘贴过来并执行。
5. commit

F. ORACLE存储过程怎么调用

在sqlplus中:
SQL>execute [包名.]过程名(参数列表); --然后回车即可

在其他过程或函数中,直接调用就行了。

G. oracle中的存储过程,有什么作用,以及怎么在代码中使用

定义:存储过程(Stored Procere )是一组为了完成特定功能的SQL 语句
集,经编译后存储在数据库中。用户通过指定存储过程的名字并给出参数
(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要
对象,任何一个设计良好的数据库应用程序都应该用到存储过程。
存储过程是由流控制和SQL 语句书写的过程,这个过程经编译和优化后
存储在数据库服务器中,应用程序使用时只要调用即可。在ORACLE 中,
若干个有联系的过程可以组合在一起构成程序包。

优点:存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。
2.当对数据库进行复杂操作时(如对多个表进行Update、Insert、Query、Delete时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。
3.存储过程可以重复使用,可减少数据库开发人员的工作量。
4.安全性高,可设定只有某用户才具有对指定存储过程的使用权。
proc = connection.prepareCall("{ call SIM_MEDICARE.P_Isinblacklist(?,?,?,?,?) }");
proc.setString(1, “”);设置传入参数
proc.registerOutParameter(4, Types.VARCHAR);注册传出参数
proc.execute();执行过程
proc.getString(4)获取结果

H. 如何使用Oracle存储过程的一个简单例子

楼主您好
---创建表
create table TESTTABLE
(
id1 VARCHAR2(12),
name VARCHAR2(32)
)
select t.id1,t.name from TESTTABLE t
insert into TESTTABLE (ID1, NAME)
values ('1', 'zhangsan');

insert into TESTTABLE (ID1, NAME)
values ('2', 'lisi');

insert into TESTTABLE (ID1, NAME)
values ('3', 'wangwu');

insert into TESTTABLE (ID1, NAME)
values ('4', 'xiaoliu');

insert into TESTTABLE (ID1, NAME)
values ('5', 'laowu');
---创建存储过程
create or replace procere test_count
as
v_total number(1);
begin
select count(*) into v_total from TESTTABLE;
DBMS_OUTPUT.put_line('总人数:'||v_total);
end;
--准备
--线对scott解锁:alter user scott account unlock;
--应为存储过程是在scott用户下。还要给scott赋予密码
---alter user scott identified by tiger;
---去命令下执行
EXECUTE test_count;
----在ql/spl中的sql中执行
begin
-- Call the procere
test_count;
end;

create or replace procere TEST_LIST
AS
---是用游标
CURSOR test_cursor IS select t.id1,t.name from TESTTABLE t;
begin
for Test_record IN test_cursor loop---遍历游标,在打印出来
DBMS_OUTPUT.put_line(Test_record.id1||Test_record.name);
END LOOP;
test_count;--同时执行另外一个存储过程(TEST_LIST中包含存储过程test_count)
end;
-----执行存储过程TEST_LIST
begin
TEST_LIST;
END;
---存储过程的参数
---IN 定义一个输入参数变量,用于传递参数给存储过程
--OUT 定义一个输出参数变量,用于从存储过程获取数据
---IN OUT 定义一个输入、输出参数变量,兼有以上两者的功能
--这三种参数只能说明类型,不需要说明具体长度 比如 varchar2(12),defaul 可以不写,但是作为一个程序员最好还是写上。

---创建有参数的存储过程
create or replace procere test_param(p_id1 in VARCHAR2 default '0')
as v_name varchar2(32);
begin
select t.name into v_name from TESTTABLE t where t.id1=p_id1;
DBMS_OUTPUT.put_line('name:'||v_name);
end;
----执行存储过程
begin
test_param('1');
end;

default '0'

---创建有参数的存储过程
create or replace procere test_paramout(v_name OUT VARCHAR2 )
as
begin
select name into v_name from TESTTABLE where id1='1';
DBMS_OUTPUT.put_line('name:'||v_name);
end;
----执行存储过程
DECLARE
v_name VARCHAR2(32);
BEGIN
test_paramout(v_name);
DBMS_OUTPUT.PUT_LINE('name:'||v_name);
END;
-------IN OUT
---创建存储过程
create or replace procere test_paramINOUT(p_phonenumber in out varchar2)
as
begin
p_phonenumber:='0571-'||p_phonenumber;
end;

----
DECLARE
p_phonenumber VARCHAR2(32);
BEGIN
p_phonenumber:='26731092';
test_paramINOUT(p_phonenumber);
DBMS_OUTPUT.PUT_LINE('新的电话号码:'||p_phonenumber);
END;
-----sql命令下,查询当前用户的存储过程或函数的源代码,
-----可以通过对USER_SOURCE数据字典视图的查询得到。USER_SOURCE的结构如下:

SQL> DESCRIBE USER_SOURCE ;
Name Type Nullable Default Comments

---- -------------- -------- -------
-------------------------------------------------------------------------------------------------------------
NAME VARCHAR2(30) Y Name of the object

TYPE VARCHAR2(12) Y Type of the object: "TYPE", "TYPE BODY", "PROCEDURE", "FUNCTION",
"PACKAGE", "PACKAGE BODY" or "JAVA SOURCE"
LINE NUMBER Y Line number of this line of
source

TEXT VARCHAR2(4000) Y Source text

SQL>
---查询出存储过程的定义语句
select text from user_source WHERE NAME='TEST_COUNT';
----查询存储过程test_paramINOUT的参数
SQL> DESCRIBE test_paramINOUT;
Parameter Type Mode Default?
------------- -------- ------ --------
P_PHONENUMBER VARCHAR2 IN OUT
SQL>
---查看当前的存储过程的状态是否正确,
---VALID为正确,INVALID表示存储过程无效或需要重新编译
SELECT STATUS FROM USER_OBJECTS WHERE OBJECT_NAME='TEST_COUNT';
-----如果要检查存储过程或函数的依赖性,可以通过查询数据字典USER_DENPENDENCIES来确定,该表结构如下:
SQL> DESCRIBE USER_DEPENDENCIES;
Name Type Nullable Default Comments
-------------------- ------------- -------- ------- ----------------------------------------------------------
NAME VARCHAR2(30) Name of the object
TYPE VARCHAR2(17) Y Type of the object
REFERENCED_OWNER VARCHAR2(30) Y Owner of referenced object (remote owner if remote object)
REFERENCED_NAME VARCHAR2(64) Y Name of referenced object
REFERENCED_TYPE VARCHAR2(17) Y Type of referenced object
REFERENCED_LINK_NAME VARCHAR2(128) Y Name of dblink if this is a remote object
SCHEMAID NUMBER Y
DEPENDENCY_TYPE VARCHAR2(4) Y
SQL>
---查询存储过程TEST_COUNT的依赖关系
SELECT REFERENCED_NAME,REFERENCED_TYPE FROM USER_DEPENDENCIES WHERE NAME='TEST_COUNT';

I. oracle数据库调用存储过程

这个需要分情况的
如果是在应用程序(Java等)中调用存储过程,需要根据相应语言的语法来进行。这个可以通过查找相应语言的帮助来找到。
如果是在Oracle的其他存储过程中调用,直接写存储过程名就可以了。传入相应的参数,即可执行。
如果在Oracle的命令行中,使用EXEC
存储过程名(参数)
的方式即可调用。
如果存储过程执行的语句写在SQL文件中,则可以通过调用文件的方式执行,即
SQL>
@D:\SQL\example.sql的形式

热点内容
mr服务器地址 发布:2024-07-06 08:18:24 浏览:716
android启动分析 发布:2024-07-06 08:18:13 浏览:318
windows服务器搭建php服务器 发布:2024-07-06 07:52:52 浏览:502
试卷生成源码 发布:2024-07-06 07:51:46 浏览:800
解压爆浆 发布:2024-07-06 07:40:35 浏览:333
数据库分割试 发布:2024-07-06 07:31:48 浏览:536
算法acm 发布:2024-07-06 07:29:34 浏览:376
linuxcup 发布:2024-07-06 07:27:55 浏览:977
云裳羽衣账号密码是多少 发布:2024-07-06 07:25:07 浏览:126
海康硬盘录像机服务器地址端口 发布:2024-07-06 07:25:06 浏览:525