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如何执行存储过程? ...
随机推荐
- (转)Android中的基类—抽取出来公共的方法
在Android中,一般来说一个应用会存在几十个页面,并且一个应用一般也会使用一个特定的主题,其中的页面的风格也是一致的,并且页面中的动画效果.页面的切换效果等也应该保持同样的风格,那么就需要一个基类 ...
- 监控mysql 脚本
监控mysql脚本 http://oldboy.blog.51cto.com/2561410/986905
- Dell PowerEdge R720内存安装原则
Dell PowerEdge R720内存安装原则 摘要:系 统包含 24 个内存插槽,分为两组(每组 12 个),每个处理器一组.每组的 12 个插槽分入四个通道.在每个通道中,第一个插槽的释放 ...
- jQuery选择器this通过onclick传入方法以及Jquery中的this与$(this)初探,this传处变量等
起初以为this和$(this)就是一模子刻出来.但是我在阅读时,和coding时发现,总不是一回事. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML ...
- 在mac上 使用jenkins 执行python文件
1.要选择 [执行 shell]构建
- AngularJS:Service
ylbtech-AngularJS:Service 1.返回顶部 1. AngularJS 服务(Service) AngularJS 中你可以创建自己的服务,或使用内建服务. 什么是服务? 在 An ...
- js前端处理datetime时间类型
MySql数据库日期字段定义的是datetime类型,(顺带插入MySql数据库datetime类型可以用这个: str_to_date('2008-4-2 15:23:28','%Y-%m-%d % ...
- 1084 Broken Keyboard
题意:给出两个字符串(有字母,数字和下划线_组成),第一个字符串str1是由键盘输入的字符串,第二个字符串str2是屏幕显示的字符串,问键盘有哪几个按键坏了,根据输入的顺序,输出坏掉的键(仅输出一次) ...
- C#简单操作XML
类文件: class OperatorXML { /// <summary> /// 确定资源文件路径,Resource为自己创建的目录 /// </summary> priv ...
- 修改Ubuntu默认apt下载源
修改Ubuntu默认apt下载源 默认下载源很慢,改成阿里的下载速度超快 sudo vim /etc/apt/sources.list 将文件内容替换成 deb http://mirrors.aliy ...