总结说明:
在Oracle开发过程中,我们可以使用动态SQL来执行DDL语句、DML语句、事务控制语句及系统控制语句。但是需要注意的是,PL/SQL块中使用动态SQL执行DDL语句的时候与别的不同,在DDL中使用绑定变量是非法的(bind_variable(v_cursor,’:p_name’,name)),分析后不需要执行DBMS_SQL.Bind_Variable,直接将输入的变量加到字符串中即可。另外,DDL是在调用DBMS_SQL.PARSE时执行的,所以DBMS_SQL.EXECUTE也可以不用,即在上例中的v_row:=dbms_sql.execute(v_cursor)部分可以不要。
Oracle存储过程调用Java方法
存储过程中调用Java程序段 软件环境:
1、 操作系统:Windows 2000 Server
2、 数 据 库:Oracle 8i R2 (8.1.7) for NT 企业版 3、 安装路径:C:\\ORACLE 实现方法:
1、 创建一个文件为Test.java public class Test { } public static void main(String args[]) { } System.out.println(\2、 javac Test.java 3、 java Test
4、 SQL> conn system/manager
SQL> grant create any directory to scott; SQL> conn scott/tiger
SQL> create or replace directory test_dir as 'd:\\'; 目录已创建。
SQL> create or replace java class using bfile(test_dir,'TEST.CLASS') 2 /
Java 已创建。
SQL> select object_name,object_type,STATUS from user_objects; SQL> create or replace procedure test_java as language java
name 'TEST.main(java.lang.String[])'; /
过程已创建。
SQL> set serveroutput on size 5000 SQL> call dbms_java.set_output(5000); 调用完成。
SQL> execute test_java;
HELLO THIS iS A Java PROCEDURE
PL/SQL 过程已成功完成。 SQL> call test_java();
HELLO THIS iS A Java PROCEDURE 调用完成。
Oracle 8I 9I都测试通过。
Oracle高效分页存储过程实例
create or replace package p_page is -- Author : PHARAOHS -- Created : 2006-4-30 14:14:14 -- Purpose : 分页过程 TYPE type_cur IS REF CURSOR; --定义游标变量用于返回记录集 PROCEDURE Pagination( Pindex in number, --分页索引 Psql in varchar2, --产生dataset的sql语句 Psize in number, --页面大小 Pcount out number, --返回分页总数 v_cur out type_cur --返回当前页数据记录 ); procedure PageRecordsCount( Psqlcount in varchar2, --产生dataset的sql语句 Prcount out number --返回记录总数 ); end p_page; / create or replace package body p_page is PROCEDURE Pagination( Pindex in number, Psql in varchar2, Psize in number, Pcount out number, v_cur out type_cur ) AS v_sql VARCHAR2(1000); v_count number; v_Plow number;
v_Phei number; Begin ------------------------------------------------------------取分页总数 v_sql := 'select count(*) from (' || Psql || ')'; execute immediate v_sql into v_count; Pcount := ceil(v_count/Psize); ------------------------------------------------------------显示任意页内容 v_Phei := Pindex * Psize + Psize; v_Plow := v_Phei - Psize + 1; --Psql := 'select rownum rn,t.* from zzda t' ; --要求必须包含rownum字段 v_sql := 'select * from (' || Psql || ') where rn between ' || v_Plow || ' and ' || v_Phei ; open v_cur for v_sql; End Pagination; --************************************************************************************** procedure PageRecordsCount( Psqlcount in varchar2, Prcount out number ) as v_sql varchar2(1000); v_prcount number; begin v_sql := 'select count(*) from (' || Psqlcount || ')'; execute immediate v_sql into v_prcount; Prcount := v_prcount; --返回记录总数 end PageRecordsCount; --************************************************************************************** end p_page; /