//下面为游标知识
declare
--定义游标
type emp_cursor is ref cursor;
star_cursor emp_cursor;
begin
open star_cursor for select ...;
loop
fetch star_cursor into ...;
dbms...;
end loop;
end;
SET SERVEROUTPUT ON;
DECLARE
--游标的声明
CURSOR c_emp is
select ename,sal from emp;
--定义接收游标中的 数据变量
v_ename emp.ename%TYPE;
v_sal emp.sal%TYPE;
--声明基于游标的记录来接收数据
vr_emp c_emp%ROWTYPE;
BEGIN
--打开游标
open c_emp;
--取出游标中的数据
loop
fetch c_emp into v_ename,v_sal;
--检查是否到最后一条数据
exit when c_emp%NOTFOUND;
--打印数据
DBMS_OUTPUT.PUT_LINE('姓名:'||v_ename||'薪水:'||v_sal);
end loop;
CLOSE c_emp;
DBMS_OUTPUT.PUT_LINE('=====================');
open c_emp;
loop
fetch c_emp into vr_emp;
exit when c_emp%NOTFOUND;
DBMS_OUTPUT.PUT_LINE('姓名:'||vr_emp.ename||'薪水:'||vr_emp.sal);
end loop;
CLOSE c_emp;
DBMS_OUTPUT.PUT_LINE('=====================');
--上面两个都要打开关闭游标,下面for循环不用打开和关闭游标
for emp_record in reverse c_emp loop
DBMS_OUTPUT.PUT_LINE('姓名:'||emp_record.ename||'薪水:'||emp_record.sal);
end loop;
END;
下面是while循环
SET SERVEROUTPUT ON;
DECLARE
--游标的声明
CURSOR c_emp is
select ename,sal from emp;
--定义接收游标中的 数据变量
v_ename emp.ename%TYPE;
v_sal emp.sal%TYPE;
--声明基于表的记录来接收数据
vr_emp c_emp%ROWTYPE;
BEGIN
--打开游标
if c_emp%ISOPEN = false then
open c_emp;
end if;
fetch c_emp into v_ename,v_sal;
while c_emp%FOUND loop
DBMS_OUTPUT.PUT_LINE('name:'||v_ename||'sal:'||v_sal);
if c_emp%ROWCOUNT = 200 then
exit;
end if;
fetch c_emp into v_ename,v_sal;
end loop;
close c_emp;
END;
游标中的参数问题
SET SERVEROUTPUT ON;
DECLARE
--游标的声明
CURSOR c_emp (p_deptno in emp.deptno%TYPE)
is
select * from emp
where deptno = p_deptno;
r_deptno emp.deptno%TYPE;
BEGIN
r_deptno := '30';
for r_emp in c_emp(r_deptno)
loop
DBMS_OUTPUT.PUT_LINE('dempno is: '||r_deptno||'name is:'||r_emp.ename);
end loop;
END;
//下面是存储过程
create procedure star_pro(v_name varchar2,v_sal number ) is
begin
update emp set sal = v_sal where ename = v_name;
end;
//上面为存储过程的一般形式,下面为存储过程带上in,out参数,并通过oracle执行存储过程得到结果
create or replace procedure sp_test
as
cursor c_group
is
select ename from emptestwhere sal > 2000 group by job;
begin
for r_group in c_group
loop
update emptest set comm = comm+3000;
end loop;
end;
create or replace procedure sp_findname
(i_ename in varchar2,
o_sal out number)
as
begin
select sal into o_sal from emptest
where ename = i_ename;
exception
when others
then
dbms_output.put_line('error');
end;
declare
v_sal emptest.sal%type;
begin
sp_findname('STAR',v_sal);
dbms_output.put_line('v_sal is'||v_sal);
end;
//通过java调用并返回单个结果的例子
create or replace procedure sp_inout
(i_id in int , o_name out varchar2 , o_job out varchar2)
as
begin
select ename,job
into o_name,o_job
from emptest where empno = i_id;
end;
//通过java调用并返回一个结果集的例子
--1.新建一个包,并在包中定义一个游标test_cursor
create or replace package testpackage as
type test_cursor is ref cursor;
end;
--2.创建过程
create or replace procedure sp_getall
(id in number,p_cursor out testpackage.test_cursor)
is
begin
open p_cursor for
select * from emp where deptno = id;
end;
//java调用存储过程一般形式
try {
//1.加载驱动
Class.forName("oracle.jdbc.driver.OracleDriver");
//2.获得连接
Connection connection = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl","scott","tiger");
//3.创建CallableStatement
CallableStatement cs = connection.prepareCall("{call star_pro(?,?)}");
//4.赋值
cs.setString(1,"SCOTT");
cs.setInt(2,30000);
//5.执行
cs.execute();
//6.关闭
cs.close();
connection.close();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
//java调用存储过程带上返回结果的形式
package star;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class JdbcConn {
public static void main(String[] args) {
conn();
}
public static void conn(){
String driver = "oracle.jdbc.driver.OracleDriver";
String user = "SCOTT";
String password = "tiger";
String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
Class.forName(driver);
conn = DriverManager.getConnection(url, user, password);
//下面是一般的oracle查询
String sql = "select * from emptest where ename = ?";
/*ps = conn.prepareStatement(sql);
ps.setString(1, "SCOTT");
rs = ps.executeQuery();
while(rs.next()){
System.out.println(rs.getString(2)+" 的工作是 "+rs.getString(3));
}*/
//下面是java调用存储过程
CallableStatement callableStatement = conn.prepareCall("{call sp_inout(?,?,?)}");
callableStatement.setInt(1, 7788);
callableStatement.registerOutParameter(2, java.sql.Types.VARCHAR);
callableStatement.registerOutParameter(3, java.sql.Types.VARCHAR);
callableStatement.execute();
String name = callableStatement.getString(2);
String job = callableStatement.getString(3);
System.out.println(name + " " +job);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
//java调用存储过程返回一个结果集
try {
//1.加载驱动
Class.forName("oracle.jdbc.driver.OracleDriver");
//2.获得连接
Connection connection = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl","scott","tiger");
//3.创建CallableStatement
CallableStatement cs = connection.prepareCall("{call sp_getall(?,?)}");
cs.setInt(1,30);
cs.registerOutParameter(2,oracle.jdbc.OracleTypes.CURSOR);
//这里可以有两种选择
//1.oracle.jdbc.OracleTypes.*;
//2. java.sql.Types.*;
cs.execute();
ResultSet rs = (ResultSet) cs.getObject(2);
while(rs.next()){
System.out.println("name is : "+rs.getString(2));
}
cs.close();
connection.close();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
//包的规范只包含过程和函数的说明,但是没有具体代码,
//包体用于实现包规范中的过程和函数
create package star_package is
procedure update_sal(v_name varchar2,v_sal number);
function annual_income(v_name varchar2) return number;
end;
//下面是包体的创建
create package body star_package is
procedure update_sal(v_name varchar2,v_sal number)
is
begin
...
end;
function annual_income(v_name varchar2) return number
is
results number; //结果
begin
...
return results;
end;
end;
记录
declare
type emp_record is record(name emp.ename%type,sal emp.sal%type)
star_record emp_record;
begin
select ename,sal into star_record
from emp where ...;
dbms_output.putline('...');
end;
//复合变量,含有多个变量
//下面为触发器
create or replace trigger emptest_ba
before insert or update or delete
on emptest
for each row
declare
v_ename emptest.ename%type;
begin
if inserting then
v_ename := 'INSERT';
:new.hiredate :=sysdate;
elsif deleting then
v_ename := 'DELETE';
elsif updating then
v_ename := 'UPDATE';
end if;
update emptest set ename = v_ename where deptno = 40;
if sql%notfound then
insert into emptest(ename,sal)
values
(v_ename,10);
end if;
end;
分享到:
相关推荐
标题“Sql语法转换为Oracle语法”涉及到的主要知识点是SQL Server与Oracle数据库之间的SQL语句转换。这通常是因为在系统迁移或跨平台开发时,需要将SQL Server的查询语句适应Oracle数据库的语法。 描述中提到的...
### pg与oracle语法差异知识点详解 #### 一、空值处理 **PostgreSQL** 和 **Oracle** 在处理空值(`null`)方面存在显著差异: - **PostgreSQL**: `null` 和空字符串(`''`)被视为不同的值。这意味着在进行比较或...
以下是一些关于Oracle语法和个人学习整理的关键知识点: 1. **初始口令**:Oracle安装完成后,预设了一些默认的系统用户及其口令,例如: - internal/oracle - sys/change_on_install - system/manager - scott...
本"Oracle语法指南"提供了全面的Oracle SQL语法参考和实例解析,旨在帮助用户更好地理解和掌握Oracle数据库的操作。 首先,"oracle语法.txt"可能包含了Oracle SQL的基础到高级语法,例如: 1. **数据类型**:...
本篇文章将深入探讨Oracle语法的一些关键点,包括序列、DUAL表的使用以及如何查看系统数据。 首先,我们来看序列(Sequences)。序列在Oracle中用于生成唯一的整数,通常用于主键或者唯一标识符。创建序列后,可以...
Oracle语法是数据库管理中至关重要的组成部分,特别是在大型企业级应用中,Oracle数据库系统因其稳定性、高效性和安全性而被广泛使用。这篇文档将深入探讨Oracle SQL语法的基础和高级特性,包括数据查询、数据操作、...
UltraEdit/UEStudio Oracle 语法高亮/语法着色文件
oracle语法详细介绍,简单易懂,很实用
Oracle数据库系统是全球广泛使用的大型关系数据库管理系统,它在企业级数据存储、管理和处理方面具有卓越性能。Oracle的客户端/服务器架构...《Oracle语法实例讲解》这样的资源可以帮助你进一步提升Oracle技能。
Oracle语法,有关于oracle的基础知识。
对于初学者而言,掌握Oracle语法是迈向数据库管理专业之路的关键步骤。本资料集《Oracle语法大全》旨在提供全面而深入的Oracle语言知识,涵盖了从基础查询到高级特性的各个方面。 一、查询语句(SQL查询) 在Oracle...
Oracle语法详解视频教程(二)part1,一共6个部分,需6个全部下载才能解压。 该视频内容为:介绍Oracle语句的条件查询和排序操作。
Oracle语法大全涵盖了从基本的SQL查询到复杂的数据库管理技术,旨在帮助用户全面理解和掌握Oracle数据库的操作。 一、SQL基础 Oracle SQL是用于与Oracle数据库交互的语言,包括数据查询、插入、更新和删除等操作。...
Oracle 语法及常用命令 Oracle 语法是关系型数据库管理系统的核心语言,用于管理和操作数据库。下面是 Oracle 语法及常用命令的详细知识点: 一、数据库概述 * 数据库是按照数据结构来组织、存储和管理数据的仓库...
了解Oracle语法基础对于数据库管理员(DBA)和开发人员来说至关重要。 1. **数据类型** Oracle 支持多种数据类型,包括数值类型(如 NUMBER)、字符串类型(如 VARCHAR2、CHAR)、日期时间类型(如 DATE)、二进制...
这个“oracle语法.rar”压缩包包含了关于Oracle数据库的一些关键知识点,如递归查询、内置函数、PL/SQL编程以及分页建表等。下面将详细介绍这些内容。 1. **递归查询**:在Oracle中,递归查询通常用于处理层次结构...