- 浏览: 637673 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
spring_springmvc:
java程序语言学习教程 地址http://www.zuida ...
java.math.BigDecimal类的用法 -
tuspark:
文章写的挺详细了,但是感觉太乱了,真不如这篇文章: BigDe ...
java.math.BigDecimal类的用法 -
u010040765:
感谢楼主分享,写的很详细,很容易看懂
Struts2中iterator标签遍历map总结 -
若无勇气终将褪去:
[flash=200,200][url][list][*][/ ...
java.math.BigDecimal类的用法 -
若无勇气终将褪去:
...
java.math.BigDecimal类的用法
-- 动态 SQL
-- 使用 dbms_sql 包
-- 步骤:
1)打开游标:dbms_sql.open_cursor, 返回游标 ID 号
2)语法分析:dbms_sql.parse( i_c INTEGER,i_statement IN VARCHAR2,i_language_flag IN INTEGER),
i_c打开的光标 ID,i_statement 等待分析的 SQL 语句,i_language_flag,语言版本,取值:6,7,dbms_sql.native,按连接的数据库版本运行
3)绑定输入变量:dbms_sql.bind_variable,注意:DDL,ALTER session语句不能绑定变量,绑定变量前的冒号可有可无
绑定数字型的变量:bind_variable(i_c IN INTEGER,i_name IN VARCHAR2,i_value IN NUMBER);
绑定varchar2型的变量:bind_variable(i_c IN INTEGER,i_name IN VARCHAR2,i_value IN VARCHAR2);
bind_variable(i_c IN INTEGER,i_name IN VARCHAR2,i_value IN VARCHAR2,o_value_size OUT INTEGER);
绑定char型的变量:bind_variable_char(i_c IN INTEGER,i_name IN VARCHAR2,i_value IN VARCHAR2[,o_value_size OUT INTEGER]);
绑定日期型的变量:bind_variable(i_c IN INTEGER,i_name IN VARCHAR2,i_value IN DATE);
绑定raw型的变量:bind_variable_raw(i_c IN INTEGER,i_name IN VARCHAR2,i_value IN RAW[,o_value_size OUT INTEGER])
绑定log型的变量:
4)执行语句:dbms_sql.EXECUTE(i_c IN INTEGER) 返回处理的行数,
5)关闭游标:dbms_sql.close_cursor(i_c IN INTEGER)
DECLARE
v_sql VARCHAR2(200);
v_age INTEGER;
v_emp_no CHAR(5);
v_id INTEGER;
v_row INTEGER;
BEGIN
v_sql :='update emp_m set emp_age = :age where emp_no = :emp_no';
v_age := 25;
v_emp_no := '00001';
v_id := dbms_sql.open_cursor;
dbms_sql.parse(v_id,v_sql,dbms_sql.native);
dbms_sql.bind_variable(v_id,':age',v_Age);
dbms_sql.bind_variable(v_id,':emp_no',v_emp_no);
v_row := dbms_sql.execute(v_id);
dbms_sql.close_cursor(v_id);
dbms_output.put_line('v_row = '||to_char(v_row));
END;
--执行查询语句
-- 步骤:
1)打开游标:dbms_sql.open_cursor, 返回游标 ID 号
2)语法分析:dbms_sql.parse( i_c INTEGER,i_statement IN VARCHAR2,i_language_flag IN INTEGER),
i_c打开的光标 ID,i_statement 等待分析的 SQL 语句,i_language_flag,语言版本,取值:6,7,dbms_sql.native,按连接的数据库版本运行
3)绑定输入变量:dbms_sql.bind_variable,注意:DDL,ALTER SESSION 语句不能绑定变量,绑定变量前的冒号可有可无
4)定义选择列表项:dbms_sql.define_column
定义类型为number的:dbms_sql.define_column(i_c IN INTEGER,i_position IN INTEGER,i_column IN NUMBER)
定义类型为varchar2的:dbms_sql.define_column(i_c IN INTEGER,i_position IN INTEGER,i_column IN VARCHAR2,i_column_size IN INTEGER)
定义类型为char的:dbms_sql.define_column_char(i_c IN INTEGER,i_position IN INTEGER,i_column IN CHAR,i_column_size IN INTEGER)
定义类型为date的:dbms_sql.define_column_date(i_c IN INTEGER,i_position IN INTEGER,i_column IN DATE)
定义类型为raw的:dbms_sql.define_column_raw(i_c IN INTEGER,i_position IN INTEGER,i_column IN RAW,i_column_size IN INTEGER)
i_position 选择列表中项的相对位置,第一个是 1 ,i_column 定义输出变量的类型和长度的变量,i_size 定义输出变量的最大长度
5)执行语句:dbms_sql.EXECUTE(i_c IN INTEGER) 返回处理的行数
6)取回查询到的行:dbms_sql.fetch_rows(i_c IN INTEGER),返回值为 0 表示结束,dbms_sql.EXECUTE 和 dbms_sql.fetch_rows 组合成一个语句:dbms_sql.execute_and_fetch(i_c IN INTEGER,i_exact IN BOOLEAN DEFAULT FALSE) RETURN INTEGER
i_exact 如果为真,则在查询是返回一行以上是引发异常too_many_rows,但是程序仍然可以执行fetch和检索操作
返回值表示到目前为止取回的行数
7)把查询到的结果返回到PL/SQL变量中:dbms_sql.COLUMN_VALUE
NUMBER 类型:dbms_sql.COLUMN_VALUE(i_c IN INTEGER,i_position IN INTEGER,o_value OUT NUMBER)
dbms_sql.COLUMN_VALUE(i_c IN INTEGER,i_position IN INTEGER,o_value OUT NUMBER,o_column_error OUT NUMBER,o_actual_lenth OUT INTEGER)
VARCHAR2 类型:dbms_sql.COLUMN_VALUE(i_c IN INTEGER,i_position IN INTEGER,o_value OUT VARCHAR2)
dbms_sql.COLUMN_VALUE(i_c IN INTEGER,i_position IN INTEGER,o_value OUT VARCHAR2,o_column_error OUT NUMBER,o_actual_lenth OUT INTEGER)
CHAR 类型:dbms_sql.COLUMN_VALUE(i_c IN INTEGER,i_position IN INTEGER,o_value OUT CHAR)
dbms_sql.COLUMN_VALUE(i_c IN INTEGER,i_position IN INTEGER,o_value OUT CHAR,o_column_error OUT NUMBER,o_actual_lenth OUT INTEGER)
DATE 类型:dbms_sql.COLUMN_VALUE(i_c IN INTEGER,i_position IN INTEGER,o_value OUT DATE)
dbms_sql.COLUMN_VALUE(i_c IN INTEGER,i_position IN INTEGER,o_value OUT DATE,o_column_error OUT NUMBER,o_actual_lenth OUT INTEGER)
RAW 类型:dbms_sql.COLUMN_VALUE(i_c IN INTEGER,i_position IN INTEGER,o_value OUT RAW)
dbms_sql.COLUMN_VALUE(i_c IN INTEGER,i_position IN INTEGER,o_value OUT RAW,o_column_error OUT NUMBER,o_actual_lenth OUT INTEGER)
8)关闭游标:dbms_sql.close_cursor(i_c IN INTEGER)
DECLARE
v_sql VARCHAR2(200);
v_id INTEGER;
v_emp_name emp_m.emp_name%TYPE;
v_emp_sex emp_m.emp_sex%TYPE;
v_emp_age emp_m.emp_age%TYPE;
v_emp_birthday emp_m.emp_birthday%TYPE;
v_row INTEGER;
BEGIN
v_sql := 'select emp_name,emp_sex,emp_age,emp_birthday from emp_m where emp_no = :emp_no';
v_id := dbms_sql.open_cursor;
dbms_sql.parse(v_id,v_Sql,dbms_sql.native);
dbms_sql.bind_variable(v_id,':emp_no','00001');
dbms_sql.define_column(v_id,1,v_emp_name,10);
dbms_sql.define_column_char(v_id,2,v_emp_sex,1);
dbms_sql.define_column(v_id,3,v_emp_age);
dbms_sql.define_column(v_id,4,v_emp_birthday);
v_row := dbms_sql.execute(v_id);
LOOP
IF dbms_sql.fetch_rows(v_id) = 0 THEN
EXIT;
END IF;
dbms_sql.COLUMN_VALUE(v_id,1,v_emp_name);
dbms_sql.column_value_char(v_id,2,v_emp_sex);
dbms_sql.column_value(v_id,3,v_emp_age);
dbms_sql.column_value(v_id,4,v_emp_birthday);
dbms_output.put_line('emp_name='||v_emp_name||',emp_sex='||v_emp_sex||',emp_age='||to_char(v_emp_age)||',emp_birthday='||to_char(v_emp_birthday,'yyyy/mm/dd'));
END LOOP;
dbms_sql.close_cursor(v_id);
END;
-- 使用 dbms_sql 包
-- 步骤:
1)打开游标:dbms_sql.open_cursor, 返回游标 ID 号
2)语法分析:dbms_sql.parse( i_c INTEGER,i_statement IN VARCHAR2,i_language_flag IN INTEGER),
i_c打开的光标 ID,i_statement 等待分析的 SQL 语句,i_language_flag,语言版本,取值:6,7,dbms_sql.native,按连接的数据库版本运行
3)绑定输入变量:dbms_sql.bind_variable,注意:DDL,ALTER session语句不能绑定变量,绑定变量前的冒号可有可无
绑定数字型的变量:bind_variable(i_c IN INTEGER,i_name IN VARCHAR2,i_value IN NUMBER);
绑定varchar2型的变量:bind_variable(i_c IN INTEGER,i_name IN VARCHAR2,i_value IN VARCHAR2);
bind_variable(i_c IN INTEGER,i_name IN VARCHAR2,i_value IN VARCHAR2,o_value_size OUT INTEGER);
绑定char型的变量:bind_variable_char(i_c IN INTEGER,i_name IN VARCHAR2,i_value IN VARCHAR2[,o_value_size OUT INTEGER]);
绑定日期型的变量:bind_variable(i_c IN INTEGER,i_name IN VARCHAR2,i_value IN DATE);
绑定raw型的变量:bind_variable_raw(i_c IN INTEGER,i_name IN VARCHAR2,i_value IN RAW[,o_value_size OUT INTEGER])
绑定log型的变量:
4)执行语句:dbms_sql.EXECUTE(i_c IN INTEGER) 返回处理的行数,
5)关闭游标:dbms_sql.close_cursor(i_c IN INTEGER)
DECLARE
v_sql VARCHAR2(200);
v_age INTEGER;
v_emp_no CHAR(5);
v_id INTEGER;
v_row INTEGER;
BEGIN
v_sql :='update emp_m set emp_age = :age where emp_no = :emp_no';
v_age := 25;
v_emp_no := '00001';
v_id := dbms_sql.open_cursor;
dbms_sql.parse(v_id,v_sql,dbms_sql.native);
dbms_sql.bind_variable(v_id,':age',v_Age);
dbms_sql.bind_variable(v_id,':emp_no',v_emp_no);
v_row := dbms_sql.execute(v_id);
dbms_sql.close_cursor(v_id);
dbms_output.put_line('v_row = '||to_char(v_row));
END;
--执行查询语句
-- 步骤:
1)打开游标:dbms_sql.open_cursor, 返回游标 ID 号
2)语法分析:dbms_sql.parse( i_c INTEGER,i_statement IN VARCHAR2,i_language_flag IN INTEGER),
i_c打开的光标 ID,i_statement 等待分析的 SQL 语句,i_language_flag,语言版本,取值:6,7,dbms_sql.native,按连接的数据库版本运行
3)绑定输入变量:dbms_sql.bind_variable,注意:DDL,ALTER SESSION 语句不能绑定变量,绑定变量前的冒号可有可无
4)定义选择列表项:dbms_sql.define_column
定义类型为number的:dbms_sql.define_column(i_c IN INTEGER,i_position IN INTEGER,i_column IN NUMBER)
定义类型为varchar2的:dbms_sql.define_column(i_c IN INTEGER,i_position IN INTEGER,i_column IN VARCHAR2,i_column_size IN INTEGER)
定义类型为char的:dbms_sql.define_column_char(i_c IN INTEGER,i_position IN INTEGER,i_column IN CHAR,i_column_size IN INTEGER)
定义类型为date的:dbms_sql.define_column_date(i_c IN INTEGER,i_position IN INTEGER,i_column IN DATE)
定义类型为raw的:dbms_sql.define_column_raw(i_c IN INTEGER,i_position IN INTEGER,i_column IN RAW,i_column_size IN INTEGER)
i_position 选择列表中项的相对位置,第一个是 1 ,i_column 定义输出变量的类型和长度的变量,i_size 定义输出变量的最大长度
5)执行语句:dbms_sql.EXECUTE(i_c IN INTEGER) 返回处理的行数
6)取回查询到的行:dbms_sql.fetch_rows(i_c IN INTEGER),返回值为 0 表示结束,dbms_sql.EXECUTE 和 dbms_sql.fetch_rows 组合成一个语句:dbms_sql.execute_and_fetch(i_c IN INTEGER,i_exact IN BOOLEAN DEFAULT FALSE) RETURN INTEGER
i_exact 如果为真,则在查询是返回一行以上是引发异常too_many_rows,但是程序仍然可以执行fetch和检索操作
返回值表示到目前为止取回的行数
7)把查询到的结果返回到PL/SQL变量中:dbms_sql.COLUMN_VALUE
NUMBER 类型:dbms_sql.COLUMN_VALUE(i_c IN INTEGER,i_position IN INTEGER,o_value OUT NUMBER)
dbms_sql.COLUMN_VALUE(i_c IN INTEGER,i_position IN INTEGER,o_value OUT NUMBER,o_column_error OUT NUMBER,o_actual_lenth OUT INTEGER)
VARCHAR2 类型:dbms_sql.COLUMN_VALUE(i_c IN INTEGER,i_position IN INTEGER,o_value OUT VARCHAR2)
dbms_sql.COLUMN_VALUE(i_c IN INTEGER,i_position IN INTEGER,o_value OUT VARCHAR2,o_column_error OUT NUMBER,o_actual_lenth OUT INTEGER)
CHAR 类型:dbms_sql.COLUMN_VALUE(i_c IN INTEGER,i_position IN INTEGER,o_value OUT CHAR)
dbms_sql.COLUMN_VALUE(i_c IN INTEGER,i_position IN INTEGER,o_value OUT CHAR,o_column_error OUT NUMBER,o_actual_lenth OUT INTEGER)
DATE 类型:dbms_sql.COLUMN_VALUE(i_c IN INTEGER,i_position IN INTEGER,o_value OUT DATE)
dbms_sql.COLUMN_VALUE(i_c IN INTEGER,i_position IN INTEGER,o_value OUT DATE,o_column_error OUT NUMBER,o_actual_lenth OUT INTEGER)
RAW 类型:dbms_sql.COLUMN_VALUE(i_c IN INTEGER,i_position IN INTEGER,o_value OUT RAW)
dbms_sql.COLUMN_VALUE(i_c IN INTEGER,i_position IN INTEGER,o_value OUT RAW,o_column_error OUT NUMBER,o_actual_lenth OUT INTEGER)
8)关闭游标:dbms_sql.close_cursor(i_c IN INTEGER)
DECLARE
v_sql VARCHAR2(200);
v_id INTEGER;
v_emp_name emp_m.emp_name%TYPE;
v_emp_sex emp_m.emp_sex%TYPE;
v_emp_age emp_m.emp_age%TYPE;
v_emp_birthday emp_m.emp_birthday%TYPE;
v_row INTEGER;
BEGIN
v_sql := 'select emp_name,emp_sex,emp_age,emp_birthday from emp_m where emp_no = :emp_no';
v_id := dbms_sql.open_cursor;
dbms_sql.parse(v_id,v_Sql,dbms_sql.native);
dbms_sql.bind_variable(v_id,':emp_no','00001');
dbms_sql.define_column(v_id,1,v_emp_name,10);
dbms_sql.define_column_char(v_id,2,v_emp_sex,1);
dbms_sql.define_column(v_id,3,v_emp_age);
dbms_sql.define_column(v_id,4,v_emp_birthday);
v_row := dbms_sql.execute(v_id);
LOOP
IF dbms_sql.fetch_rows(v_id) = 0 THEN
EXIT;
END IF;
dbms_sql.COLUMN_VALUE(v_id,1,v_emp_name);
dbms_sql.column_value_char(v_id,2,v_emp_sex);
dbms_sql.column_value(v_id,3,v_emp_age);
dbms_sql.column_value(v_id,4,v_emp_birthday);
dbms_output.put_line('emp_name='||v_emp_name||',emp_sex='||v_emp_sex||',emp_age='||to_char(v_emp_age)||',emp_birthday='||to_char(v_emp_birthday,'yyyy/mm/dd'));
END LOOP;
dbms_sql.close_cursor(v_id);
END;
发表评论
-
分区表创建
2012-02-10 14:52 1262--范围分区 -- Create table create t ... -
oracle connect by
2012-02-09 18:09 11889一、首先从一个经典的查询序列数例子入手: selec ... -
expdp和impdp
2012-02-09 17:15 15161,导出表数据 expdp liyongjie/liyongj ... -
sqlldr 工具
2012-02-09 16:21 1322小例子: sqlldr userid=liyongjie/li ... -
一道SQL题
2012-02-08 14:33 1084有表如下(表名:score): Name Course Mar ... -
oracle 的连接
2009-11-09 21:08 1061Oracle的外连接(outer join):可以分为:左连接 ... -
oracle 備份與恢復案例
2009-10-12 10:54 969一. 理解什么是数据库 ... -
Oracle语句优化53个规则详解
2009-09-27 16:40 1189Oracle语句优化53个规则详解 1. 选用适合的ORACL ... -
Oracle的索引
2009-09-27 16:29 1404Oracle的索引 索引和对应的表应该位于不同的表空间 ... -
SQL Plus环境设置与常用命令
2009-09-27 15:50 2150SQL Plus环境设置与常用命令: set serverou ... -
Oracle的正则表达式
2009-09-27 08:28 2119Oracle的正则表达式 http://www.psoug.o ... -
Oracle developer的异常处理机制
2009-09-27 08:26 1263Oracle developer的异常处理机制 Oracle ... -
oracle優化提示
2009-09-27 08:24 10321. /*+ALL_ROWS*/ 表明對語句塊選擇基於開銷的優 ... -
ORACLE的临时表
2009-09-27 08:19 1351CREATE GLOBAL TEMPORARY TABLE T ... -
oracle学习笔记(第十八章:oracle & java)
2009-09-07 20:19 13051, 创建JAVA 外部例程: 1) 编制java代码 2) ... -
oracle学习笔记(第十六章:oracle大对象)
2009-09-07 20:15 2697-- 大对象的使用 -- oracle 支持以下4种LOB数据 ... -
oracle学习笔记(第十五章:排程作业)
2009-09-07 20:14 2695--数据库作业:dbms_job -- d ... -
oracle学习笔记(第十十四章:批量绑定)
2009-09-07 20:13 1486-- 使用批量绑定来执行 DELETE DECLARE T ... -
oracle学习笔记(第十三章:自定义数据类型)
2009-09-07 20:12 6628---------------------用Oracle Ob ... -
oracle学习笔记(第十二章:oracle例外(异常))
2009-09-07 20:12 1596--Oracle中的例外(异常) --预先定义的例外 --此类 ...
相关推荐
Oracle SQL是数据库管理员和开发人员在Oracle数据库系统中进行数据查询和管理的重要工具。这篇笔记主要涵盖了Oracle SQL的...这两份“Oracle SQL笔记”文档应包含了上述各个方面的详细解释和实例,值得仔细阅读和学习。
### ORACLE经典学习笔记知识点概览 #### 第一章 ORACLE 命令 本章节主要介绍了Oracle数据库中常用的命令及其使用方法。 1. **查看参数文件**: `Desc v$parameter` - 这个命令用于查看Oracle的参数文件信息,通过...
│ Oracle学习笔记.pdf │ Oracle学习笔记.wps │ 安装Oracle后myEclipse不能正常使用.txt │ 手工配置listener.ora【避免出现ORA-12514错误】.txt │ 贴子树状态存储结构.jpg │ 贴子树状态存储结构.sql │ ├─01...
【Oracle SQL笔记详解】 Oracle SQL是用于访问和操作Oracle数据库的强大工具,涵盖了各种查询、更新和管理数据的方法。以下是对笔记中提及的一些关键知识点的详细解释: 1. **登录Oracle数据库**:通常以超级管理...
本学习笔记以第17章构筑高速运行的SQL语句为例,详细探讨了Oracle数据库性能调整的相关知识点。 首先,需要明确数据库性能调整的概念和范围。数据库性能调整是通过一系列的方法和技术,改善数据库运行效率和响应...
### Oracle学习笔记知识点详解 #### 一、SQL概述与Oracle简介 - **SQL**(Structured Query Language,结构化查询语言)是一种用于管理关系型数据库的标准语言。它被用来执行各种数据库操作,如查询数据、更新数据...
第1篇 日常应用 第1章 安装和卸载 第2章 数据库管理 第3章 数据库实例管理 ... 第17章 常用性能监测、分析和优化工具 第18章 对SQL语句进行分析和优化 第19章 索引和提示优化 第20章 数据库分区技术
第十七章 组函数及分组统计:这部分讨论了GROUP BY语句和聚合函数(如COUNT、SUM、AVG、MAX、MIN)的使用,用于对数据进行汇总和统计。 第十八章 数据库对象:这部分可能涵盖其他数据库对象,如视图、存储过程、...
### 韩顺平Oracle视频笔记知识点概览 #### 1. Oracle 用户管理 - **概念**:在Oracle数据库中,用户是用来管理访问权限的基本单位。每个用户都可以有自己的模式(schema),其中包含各种对象如表、视图等。 - **创建...
第十一讲:PL/SQL编程进阶 进阶PL/SQL编程涵盖游标、复合类型、包(PACKAGE)、记录类型和动态SQL等高级主题。游标用于逐行处理查询结果,复合类型允许创建自定义数据结构,包则将相关过程和变量封装在一起,提高...
第十一章 使用视图 视图(VIEW)是虚拟表,基于一个或多个表的SELECT查询。视图可以简化复杂的查询,并提供数据的安全性,因为它们可以限制对原始数据的访问。 这些笔记覆盖了Oracle SQL的基础知识,包括查询、数据...
本"Oracle十八天学习笔记"涵盖了Oracle数据库的基础到高级概念,旨在帮助初学者和有一定经验的开发者深入理解Oracle的核心技术和应用。 第1天:Oracle简介与安装配置 在第一天的学习中,我们将了解Oracle的历史背景...
031714_【第17章:Java数据库编程】_使用JDBC连接Oracle笔记.pdf 031801_【第18章:图形界面】_AWT、Swing简介笔记.pdf 031802_【第18章:图形界面】_基本容器:JFrame笔记.pdf 031803_【第18章:图形界面】_标签...
第十七天:数据库故障诊断与维护 1. 日志管理:理解redo log和archive log,以及如何进行故障恢复。 2. 软件更新与补丁:学习如何应用Oracle数据库的补丁,理解补丁升级流程。 3. 监控工具:了解Oracle Enterprise ...
以下是一些Oracle学习笔记中的关键知识点: 1. **远程访问Oracle数据库**:你可以通过URL `http://127.0.0.1:5560/isqlplus/` 来访问Oracle数据库,不论是自己的还是他人的,这表明Oracle提供了Web接口来操作数据库...
以下是从《从实践中学习 oracle/SQL》一书第一章和第二章中提取的知识点: 1. **简单查询语句**:基本的查询语句由`SELECT`和`FROM`构成,如`SELECT * FROM employees`,其中`*`表示选取所有列,而`;`作为语句结束...
- 动态SQL:如何在PL/SQL中执行动态SQL语句。 **第八至九天:索引与性能优化** - 索引类型:B树、位图、函数索引等,以及何时使用它们。 - Explain Plan:学习如何使用Explain Plan来分析查询执行计划,优化查询...
第十六至十七天:性能优化 了解Oracle的性能监控工具如V$视图,分析SQL执行计划,使用索引、物化视图和绑定变量来提升性能。了解CBO(Cost-Based Optimizer)的工作原理。 第十八天:高可用性与集群 Oracle RAC...
最大优点是可以包含其他 SELECT 语句,使用能够动态地建立 WHERE 子句。 如 SELECT prod_id,prod_price,prod_name FROM Products WHERE vend_id IN(‘DELL’,’RBER’,’TTSR’); 八、单行函数: 函数一般在数据...