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如何执行存储过程? ...
随机推荐
- webstorm设置修改文件后自动编译并刷新浏览器页面
转载:http://www.cnblogs.com/ssrsblogs/p/6155747.html 重装了 webstorm ,从10升级到了2016 一升不要紧,打开老项目,开启webpakc-d ...
- file_put_contents(): supplied resource is not a valid stream resource
在项目开发的过程中 自己想把输出和一些想要内容输出到日志文件中,便于查看 但是在输入的过程中报了这样一个错误: file_put_contents(): supplied resource is no ...
- mongodb数据操作(CRUD)
1.数据插入db.集合名.insert() 操作 > use hk switched to db hk > show collections > db.info.insert({&q ...
- Java面试(二)
1 同步方法 VS 同步代码块: java中,每一个对象都有一把锁,线程用synchronized获取对象上的锁. 非静态同步方法:锁是类的对象的锁. 静态同步方法:锁的是类本身. 同步方法块:锁是可 ...
- Unity3D Demo
之前在Unity讨论Q群里总是有不少同学求项目资源和源码神马的,其实这种资源在官网很多,而且都比较规范和专业,很有参考价值,链接:https://www.assetstore.unity3d.com/ ...
- oracle显示数据库名和表名
oracle查看表名 select table_name from user_tables; select table_name from dba_tables; select * from all_ ...
- Python 的mock模拟测试介绍
如何不靠耐心测试 可能我们正在写一个社交软件并且想测试一下"发布到Facebook的功能",但是我们不希望每次运行测试集的时候都发布到Facebook上. Python的unitt ...
- consul event
Command: consul event event 命令提供了一种机制来将自定义用户事件触发到整个数据中心. 这些事件对Consul来说是不透明的,但是它们可以用来构建脚本基础架构来执行自动化部署 ...
- GO语言文件的创建与打开实例分析
本文实例分析了GO语言文件的创建与打开用法.分享给大家供大家参考.具体分析如下: 文件操作是个很重要的话题,使用也非常频繁,熟悉如何操作文件是必不可少的.Golang 对文件的支持是在 os pack ...
- 201671010140. 2016-2017-2 《Java程序设计》java学习第八周
第八周Java学习 本周,老师带领我们完善了一下继承,借口,拷贝,lambda表达式,内部类方面欠缺,不完善的地方,帮助我们查漏补缺. 以拷贝的学习为例,我本来对拷贝的理解非常浅 ...