ORACLE 动态语句
在一般的PL/SQL程序开发中,可以使用SQL的DML语句和事务控制语句,但是DDL语句及会话语句却不能在PL/SQL中直接使用,要想实现在PL/SQL中使用DDL语句及会话控制语句,可以通过动态SQL来实现。
所谓动态SQL是指在PL/SQL块编译时SQL语句是不确定的,例如根据用户输入参数的不同而执行不同的操作。编译程序对动态语句部分不进行处理,只是在程序运行时动态地创建语句,对语句进行语法分析并执行该语句。 ORACLE中的动态SQL可以通过本地动态SQL命令来执行,也可以通过DBMS_SQL程序包来执行。
通常在开发中用简单的本地动态SQL就能解决问题,在下面我会用别的方法来实现。给出执行本地动态SQL的语法:
EXECUTE IMMEDIATE dynamic_sql_string [INTO define_variable_list] [USING bind_argument_list];
其中: dynamic_sql_string 是动态SQL语句字符串 INTO子句用于接受SELECT语句选择的纪录值。 USING子句用于接受绑定输入参数变量。
例子1:
DECLARE
sql_s varchar2(200);
emp_id number(4):=7566;
emp_rec emp%rowtype;
BEGIN
EXECUTE IMMEDIATE 'create table table_name (id number,amt number)';
sql_s:='select * from emp where empno=:id;
EXECUTE IMMEDIATE sql_s into emp_rec using emp_id;
END;
这段代码首先执行一条创建的动态SQL,接着执行了带参数的SELECT语句。EXECUTE IMMEDIATE语句只能用于处理返回单行或没有返回的SQL语句,要处理返回多行的动态SQL就要使用REF游标的OPEN...FOR语句。下面就来讨论:
例2:
要求:用户输入多个批次号(lot_number)和物料号(key_number )或多个批次号(lot_number)和供应商名(ver_apell)来求库存中物料的数目为了让代码结构清晰,我使用包来创建代码:
首先,创建包头部分:
create or replace package SMT_Traceability_p is
&n
相关文档:
包由包规范和包体两部分组成。
1、包规范(Package Specification)
包规范,也叫做包头,包含了有关包的内容的信息。但是,它不包含任何过程的代码。
创建包头的语法一般如下
CREATE [OR REPLACE] PACKAGE package_name {IS | AS}
Procedure_name | function_name | variable_declaration | type_def ......
1、对象类型规范
创建对象类型规范的语法如下
CREATE [OR REPLACE] TYPE [schema.] type_name
[AUTHID {CURRENT_USER|DEFINER}] AS OBJECT (
Attribute1 datatype,
[attribute2 datatype,…]
[method 1]
[method 2]);
/
其中AUTHID指示将来执行该方法时, ......
4、对象依赖性
CREATE OR REPLACE TYPE Obj1 AS OBJECT (
f1 NUMBER,
f2 VARCHAR2(10),
f3 DATE
);
/
CREATE OR REPLACE TYPE Obj2 AS OBJECT (
f1 DATE,
f2 CHAR(1)
);
/
CREATE OR REPLACE TYPE Obj3 AS OBJECT (
a Obj1,
b Obj2
);
/
OBJ3依赖于OBJ ......
Oracle的分页查询语句基本上可以按照本文给出的格式来进行套用。
分页查询格式:
SELECT * from
(
SELECT A.*, ROWNUM RN
from (SELECT * from TABLE_NAME) A
WHERE ROWNUM <= 40
)
WHERE RN >= 21
其中最内层的查询SELECT * from TABLE_NAME表示不进行翻页的原始查询语句。ROWNUM <= 40和RN ......
一个db类 类似于jdbc的驱动和链接配置
package com.assi;
import org.apache.log4j.jdbc.JDBCAppender;
public class DB extends JDBCAppender {
public DB(){
this.setDriver("oracle.jdbc.driver.OracleDriver");
& ......