Oracle 写存储过程的一个模板还有一些基本的知识点
我很少用Oracle,也算新手,不过其实入手没有那么难,下面只是一个基本知识,高手绕道,其实数据库基本是相同的,这里提供都是基本知识点
有一个Oracle溢出的问题,容易让新手怀疑到无所怀疑,其实就是在做除法的时候长度太长导致,所以要用一个round来解决这个新手注意不到问题
其他的确实没有什么可说的看注释
declare
vs_string VARCHAR2(2000);
vn_number NUMBER;
vc_cur SYS_REFCURSOR;
vl_row wx_supplier%ROWTYPE;
type type_wx_supplier is record( id NUMBER, name VARCHAR2(200) );
vv_row type_wx_supplier;
BEGIN
dbms_output.put_line('begin');
select wxs.* into vl_row from wx_supplier wxs where rownum=1;
dbms_output.put_line('end;');
end;
/* Cursor是游标类型,代表是数据集本身,只能在PL/SQL程序中关闭;可以通过游标FOR循环或者定义cursor来完成。 而sys_refCursor代表的是游标的引用,即数据集的引用地址,只能通过open for语句来完成。 两者的最大区别是后者可以将这个地址传递给其它程序。 问题:据说“ref cursor类型”也能够返回数据集,与sys_refCursor有什么关系? 回答: ref cursor是Oracle旧版本中使用的数据类型,用这种对象的缺点在于必须在包中定义;而现在用ys_refCursor类型, 可以直接使用。
参考定义 vs_exc_sql VARCHAR2(2000);
--执行结果判断动态语句 vn_count NUMBER;
--判断计数
type p_cursor is ref cursor;--老的orcal支持的游标
curold p_cursor;
cur SYS_REFCURSOR;
tablenamerow tablename%ROWTYPE; --表单数据行或是试图行
type rec is record ( id varchar2(200), name varchar2(200));
recdata rec;
//自定义行结构 参考语句
select count(1) into vn_count from tablename --获取计数数量
select NVL(fieldname, 'default') from tablename --提供默认值
SELECT sys_guid() INTO vs_form_to_id FROM DUAL; --获取guid 获取常数等方式需要一个空表
获取一行数据 execute immediate 只支持单条数据
EXECUTE IMMEDIATE 'select * from wk_my_bill where id in(select max(id) from wk_my_bill)' into vrowmybill; dbms_output.put_line(tablenamerow.id);
通过rownum 或max 实现取一条数据 select mb.* into tablenamerow from wk_my_bill mb where rownum=1; -- id in(select max(id) from wk_my_bill);
dbms_output.put_line(tablenamerow.id);
循环输出方式 OPEN cur FOR 后面可以接字符串,也可以接语句
OPEN cur FOR vs_result_sql;--'select * from v_tl_wk_action_codeinfo';
LOOP fetch cur into empdtl;
exit when cur%notfound;
dbms_output.put_line(empdtl.id);
END LOOP; CLOSE cur;
For in 只能是语句不能是字符串
For cu in (select * from v_tl_wk_action_codeinfo)
loop
dbms_output.put_line(cu.form_id);
end loop;
--using 可以给动态语句传值 :
1 更新或删除的记录变量 sql%rowcount execute immediate 'insert into dept values (:1, :2, :3)'
using 50, l_depnam, l_loc;
commit; --插入更新需要用commit rowtype 以外可以用结构来定义获取混合关联数据输出
type empdtlrec is record (id varchar2(200),
name varchar2(200),
need_remark varchar2(200),
remark_title varchar2(200)); empdtl empdtlrec; */
Oracle 写存储过程的一个模板还有一些基本的知识点的更多相关文章
- oracle学习-存储过程返回一个值,和返回一个结果集
一.返回一个值 --创建存储过程 create or replace procedure sp_hu_test(spcode in varchar2,spname out varchar2)is be ...
- oracle 写存储过程有返回值时 注意在loop循环处添加返回值:=
例子: create or replace procedure p_xl is v_count NUMBER(10); begin for rs in(select yhbh from dbyh) l ...
- 懵懂oracle之存储过程
作为一个oracle界和厨师界的生手,笔者想给大家分享讨论下存储过程的知识,因为在我接触的通信行业中,存储过程的使用还是占据了一小块的地位. 存储过程是什么?不得不拿下百度词条的解释来:"存 ...
- PB中用oracle的存储过程返回记录集做数据源来生成数据窗口,PB会找不到此存储过程及不能正常识别存储过程的参数问题(转)
(转)在PB中用oracle的存储过程返回记录集做数据源来生成数据窗口 首先oracle的存储过程写法与MSSQL不一样,差别比较大. 如果是返回数据集的存储过程则需要利用oracle的包来定义游标. ...
- 懵懂oracle之存储过程3--JOB详解
在前面学习了存储过程的开发.调试之后,我们现在就需要来使用存储过程了.简单的使用,像上篇<懵懂oracle之存储过程2>中提到的存储过程调用,我们可以将写好的存储过程在另一个PL/SQL块 ...
- oracle的存储过程的作用
oracle的存储过程的作用 1.存储过程可以使得程序执行效率更高.安全性更好,因为过程建立之后 已经编译并且储存到数据库,直接写sql就需要先分析再执行因此过程效率更高,直接写sql语句会带来安全性 ...
- 2.5 Oracle之存储过程和MERGE INTO语句
一.MERGE INTO语句 1.merge into语句的功能:我们操作数据库的时候,有时候会遇到insert或者Update这种需求.我们操纵代码时至少需要写一个插入语句和更新语句并且还得单独写方 ...
- oracle数据库存储过程中NO_DATA_FOUND不起作用解决
oracle数据库存储过程中NO_DATA_FOUND不起作用 1.首先创建一个表lengzijiantest,表中只有一个字段f_id ? 1 2 3 4 5 [cpp] CREATE TABLE ...
- Oracle的存储过程编程
是一个可以用编程的方式来操作SQL的集合. | |目录 1什么是存储过程? 2存储过程的优点? 3存储过程的缺点? 4存储过程的用途? 5存储过程注意事项? 6如何写存储过程? 7如何执行存储过程? ...
随机推荐
- maven命令行创建web项目报错:java.lang.NoClassDefFoundError: org/apache/commons/lang/StringUtils
早上一上班就想新建一个web项目玩玩,没想到一敲命令创建就失败了,真是出师不利.各种折腾无果,当然我也可以用eclipse直接创建的,就是不甘心被这破问题给耍了.刚刚才发现问题原因,这个结果我也是醉了 ...
- linux下创建与删除用户详细步骤 ***
linux下用户的操作还是相对容易理解的,基本操作如下: 1.新增用户 只有root用户能创建新用户 #useradd user1 新建后将会在/home目录下生成一个与用户名相同的用户主目录.同时会 ...
- curl -I 说明
curl -I 查看header头信息
- Eclipse中的maven项目打war包
在对应的pom文件中,找到packing这个属性,改为war:如果没有,就自己加一个,这个是有默认值的,默认为jar. 例如: <modelVersion>4.0.0</modelV ...
- mysql索引原理与慢查询优化1
一 介绍 为何要有索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,因此对查询语句 ...
- mac下自定义伪协议配置
之前查了很多资料,最近也在挖掘研究这方面的漏洞. windows的很简单,在注册表配置就好了,但是mac os 是unix的,没有注册表这么一说. 但是发现腾讯等配置了自定义等协议,例如:tencen ...
- leetcode867
vector<vector<int>> transpose(vector<vector<int>>& A) { vector<vector ...
- Elasticsearch集群如何扩容机器?
前提, Elasticsearch-2.4.3的3节点安装(多种方式图文详解) 比如,你已经成功搭建了3台机器的es集群,如我这里分别是192.168.80.10.192.168.80.11.19 ...
- MySQL的FORMAT函数用法规则
1.FORMAT函数在mysql中是数据内容格式化的,格式化后得到结果:###,###,#####. ,); 输出结果: ,000.00 2.可以格式化数据为整数或者浮点数. ); 输出结果: 100 ...
- spark 中文编码处理
日志的格式是GBK编码的,而hadoop上的编码是用UTF-8写死的,导致最终输出乱码. 研究了下Java的编码问题. 网上其实对spark输入文件是GBK编码有现成的解决方案,具体代码如下 impo ...